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.

P.S. – Uma observação é que, caso a instalação seja feita com PostgreSQL, a extensão citext precisa ser criada no banco de dados do nopCommerce antes da configuração do nopCommerce. Caso isso não seja feito, a configuração falha com uma mensagem nada clara.