Деплой на VPS: pm2/systemd/nginx

Деплой приложения на VPS: настройка процесса через pm2 или systemd, nginx как reverse proxy и HTTPS. Пошаговая инструкция, как своими руками вывести проект в интернет.

Автор — Дмитрий Тыльный · опыт Senior DevOps · 28 мая 2026 · 5 мин

Коротко. Чтобы проект стал доступен по адресу в интернете, нужен сервер (VPS), процесс-менеджер (pm2 или systemd), чтобы приложение не падало, nginx как reverse proxy и HTTPS через бесплатный сертификат. Это классический навык, который сильно усиливает портфолио.

Что такое VPS

VPS — виртуальный сервер, который вы арендуете и настраиваете сами. На нём вы разворачиваете приложение, базу и веб-сервер. Доступ — по SSH. Стоит недорого (несколько сотен рублей в месяц) и даёт понимание, как устроен продакшн изнутри, — то, чего не увидишь на платформах вроде Vercel.

Держим процесс живым

Если просто запустить приложение в терминале, оно умрёт при закрытии сессии. Нужен процесс-менеджер:

  • pm2 (для Node.js): pm2 start server.js, автозапуск после перезагрузки.
  • systemd (универсально): unit-файл, который стартует и перезапускает приложение при падении.

Nginx как reverse proxy

Nginx принимает запросы на 80/443 и перенаправляет их вашему приложению (например, на порт 3000):

server {
  listen 80;
  server_name example.com;
  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
  }
}

Это скрывает внутренний порт, позволяет раздавать статику и добавить HTTPS.

HTTPS бесплатно

Сертификат Let's Encrypt выдаётся бесплатно; утилита certbot настраивает его для nginx автоматически и продлевает. HTTPS сегодня обязателен: без него браузеры помечают сайт небезопасным.

Безопасность сервера: минимум

Свежий VPS сканируют боты уже через минуты после запуска, поэтому базовую защиту настраивают сразу. Минимальный набор джуна: вход по SSH-ключу вместо пароля, отключённый вход под root, файрвол (ufw), открытый только на нужные порты (22, 80, 443), и регулярные обновления системы. Это не «продвинутый DevOps», а гигиена, без которой сервер с вашим проектом быстро станет чужим.

Чеклист деплоя

  1. Арендовать VPS, зайти по SSH, обновить систему.
  2. Установить рантайм (Node/Python), клонировать проект.
  3. Поднять приложение под pm2/systemd.
  4. Настроить nginx как reverse proxy.
  5. Выпустить HTTPS через certbot.
  6. Закрыть лишние порты (firewall), настроить деплой из CI.

Чеклист «не стыдно показать в проде»

  • процесс под systemd/pm2, автоперезапуск;
  • nginx reverse proxy + HTTPS (Let's Encrypt);
  • firewall: только 80/443/ssh, ssh по ключу;
  • логи приложения и access/error nginx;
  • бэкап данных и .env не в git;
  • отдельный пользователь, не root для приложения.

Для джуна важен не «идеальный k8s», а понимание: процесс живёт, порт слушает, проксирует, сертификат обновляется, логи читаются. Контейнеры — следующий шаг: Docker, общий трек — DevOps старт.

Обновление без «ой упало»

Простой путь: новый релиз в соседний каталог → migrate → switch symlink → restart → healthcheck. Откат — symlink назад. Не invent k8s, пока один VPS не обслуживаете спокойно.

Следующий шаг в бэкенде

Примените идеи из «Деплой на VPS: pm2/systemd/nginx» к своему учебному проекту или к одной вакансии на этой неделе. Соберите минимальный API: CRUD + валидация + одна таблица в БД + README с запуском. Дальше: REST API, SQL, auth, деплой. План — бэкенд 2026, обзор роли — бэкенд на уровне джуна.

Проверьте обновление и возврат версии

На учебном VPS разверните сервис, проверьте домен, HTTPS и ответ приложения извне. Выпустите вторую версию и верните первую по сохранённым командам. Пользовательские файлы и база должны пережить оба действия. Пароли и ключи в репозиторий не добавляйте.

По теме: Docker, DevOps старт, REST API, SQL, auth, профессии.

Проверьте, что проект можно перенести и восстановить

После первого запуска попробуйте перенести проект на другой сервер и восстановить его из резервной копии. Проверьте базу, файлы и действия пользователя. Так станет видно, какие зависимости вы забыли при первом деплое.

Частые вопросы

VPS или облачный хостинг?
Для обучения VPS даёт понимание «как всё устроено». Платформы (Vercel и т.п.) проще, но скрывают детали. Для портфолио полезно уметь работать с VPS.

pm2 или systemd?
pm2 проще для Node-проектов; systemd универсален и есть в любой Linux-системе. Достаточно освоить один.

Нужен ли Docker для деплоя?
Не обязателен, но упрощает переносимость. См. Docker для новичка.

Как автоматизировать деплой?
Настроить CI/CD, который на каждый push сам обновляет сервер — см. GitHub Actions.

Материал «Деплой на VPS: pm2/systemd/nginx» имеет смысл только вместе с практикой: один артефакт в git на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.

Если нужна помощь с запуском проекта

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