Start Debugging

Разверните .NET-приложение с Podman + systemd: стабильные перезапуски, настоящие логи, без магии

Развёртывание сервисов .NET 9 и .NET 10 на Linux-VM с помощью Podman и systemd. Стабильные перезапуски, настоящие логи через journald и контейнеризированное приложение, управляемое как полноценный сервис -- без Kubernetes.

Сегодня всплыло в r/dotnet: люди по-прежнему ищут историю про “скучный деплой” для .NET-сервисов, который не Kubernetes и не хрупкий скрипт nohup. Если вы на Linux-VM, Podman вместе с systemd — это надёжная середина: контейнеризированное приложение, управляемое как настоящий сервис.

Исходное обсуждение: https://www.reddit.com/r/dotnet/comments/1q8gq1u/how_to_deploy_net_applications_with_systemd_and/

Почему это хорошо подходит для сервисов .NET 9 и .NET 10

Соберите и запустите контейнер

Вот минимальный Containerfile для приложения на .NET 9 (для .NET 10 работает так же, нужно только сменить базовый тег):

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"]

Затем:

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

Отдайте всё systemd (полезная часть)

Podman может сгенерировать unit-файл, понятный systemd. Замечание: podman generate systemd объявлен устаревшим в Podman 4.4+ в пользу Quadlet, но генерируемый вывод по-прежнему работает и наглядно показывает идею:

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

Получается что-то вроде container-myapp.service. Переложите на место:

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

Теперь у вас аккуратные команды эксплуатации:

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

Две детали, которые спасают потом

Сделайте конфигурацию явной

Используйте переменные окружения и подмонтированный каталог конфигурации вместо запекания секретов в образ. С systemd вы можете задать переопределения в drop-in файле и спокойно перезапускаться.

Подберите политику перезапуска под реальность

Если приложение падает быстро из-за отсутствующей конфигурации, бесконечные перезапуски — это шум. Возьмите политику перезапуска, которая не молотит машину. systemd позволяет управлять задержками и пределами всплесков.

Если хочется одного теста “правильно ли я всё делаю?”: перезагрузите VM и посмотрите, поднимется ли ваш .NET-сервис без вашего входа по SSH. Это и есть планка.

Дополнительно: https://docs.podman.io/

Comments

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

< Назад