Start Debugging

Implante uma app .NET com Podman + systemd: reinícios estáveis, logs reais, sem mágica

Implante serviços .NET 9 e .NET 10 em uma VM Linux usando Podman e systemd. Tenha reinícios estáveis, logs reais via journald e uma app em contêiner gerenciada como um serviço de verdade -- sem Kubernetes.

Apareceu hoje no r/dotnet: as pessoas continuam procurando uma história de “implantação sem graça” para serviços .NET que não seja Kubernetes nem um script nohup frágil. Se você está em uma VM Linux, Podman mais systemd é um meio-termo sólido: uma app em contêiner gerenciada como um serviço de verdade.

Discussão original: https://www.reddit.com/r/dotnet/comments/1q8gq1u/how_to_deploy_net_applications_with_systemd_and/

Por que isso funciona bem para serviços .NET 9 e .NET 10

Compile e execute o contêiner

Aqui está um Containerfile mínimo para uma app .NET 9 (funciona igual para .NET 10, basta trocar a tag base):

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /out

FROM base
WORKDIR /app
COPY --from=build /out .
ENV ASPNETCORE_URLS=http://+:8080
ENTRYPOINT ["dotnet", "MyApp.dll"]

Depois:

podman build -t myapp:1 .
podman run -d --name myapp -p 8080:8080 myapp:1

Deixe o systemd assumir o controle (a parte útil)

O Podman pode gerar um arquivo de unidade que o systemd entende. Observação: podman generate systemd está obsoleto no Podman 4.4+ em favor do Quadlet, mas a saída gerada ainda funciona e mostra o conceito com clareza:

podman generate systemd --new --name myapp --files

Isso produz algo como container-myapp.service. Mova-o para o lugar:

sudo mv container-myapp.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now container-myapp.service

Agora você tem comandos operacionais limpos:

sudo systemctl status container-myapp.service
sudo journalctl -u container-myapp.service -f
sudo systemctl restart container-myapp.service

Dois detalhes que salvam você depois

Deixe a configuração explícita

Use variáveis de ambiente e um diretório de configuração montado em vez de embutir segredos na imagem. Com o systemd, você pode definir overrides em um arquivo drop-in e reiniciar com segurança.

Escolha uma política de restart que combine com a realidade

Se a sua app falha rápido por causa de configuração faltando, reinícios infinitos são só ruído. Prefira uma política de restart que não martele a máquina. O systemd permite controlar atrasos e limites de rajada.

Se você quer um único teste do tipo “estou fazendo certo?”: reinicie a VM e veja se o seu serviço .NET volta sem você precisar entrar via SSH. Essa é a régua.

Leitura adicional: https://docs.podman.io/

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Voltar