Какие задачи решают Docker и Traefik
Docker упаковывает приложение и зависимости, а Traefik принимает HTTP-запросы и направляет их нужному сервису. Такая схема удобна для размещения нескольких проектов на VPS. Она не гарантирует одинаковую производительность на любых серверах или выпуск без простоя.
Сначала определите домены, открытые порты, сеть контейнеров и объекты, которые должны сохраняться между выпусками. Для базы данных и файлов пользователей нужен отдельный план резервного копирования.
Standalone-сборка Next.js
В Next.js настройка output: 'standalone' создаёт минимальный серверный набор на основе трассировки зависимостей. В итоговый образ также нужно перенести public и .next/static. Для некоторых динамически читаемых файлов потребуется явное включение в трассировку.
Практическая последовательность:
- Использовать поддерживаемую совместимую версию Node.js; в этом проекте — Node.js 22.
- Установить зависимости из lockfile через npm ci в стадии сборки.
- Выполнить проверки и next build.
- Перенести standalone-результат, статику и public в отдельную стадию запуска.
- Запустить server.js от непривилегированного пользователя.
- Проверить приложение в контейнере с рабочей конфигурацией.
Multi-stage сборка отделяет инструменты сборки от среды запуска. Размер зависит от зависимостей и ресурсов; универсального обещания размера образа нет.
HTTPS и маршрутизация Traefik
Для автоматической выдачи сертификата нужен настроенный ACME certificate resolver, email, сохраняемое хранилище сертификатов и выбранная проверка домена. Для HTTP challenge домен должен разрешаться на сервер, а порт 80 быть доступен; альтернативные проверки имеют свои требования.
У маршрута приложения задаются правило Host, HTTPS entrypoint, TLS resolver и правильный внутренний порт сервиса. HTTP перенаправляется на HTTPS отдельно. Одного поля tls.certresolver без остальной конфигурации недостаточно.
Проверьте основной и www-домены, итоговый сертификат, цепочку редиректов и ответы неизвестных URL. Панель администратора proxy не следует оставлять открытой в интернете. Доступ к Docker socket даёт широкие возможности управления сервером и требует отдельного ограничения.
Секреты и данные между выпусками
Серверные ключи передаются через закрытую конфигурацию запуска. Переменные NEXT_PUBLIC попадают в клиентскую сборку; они не подходят для webhook-секретов и API-ключей. Во время синхронизации кода важно сохранять конфигурацию рабочей среды и исключать её из публикуемых файлов.
Резервная копия полезна только после проверки восстановления. Копия образа приложения не заменяет копию базы, загруженных файлов или ключей, необходимых для чтения сохранённых данных.
Как выпускать и откатывать изменение
Сохраните идентификатор исходной версии и рабочий образ до обновления. Соберите новый образ, запустите его, дождитесь проверки здоровья и проверьте основные страницы, форму, статические ресурсы, robots и sitemap.
Простой docker compose up может перезапустить единственный контейнер с перерывом в обслуживании. Для выпуска без простоя нужна отдельная схема переключения готовых экземпляров. Наличие Traefik само по себе её не создаёт.
Если проверки не проходят, верните предыдущий образ и конфигурацию. Изменение схемы данных может потребовать совместимого плана миграции: старый образ не всегда сможет читать новые данные.
Наблюдение после выпуска
Проверяйте доступность снаружи, ошибки приложения, место на диске, срок сертификата и работу важных интеграций. Health endpoint, который отвечает «ok», подтверждает доступность самого приложения, но не доставку заявки во внешнюю систему.
Число сайтов на VPS выбирают после измерения памяти, CPU и нагрузки. Тарифы провайдера и ресурсный запас проверяют при заказе; фиксированная таблица «столько-то сайтов за столько-то рублей» быстро устаревает.
О проверке поисковых сигналов после выпуска — в SEO-руководстве. Опишите текущую инфраструктуру, если нужен план размещения, обновления или восстановления.