Tag: iis

  • 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. 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