← Гайды

Автоматизация и деплой

Деплой Node.js на VPS: PM2, nginx и SSL

Как выкатить приложение без Docker: процесс, прокси и сертификат.

Коротко

На VPS собираете проект, поднимаете его через PM2 на localhost, снаружи ставите nginx и Let's Encrypt. Docker не обязателен, если один Node-процесс.

Подробнее

Схема простая: Node слушает 127.0.0.1:3000, nginx принимает 80/443 и проксирует.

  1. На сервере ставите Node LTS и nginx.
  2. Кладёте код в каталог проекта, в .env — секреты, не в git.
  3. Собираете фронт или запускаете node / next start.
  4. PM2 держит процесс: pm2 start и pm2 save, чтобы пережил ребут.
  5. В nginx — proxy_pass на localhost, заголовки Host и X-Forwarded-Proto.
  6. Сертификат — certbot. HTTP редиректите на HTTPS.

Логи смотрите в pm2 logs. Если 502 — процесс не слушает порт или упал после деплоя.

Для Next.js на том же VPS часто удобнее Docker — см. деплой Next.js на Beget. Этот гайд — если хотите без контейнеров.

См. также

Ключевые выводы

PM2 держит процесс, nginx закрывает наружу, SSL обязателен на проде. Секреты только на сервере. После обновления — git pull, сборка, pm2 restart.

FAQ

Зачем nginx, если Node сам слушает 3000?

Снаружи не стоит открывать порт приложения. nginx даёт HTTPS, один вход и несколько сайтов на одном VPS.

PM2 или systemd?

Для одного Node-приложения PM2 проще. systemd тоже нормально, если уже так принято на сервере.

Почему после ребута сайт лежит?

Не сделали pm2 startup и pm2 save. Процесс не поднялся сам.

Мы используем файлы cookie для того, чтобы предоставить пользователям больше возможностей при посещении сайта. Оставаясь на сайте, Вы соглашаетесь на обработку файлов cookie. Подробнее об условиях использования.