Материалы / 10 минут
Развернуть воспроизводимую версию приложения через Nginx и systemd с проверяемым откатом.
Разворачивайте артефакт, а не рабочую директорию
Frontend сначала собирается в статический каталог, backend — в бинарник. Production-процесс не должен компилировать зависимости после рестарта.
Зафиксируйте команды сборки, владельца файлов и путь конфигурации. Секреты передаются окружением или отдельным защищённым файлом и не попадают в Git.
Nginx завершает внешний HTTP-контур
Nginx принимает HTTPS, задаёт основной домен и проксирует frontend и API на loopback-порты. Приложения не обязаны слушать публичный интерфейс.
Перед reload всегда выполняйте проверку конфигурации. Хешированные ассеты можно кэшировать надолго, HTML — перепроверять при каждом открытии.
systemd отвечает за процесс
Unit фиксирует пользователя, рабочую директорию, команду запуска, порядок зависимостей и политику рестарта. Логи читаются через journalctl.
После deployment проверяйте не только active, но и публичные URL, API health, заголовки кэша и прямое открытие вложенного маршрута.
[Service]
User=app
WorkingDirectory=/srv/product
EnvironmentFile=/etc/product.env
ExecStart=/srv/product/bin/api
Restart=always
RestartSec=3
NoNewPrivileges=true