Campanha Founders60 vagas (30 vitalícias + 30 por 12 meses) a R$ 59,90/mês, com pagamento anual — lançamento oficial em 01/03/2026. Garanta prioridade Lista antecipada aberta para os primeiros Founders — cadastre seu e-mail, garanta sua vaga sem cobrança automática e conte com 30 dias de reembolso após a ativação do ambiente. Quero ser Founder

Série Boas Práticas .NET em Produção • FoundryShip Cloud

Guia de Deploy .NET: do commit ao container em produção

Este guia resume o caminho recomendado para levar uma aplicação .NET do seu repositório até um ambiente de produção moderno — com build automatizado, containers e observabilidade. A ideia é que você consiga aplicar estes passos em qualquer lugar e, em especial, na FoundryShip Cloud.

Não é um manual exaustivo. É um roteiro prático: o mínimo que você precisa cuidar para ter deploys previsíveis, repetíveis e fáceis de automatizar.

1. Comece pelo básico: ambientes e configuração

Antes de pensar em pipeline, containers ou orquestradores, organize sua aplicação para trabalhar bem com ambientes diferentes (Dev, Homologação, Produção) e configurações externas. O modelo de configuração do ASP.NET Core já foi pensado para isso, com suporte a appsettings.json, arquivos por ambiente e variáveis de ambiente.

Boas práticas mínimas:

  • Use ASPNETCORE_ENVIRONMENT ou DOTNET_ENVIRONMENT para separar Development, Staging e Production.
  • Mantenha segredos (connection strings, API keys) em variáveis de ambiente ou gerenciadores de secrets — nunca em repositório.
  • Tenha pelo menos appsettings.json + appsettings.Production.json e deixe o ambiente de produção o mais explícito possível.
  • Padronize logs estruturados (JSON) e níveis de log por ambiente.

Um Program.cs típico já cuida de carregar arquivos de configuração e variáveis de ambiente. Garanta que você não esteja sobrescrevendo isso manualmente, e sim aproveitando o pipeline padrão do host genérico do .NET.

// Program.cs (.NET 8+ minimal hosting)
var builder = WebApplication.CreateBuilder(args);

builder.Configuration
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json",
                 optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();

// serviços...

var app = builder.Build();
// middlewares...
app.Run();

Com isso pronto, você separa claramente o que é código e o que é configuração, o que torna qualquer tipo de deploy (IIS, container, Kubernets, FoundryShip) muito mais simples.

Entre para a lista de Founders

Quer ser avisado quando liberarmos o link de compra no dia 01/03/2026 e ter prioridade para uma das 60 vagas Founders a R$ 59,90/mês (pagamento anual)? Deixe seu e-mail abaixo. Sem spam, só os avisos importantes sobre o lançamento.

Você pode cancelar o recebimento a qualquer momento.

2. Pipeline de build: compilar, testar e publicar

O próximo passo é ter um pipeline reproduzível de build, testes e publicação. A CLI do .NET oferece comandos padronizados como dotnet restore, dotnet build, dotnet test e dotnet publish, que podem ser executados tanto na sua máquina quanto em um servidor de CI/CD.

# Build de produção
dotnet restore
dotnet build -c Release
dotnet test -c Release

# Publicar em pasta para deploy "clássico"
dotnet publish src/MinhaApi.csproj -c Release -o ./artifacts/publish

Dica prática para FoundryShip (e qualquer cloud baseada em containers):

  • Sempre publique em Release.
  • Garanta que os testes automatizados rodem no CI antes de gerar a imagem Docker.
  • Centralize artefatos em uma pasta (./artifacts) para facilitar o passo de empacotamento.

Com esse pipeline padronizado, mudar o destino do deploy (Azure, FoundryShip, on-premise) passa a ser só uma mudança de “alvo”, não de processo.

3. Empacotando sua aplicação .NET em containers

A forma mais comum hoje de hospedar aplicações .NET em produção é via containers. A própria Microsoft mantém imagens oficiais de runtime e SDK para .NET, que você pode usar como base para seu Dockerfile.

# Dockerfile multi-stage para ASP.NET Core (.NET 8)
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish src/MinhaApi.csproj -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "MinhaApi.dll"]

Na FoundryShip Cloud, essa imagem será enviada para um registro privado e depois executada em pods dentro de clusters Kubernetes. O mesmo Dockerfile também funciona em outros provedores — a vantagem é justamente essa portabilidade.

Checklist rápido para containers .NET:

  • Use imagens runtime na fase final (mais leves).
  • Defina ASPNETCORE_ENVIRONMENT e outras variáveis via ambiente, não no Dockerfile.
  • Exponha apenas a porta necessária (ex.: 8080) e deixe TLS/HTTPS para o ingress / proxy.

4. CI/CD com GitHub Actions: do push à imagem publicada

O GitHub Actions é uma forma simples de automatizar build, testes e publicação de imagens. A própria documentação do GitHub traz exemplos de workflows para projetos .NET que você pode adaptar.

Abaixo um exemplo simplificado para um repositório com uma API .NET que gera uma imagem Docker e a publica em um registro (a FoundryShip pode consumir essa imagem no passo de deploy):

name: CI - Build & Docker Publish

on:
  push:
    branches: [ main ]

jobs:
  build-and-publish:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v4

    - name: Setup .NET
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'

    - name: Restore, build e testes
      run: |
        dotnet restore
        dotnet build -c Release --no-restore
        dotnet test -c Release --no-build

    - name: Login no registry
      run: echo "${{ secrets.REGISTRY_TOKEN }}" | \
           docker login registry.foundryship.io -u ${{ secrets.REGISTRY_USER }} --password-stdin

    - name: Build imagem
      run: docker build -t registry.foundryship.io/minha-org/minha-api:latest .

    - name: Push imagem
      run: docker push registry.foundryship.io/minha-org/minha-api:latest

A partir daqui, você pode ter um segundo workflow de “deploy” que é disparado manualmente ou automaticamente, aplicando manifests do Kubernetes ou chamando a API da FoundryShip para criar/atualizar o serviço da sua aplicação.

5. Saúde, observabilidade e rollback seguro

Deploy sem observabilidade é apenas esperança. Em produção, você precisa de health checks, logs estruturados e métricas básicas para saber se o deploy foi bem-sucedido.

  • Exponha um endpoint de health check (ex.: /health) para que o orquestrador saiba quando seu container está pronto.
  • Use logs estruturados em JSON; isso facilita correlacionar eventos no tempo e por usuário.
  • Mantenha versões de imagem imutáveis (tags com número de versão ou hash) para conseguir rollback rápido se algo quebrar.
  • Separe o que é falha de infraestrutura (pod, nó, rede) do que é erro de aplicação (exceções, timeouts). Isso reduz muito a fricção no suporte.

Na FoundryShip, esses mesmos conceitos se aplicam: os clusters Kubernetes monitoram a saúde dos containers, e o time consegue ajudar a interpretar métricas e logs se algo fugir do esperado.

Entre para a lista de Founders

Quer ser avisado quando liberarmos o link de compra no dia 01/03/2026 e ter prioridade para uma das 60 vagas Founders a R$ 59,90/mês (pagamento anual)? Deixe seu e-mail abaixo. Sem spam, só os avisos importantes sobre o lançamento.

Você pode cancelar o recebimento a qualquer momento.