Tag: windows

  • Deploy do nopCommerce com IIS e Cloudflare Tunnel

    nopComerce é uma plataforma de e-commerce que ocupa uma posição de liderança em um nicho muito específico: soluções de e-commerce de código aberto construídas com a stack .NET.

    Inicialmente desenvolvida para uso com o Microsoft SQL Server, hoje é compatível também com MySQL e PostgreSQL. Pareceu um projeto interessante porque eu buscava algo que eu pudesse implantar com IIS, o servidor web da Microsoft.

    Isso também seria possível com o WordPress, que conta com o plugin WooCommerce, de longe uma das soluções mais populares de e-commerce, mas eu sinto que já escrevi demais sobre WordPress aqui e queria explorar algo diferente.

    Apesar do foco dessa vez ser o Windows Server, o nopCommerce também pode ser hospedado em Linux utilizando Kestrel em vez do IIS, já que o ASP.NET Core é multiplataforma.

    Os requisitos de software para a execução do nopCommerce são detalhados na página abaixo:

    Eu segui com todas as versões mais recentes: nopCommerce na versão 4.90, que exige o runtime .NET 9.0, seguido do Microsoft SQL Server Express 2025.

    Para o sistema operacional, foi utilizado o Windows Server 2025 Core (sem o ambiente gráfico), exigindo que boa parte da configuração seja feita através da linha de comando, utilizando o PowerShell.

    O .NET pode ser baixado através dos links da página de requisitos do nopCommerce, que já aponta para a versão requerida.

    O Microsoft SQL Server é um software proprietário, mas com dois tipos de edições gratuitas: SQL Server Developer e SQL Server Express.

    O SQL Server Express tem algumas limitações em relação às edições pagas SQL Server Standard e SQL Server Enterprise, como a limitação de processamento a até 1 socket ou 4 núcleos e a limitação do tamanho do banco de dados a até 50 GB, o que pode ser suficiente para lojas de pequeno e médio porte.

    As edições SQL Server Developer não têm nenhuma limitação, mas suas licenças não permitem a utilização em ambientes de produção, diferente da licença do SQL Server Express.

    O download pode ser feito através do link a seguir:

    O nopCommerce não tem um link aberto para download, sendo necessário se cadastrar no site. O download pode ser feito através da página:

    Já com os arquivos na pasta de download, seguiremos para a instalação do Internet Information Services (IIS):

    Install-WindowsFeature -Name Web-Server -IncludeManagementTools

    Após a instalação, é possível verificar que ele está em execução com:

    Get-Service W3SVC

    Fazendo a configuração do firewall para abrir a porta HTTP para sua rede local:

    netsh advfirewall firewall add rule name="HTTP" action=allow dir=in localport=80 protocol=tcp

    Ao acessar o seu servidor via HTTP, é possível ver a página de boas-vindas, que é site padrão, localizado em C:\inetpub\wwwroot.

    Você pode listar os websites e deletar o site padrão com:

    Get-Website
    
    Remove-Website "Default Web Site"

    Instale o runtime do .NET e reinicie os IIS.

    iisreset

    Então, crie a pasta onde os arquivos do nopCommerce vão ficar e extraia nela o arquivo ZIP da aplicação.

    mkdir C:\inetpub\nopCommerce
    
    Expand-Archive -Path ".\Downloads\nopCommerce_4.90.6_NoSource_win_x64.zip" -DestinationPath "C:\inetpub\nopCommerce\"

    Agora, deve-se criar o pool de aplicação do IIS. O pool de aplicação é como um usuário do sistema operacional que vai executar o serviço web. Isso pode ser feito com:

    New-WebAppPool -Name "nopCommerce"
    
    Set-ItemProperty "IIS:\AppPools\nopCommerce" `
        -Name "managedRuntimeVersion" `
        -Value ""
    
    Set-ItemProperty "IIS:\AppPools\nopCommerce" `
        -Name "managedPipelineMode" `
        -Value "Integrated"

    Após isso, é necessário conceder ao pool de aplicação a permissão de modificação na pasta da aplicação:

    icacls C:\inetpub\nopCommerce /grant "IIS AppPool\nopCommerce:(OI)(CI)(M)"

    Para criar o site no IIS:

    New-Website `
        -Name "nopCommerce" `
        -PhysicalPath "C:\inetpub\nopCommerce" `
        -ApplicationPool "nopCommerce" `
        -Port 80

    No entanto, se você acessar agora vai receber um erro HTTP 500. Isso é porque nas configurações do site ele tenta sobrescrever a configuração de módulo do servidor. Isso pode ser verificado no arquivo de configuração C:\inetpub\nopCommerce\web.config, que funciona como algo similar ao .htaccess do Apache.

    Para desbloquear e permitir que a aplicação faça isso:

    & "C:\Windows\System32\inetsrv\appcmd.exe" unlock config /section:system.webServer/modules

    Ao acessar a página web, podemos ver a página de configuração, onde são solicitadas as informações para conexão ao banco de dados.

    Uma opção interessante na página a caixa “Use integrated Windows Authentication”. Isso funciona de forma similar à conexão do tipo peer do PostgreSQL, no sentido de que o usuário é autenticado pela sua identificação no sistema operacional, não exigindo uma senha para a conexão, o que é considerado um método mais simples e mais seguro.

    Seguindo com a instalação do Microsoft SQL Server Express, selecione a opção Basic.

    Ao fim, o instalador retorna algumas informações sobre o sevidor instalado, como o nome da instância, SQLEXPRESS, e o banco de dados criado, master.

    O Microsoft SQL Server tem instâncias que são processos diferentes que funcionam como servidores diferentes. Para se conectar, o servidor é especificado como:

    <endereço do servidor>\<nome da instância>

    Para configurar a autenticação integrada ao Windows para a conexão do nopCommerce, precisamos criar o login no servidor a partir da identidade existente no Windows para então criar o usuário no banco de dados – o Microsoft SQL Server tem essa separação entre o login no servidor e o usuário no banco de dados, diferente do PostgreSQL e MySQL em que os usuários são criados apenas no escopo do servidor.

    Para se conectar servidor de banco de dados:

    sqlcmd -S localhost\SQLEXPRESS -No -E

    É possivel que a variável PATH não tenha atualizado na sua sessão após a instalação. Nesse caso você pode encontrar o caminho completo do sqlcmd com:

    Get-ChildItem "C:\Program Files\Microsoft SQL Server\" -Filter "sqlcmd.exe" -Recurse

    Os comandos em SQL para configuração ficam:

    CREATE DATABASE nopCommerce
    CREATE LOGIN [IIS APPPOOL\nopCommerce] FROM WINDOWS
    GO
    
    USE nopCommerce
    CREATE USER [IIS APPPOOL\nopCommerce] FOR LOGIN [IIS APPPOOL\nopCommerce]
    GO
    
    ALTER ROLE db_owner ADD MEMBER [IIS APPPOOL\nopCommerce]
    GO
    

    Esse comando GO se faz necessário porque, diferente do MySQL ou PostgreSQL, que enviam os comandos ao servidor a cada ponto e vírgula, o Microsoft SQL envia os comandos em lotes. Os lotes são enviados com GO. E esse comando precisa ser enviado entre alguns outros comandos por causa de como o servidor processa e compila os lotes.

    Por exemplo: se você envia “USE nopCommerce” no mesmo lote em que esse banco de dados é criado, ele dá um erro nesse comando justamente porque o banco de dados ainda não existe ainda.

    Finalizada a configuração do banco de dados, a página de setup do nopCommerce pode ser acessada para a configuração da conexão.

    No entanto, o nopCommerce utiliza o nome de domínio ou endereço de IP através do qual o servidor está sendo acessado e utiliza para definir algumas variáveis como site da loja e alguns links. Como eu não encontrei informações sobre como fazer a alteração de forma apropriada, recomendo que o setup na página web seja realizado já através do domínio que será utilizado.

    Para expor o serviço na internet, eu utilizei o serviço Cloudflare Tunnel em vez do meu proxy reverso, uma ótima solução pro vibe coder que não sabe como publicar na internet sua aplicação rodando em http://localhost:3000, um serviço interessante principalmente pela proteção contra DDoS. Para que o serviço possa ser utilizado, o seu domínio precisa ser hospedado com a Cloudflare e ambos os serviços são gratuitos.

    A partir daqui, a configuração é mais gráfica: no dashboard da Cloudflare, busque no menu lateral esquerdo a opção Networking > Tunnels.

    Adicione um túnel no botão “Create Tunnel”:

    Para configurar o túnel, selecione um sistema operacional. A Cloudflare vai oferecer intruções de como instalar o serviço com o seu token.

    Criado o túnel, abra as configurações do túnel e adicione uma rota:

    Ao escolher o tipo de rota, selecione “Published Application”.

    E então defina a rota, como a aplicação deve ser acessada através do serviço de túnel sendo executado na sua máquina:

    A Cloudflare irá automaticamente criar o subdomínio e atribuir os próprios IPs que irão encaminhar as requisições ao seu servidor através do túnel.

    Aguarde uns minutos para que a mudança se propague através dos servidores de DNS e então acesse o nopCommerce através do seu nome de domínio para retomar a configuração.

    Note que, ao marcar a opção de usar a autenticação integrada ao Windows, os campos de usuário e senha são omitidos.

    Após a finalização da configuração, você será levado a página inicial da plataforma, que mostra um exemplo de loja.

    Para acessar o painel de administração da plataforma, utilize o endpoint /Admin no endereço enquanto estiver logado na sua conta.

    Para fazer a plataforma ficar “ciente” de que está sendo acessada por HTTPS em vez de HTTP, edite o arquivo
    C:\inetpub\nopCommerce\App_Data\appsettings.json
    para que contenha os seguintes parâmetros:

    "HostingConfig": {
      "UseProxy": true,
      "ForwardedProtoHeaderName": "X-Forwarded-Proto"
    }

    Por fim, no painel de administração, vá no item “2. Adicione informações da sua loja” e clique em “Ativar SSL”.

    E agora basta configurar e customizar a plataforma de acordo com a necessidade. No entanto, vale notar que ele tem uma limitação problemática para uso no Brasil: ele não parece ter integração oficial com nenhum provedor de pagamentos brasileiro, tendo como principais opções PayPal e Braintree.

    Post scriptum
  • Integração SFTP x SharePoint

    Surgiu uma demanda por parte de um cliente: eles receberiam arquivos de parceiros através de SFTP e havia a necessidade de que esses arquivos subissem para o SharePoint. A solução foi utilizar um servidor Windows com OpenSSH e OneDrive para fazer essa integração.

    Uma conta Microsoft dedicada foi criada para conectar o servidor ao OneDrive, digamos sftp@exemplo.com. O site e a biblioteca no SharePoint foram criados e foi adicionado um atalho para a biblioteca ao OneDrive dessa conta.

    O OneDrive foi configurado através de uma outra conta local criada sem privilégios de administrador, com nome de sftp. O atalho para a biblioteca “sftp-1drv” aparece como algo do tipo C:\Users\sftp\OneDrive \sftp-1drv.

    Então, o serviço de SSH é instalado através do PowerShell com:

    PS C:\Users\Administrator> Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online

    Alguns requisitos:

    • Cada usuário do SFTP deve ter acesso à sua própria pasta e o acesso a outras deve ser restringido.
    • Nenhum dos usuários deve ter acesso ao prompt de comando através de SSH.
    • Por segurança, o acesso por senha deve ser impedido, permitindo apenas o acesso através de par de chaves pública-privada.

    Os dois primeiros podem ser alcançados adicionando a seguinte configuração ao arquivo de configuração do OpenSSH localizado em C:\ProgramData\ssh\sshd_config:

    Match Group "SFTP Users"
           ChrootDirectory "C:\Users\sftp\OneDrive\sftp-1drv\%u"
           ForceCommand internal-sftp
           AllowTcpForwarding no

    Onde %u é o nome de usuário e “SFTP Users” é o grupo ao qual os usuários pertencem.

    O grupo pode ser criado com:

    C:\Windows\System32> net localgroup "SFTP Users" /add

    O acesso através de senha pode ser desabilitado configurando o seguinte parêmetro:

    PasswordAuthentication no

    Após configurado, marque o serviço para iniciar com o sistema e inicie-o:

    PS C:\Windows\Administrator> Set-Service -Name 'sshd' -StartupType 'automatic'
    PS C:\Windows\Administrator> Start-Service sshd

    A permissão da pasta precisa ser configurada no NTFS para permitir o acesso dos membros do grupo “SFTP Users”:

    C:\Windows\Administrator> icacls "C:\Users\sftp\OneDrive\sftp-1drv" /grant "SFTP Users":(OI)(CI)(F)

    Agora, usuários precisam ser criados. O que precisa ser feito:

    • Criar o usuário;
    • Incluí-lo ao grupo SFTP Users;
    • Criar a pasta do usuário no SharePoint;
    • Gerar as chaves RSA ou Ed25519 para acesso ao SFTP;
    • Permitir o acesso ao usuário através do par de chaves criado;
    • Copiar a chave privada para o SharePoint para que a chave seja passada ao usuário.

    Para copiar a chave privada para o SharePoint, foi criada uma pasta separada para isso em C:\Users\sftp\OneDrive\sftp-1drv\_chaves_sftp.

    O procedimento então foi parcialmente automatizado através de um batch script simples que recebe o nome de usuário como argumento:

    if not exist "%userprofile%\.ssh" (
    mkdir "%userprofile%\.ssh"
    )
    net user "%1" /add
    net user "%1" $enha@12321
    net localgroup "SFTP Users" "%1" /add
    :: a linha abaixo é necessária para que a pasta do perfil do usuário seja criada pelo sistema
    runas /user:"%1" "cmd /c exit"
    mkdir "C:\Users\sftp\OneDrive\sftp-1drv\%1"
    ssh-keygen -t ed25519 -f "%userprofile%\.ssh\%1" -N ""
    type "%userprofile%\.ssh\%1" > "C:\Users\sftp\OneDrive\sftp-1drv\_chaves_sftp\%1.pem"
    mkdir "C:\Users\%1\.ssh"
    type "%userprofile%\.ssh\%1.pub" > "C:\Users\%1\.ssh\authorized_keys"

    O script cria o usuário com a senha $enha@12321 e pede essa senha para executar o cmd como o novo usuário criado. Isso é feito porque o Windows precisa de um primeiro login interativo para criar a pasta do perfil do usuário e é necessário para que seja criado o arquivo authorized_keys no perfil do usuário.

    Na execução do script para criação de novos usuário, a pasta é criada e a chave fica acessível através do OneDrive, bastando baixar a chave e fazer o acesso via SFTP.

  • Pydio Cells: uma plataforma de colaboração

    Esse foi um pouco diferente, mas para dar um contexto de como eu cheguei aqui: além da minha instância Nextcloud, eu mantenho outra para o meu pai, com um HD dele. Meu pai também é da área de Tecnologia da Informação mas com uma vivência muito mais forte em ambiente Windows.

    Então eu fiquei me perguntando se não havia alguma alternativa ao Nextcloud que pudesse hospedar no Windows, preferencialmente usando o IIS.

    Infelizmente, não consegui nada para IIS, mas consegui algo para Windows: Pydio Cells é uma plataforma de código aberto para hospedagem e compartilhamento de arquivos, com foco em colaboração.

    Pydio Cells tem uma configuração relativamente simples, não sendo necessário configurar servidor web ou interpretador PHP, só um banco de dados MySQL ou MariaDB. Por baixo dos panos, o a plataforma é escrita em Go e utiliza o servidor web Caddy. É também compatível com Linux mas dessa vez vamos abordar a configuração em Windows.

    O Pydio Cells pode ser encontrado para download aqui e o MariaDB aqui.

    Comece instalando o MariaDB. Basta seguir o wizard de instalação com as opções recomendadas. Ele vai instalar junto um programa chamado HeidiSQL, um cliente SQL. Abra-o e conecte no seu banco de dados com o root e a senha definida durante a instalação.

    Crie um usuário para o Pydio Cells, um banco de dados e dê todos os privilégios sobre o banco de dados a esse usuário:

    CREATE USER 'pydio_admin'@'localhost' IDENTIFIED BY 'senha123';
    CREATE DATABASE pydio_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    GRANT ALL PRIVILEGES ON pydio_db.* TO 'pydio_admin'@'localhost';
    FLUSH PRIVILEGES;

    Feito isso, crie uma pasta para a execução e os arquivos de configuração do Pydio Cells:

    C:\Users\daniel> mkdir C:\pydio_cells

    Extraia o executável do Pydio Cells da pasta zipada e copie-o para esse diretório.

    Crie a seguinte variável para o Windows e reinicie o sistema operacional para que a alteração tenha efeito:

    C:\Windows\System32> setx CELLS_WORKING_DIR "C:\pydio_cells" /M

    Após reiniciar, instale o Pydio Cells:

    C:\Users\daniel> C:\pydio_cells\cells.exe configure

    O instalador irá perguntar pelo modo de instalação. Você pode selecionar pelo navegador web e seguir por lá. Conecte no seu banco de dados com o usuário e a senha que você criou no HeidiSQL e crie o seu usuário para login no Pydio Cells. Você pode acompanhar o progresso pelo terminal. Ao fim da instalação, a página de login deverá aparecer.

    Você vai ver que ele abre por padrão na porta 8080 com HTTPS, lembre-se de abrir essa porta no firewall do Windows para acesso através de outros clientes:

    C:\Windows\System32> netsh advfirewall firewall add rule name="PydioCells" localport=8080 protocol=tcp dir=in action=allow

    Você já deve conseguir acessar o servidor através de outros dispositivos na sua rede.

    Para integrar à minha infraestrutura existente, esse servidor também foi colocado atrás do proxy reverso, e a configuração de diferentes proxys, incluindo o nginx, são abordadas na própria documentação do Pydio Cells.

    Use o seguinte comando para determinar o endereço onde ele escuta por conexões e o endereço externo utilizado para o proxy reverso:

    C:\pydio_cells\cells.exe configure sites

    Nesse caso, foi configurado como:

    • BIND: https://0.0.0.0:8080
    • TLS: auto-assinado
    • URL externa: https://pydio.exemplo.com

    Note que uma porta diferente pode ser utilizada para a URL externa. Caso pretenda configurar a integração com o Collabora, como foi feito para o Nextcloud, mantenha o acesso na URL externa pela porta padrão, visto que o Collabora retorna erro 403 quando usado com portas alternativas.

    O domínio do Collabora também deve ser o mesmo que o do Pydio Cells, como collabora.exemplo.com e pydio.exemplo.com, resultando também em erro 403 quando configurado com domínios diferentes.

    Agora, o Pydio Cells não se inicia automaticamente junto com o Windows, precisando ser iniciado manualmente com:

    C:\Users\daniel> C:\pydio_cells\cells.exe start

    Você pode no entanto configurar o Pydio Cells para ser executado como um serviço do Windows, iniciando junto com o sistema operacional.

    O Windows tem 3 usuários para serviços: Local System, Network Service e Local Service, do maior ao menor nível de acesso ao sistema. Para utilizar Local Service, precisamos dar permissão de acesso à pasta do Pydio Cells e suas subpastas.

    C:\Windows\System32> icacls C:\pydio_cells /grant LocalService:(OI)(CI)(F) /T

    Então, basta criar o serviço:

    C:\Windows\System32> sc create PydioCellsService binPath="C:\pydio_cells\cells.exe start" start=delayed-auto obj="NT AUTHORITY\LocalService"

    Uma desvantagem (para mim) que eu encontrei no Pydio Cells em relação ao Nextcloud é que, ao fazer upload de arquivos, eles são armazenados no Windows sob um nome diferente, utilizando UUIDs, e sem estrutura de pastas separando os arquivos por usuários ou replicando a estrutura de pastas existente dentro da plataforma, armazenando informações referentes à organização de pastas e arquivos apenas no banco de dados.

    A integração com um servidor Collabora existente é feita através do Cells Console. Ative a chave no topo da página para mostrar as configurações avançadas e, no fim da lista aparece a área “All Plugins”, onde a conexão com o Collabora é configurada e o plugin do Collabora deve ser ativado.

  • Criação de um domínio com Active Directory no Windows Server

    Active Directory Domain Services é um serviço proprietário desenvolvido pela Microsoft usado para gerenciamento centralizado de um domínio de rede em ambientes corporativos, controlando a autorização e autenticação de usuários e computadores, atribuindo e impondo políticas de segurança e instalando ou atualizando softwares.

    Felizmente eu tinha um snapshot da máquina virtual anterior à criação do meu domínio e pude refazer os passos pra colocar umas imagens, porque eu sou uma negação em PowerShell.

    O sistema usado foi o Windows Server 2025 Standard. Antes de instalar o AD DS e criar o domínio, é necessário configurar o sistema com um endereço de IP fixo. Para isso, vá em

    Control Panel > Network and Internet > Network and Sharing Center > Change adapter settings

    Clique com o botão direito no adaptador de rede e clique em Propriedades. Selecione “Internet Protocol Version 4” e clique em Propriedades.

    Configure um endereço de IP estático fora da faixa do DHCP e use o mesmo IP ou 127.0.0.1 para servidor de DNS – que será configurado mais à frente.

    No Server Manager, vá em “Add roles and features”. No Wizard, selecione “Role-based or feature-based installation” e prossiga.

    Na próxima etapa, selecione o seu servidor e prossiga. Em seguida, você vai ver uma lista do que pode ser instalado. Selecione “Active Directory Domain Services” e “DNS Server”.

    O servidor precisará atuar também como servidor de DNS para que clientes possam encontrar e participar do domínio. Esse papel poderia ser delegado a outro servidor de DNS que você tenha configurado no mesmo domínio.

    Na etapa de confirmação, mantenha desmarcada a opção de reiniciar o servidor após instalação, já que só faremos isso após promover o servidor a controlador do domínio.

    Após a instalação, um sinal de atenção vai aparecer nas notificações do Server Manager, onde vai aparecer a opção de promover o servidor a controlador de domínio.

    Isso vai abrir um novo Wizard. Na primeira etapa, selecione “Add a new forest” e determine o seu domínio. Em um caso ideal, você tem nome de domínio público, como exemplo.com, e pode configurar com um subdomínio do tipo ad.exemplo.com. Alternativamente, você pode usar um como privado. Apenas tenha cuidado com possíveis conflitos com domínios externos, escolha algo como exemplo.interno.

    Sobre o nível funcional da floresta e domínio no próximo passo: isso é sobre compatibilidade de funcionalidades e protocolos. Caso não tenha outros controladores de domínio com versões antigas do Windows Server atuando, prossiga com o padrão (mais recente).

    Determine sua senha para o modo de restauração (DSRM). Isso é como o modo de segurança nas versões do Windows Home ou Pro, mas específica para controladores de domínio. Isso porque a autenticação através do AD é desabilitada no modo de restauração, então essa é a senha que você usa pra logar no Administrator.

    Pule a etapa de delegação de DNS, já que estamos configurando nosso servidor de DNS junto com o domínio.

    O nome de domínio NetBIOS é determinado automaticamente a partir do seu nome de domínio totalmente qualificado (FQDN).

    Após isso, siga com as opções padrões até o fim da instalação, onde seu servidor será reiniciado e promovido a controlador de domínio.

    Para que outros computadores possam encontrar o seu domínio e participar dele, você deve alterar as configurações de DHCP do seu roteador para usar seu Windows Server como servidor de DNS.

    Você pode gerenciar usuários e grupos do domínio com dsa.msc, políticas de grupo com gpmc.msc, e o servidor de DNS com dnsmgmt.msc.

    Sugestão de segurança: Princípio do menor privilégio.
    Por padrão, só administradores podem incluir ou remover computadores do domínio. Pra resolver isso você pode criar um usuário ou grupo e delegar as permissões do contêiner Computers em “Active Directory Users and Computers” (dsa.msc).