Publicando e hospedando no IIS
ResumoPublicamos a Web API e a hospedamos no IIS usando o Hosting Bundle e o modelo in-process. Cobrimos
dotnet publish, o módulo ASP.NET Core, o ambiente e o teste da aplicação implantada.
1. Objetivos de Aprendizagem#
- Gerar artefatos de publicação com
dotnet publishem Release. - Instalar o Hosting Bundle e configurar o site no IIS.
- Definir o ambiente e validar o deploy.
2. Pré-requisitos#
- Projeto configurado (Módulo 16).
3. Conceito#
O IIS atua como reverse proxy/host, e o ASP.NET Core Module (ANCM) faz a ponte com o processo .NET. No modelo in-process (padrão), a aplicação roda dentro do worker do IIS (w3wp), com melhor desempenho. O porquê de publicar em Release: otimizações e ausência de artefatos de depuração.
4. Mão na Massa#
4.1. Setup#
Instale no servidor o .NET Hosting Bundle (inclui runtime + ANCM). Habilite o IIS com o console de recursos do Windows.
4.2. Implementação Passo a Passo#
- Publicar:
dotnet publish Catalog.Api -c Release -o ./publish
- No IIS: crie um Application Pool com ".NET CLR Version = No Managed Code" (o runtime é o .NET, não o .NET Framework).
- Crie um Site/aplicação apontando para a pasta
publish. - O
web.configgerado configura o ANCM:
<aspNetCore processPath="dotnet" arguments=".\Catalog.Api.dll"
hostingModel="inprocess" stdoutLogEnabled="false" />
- Defina o ambiente por variável (não use
Developmentem produção):
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>
4.3. Executando#
Acesse o site pelo host configurado e teste um endpoint:
curl -i https://catalog.suaempresa.com/api/produtos
5. Exemplo Completo#
Checklist de deploy: publicar em Release → copiar publish para o servidor → app pool "No Managed Code" → ambiente Production → connection string/segredos via variáveis de ambiente → testar HTTPS.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
Publicar em Release | Publicar em Debug em produção |
Definir ASPNETCORE_ENVIRONMENT=Production | Deixar Development (expõe página de erro detalhada) |
| Fornecer segredos por variáveis/secret store | Segredos no appsettings publicado |
Atençãohabilitar
stdoutLogEnabled="true"permanentemente enche o disco. Use-o apenas temporariamente para diagnosticar falhas de inicialização.
7. Segurança e Produção#
- Publique em
Releasee nunca com ambienteDevelopment— evita vazamento de stack traces. - Configure HTTPS com certificado válido; force redirecionamento e HSTS.
- Rode o app pool com uma identidade de menor privilégio; proteja o acesso aos arquivos de log e à connection string.
8. Exercícios#
- Fácil: publique e liste o conteúdo da pasta
publish. - Médio: configure a connection string por variável de ambiente no IIS.
- Desafio: habilite HSTS e redirecionamento HTTPS e valide com um cliente.
9. Resumo#
Publicamos em Release e hospedamos no IIS via Hosting Bundle e ANCM (in-process), definindo Production e fornecendo segredos por variáveis. HTTPS e menor privilégio completam o deploy seguro.
10. Próximos Passos#
Módulo 44 (Bônus): melhorias de performance na resposta.
11. Referências#
- Microsoft Learn — Hospedar ASP.NET Core no IIS
- Microsoft Learn — dotnet publish
- Microsoft Learn — ASP.NET Core Module (ANCM)