Деплой на VPS: pm2/systemd/nginx
Деплой приложения на VPS: настройка процесса через pm2 или systemd, nginx как reverse proxy и HTTPS. Пошаговая инструкция, как своими руками вывести проект в интернет.
Коротко. Чтобы проект стал доступен по адресу в интернете, нужен сервер (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», а гигиена, без которой сервер с вашим проектом быстро станет чужим.
Чеклист деплоя
- Арендовать VPS, зайти по SSH, обновить систему.
- Установить рантайм (Node/Python), клонировать проект.
- Поднять приложение под pm2/systemd.
- Настроить nginx как reverse proxy.
- Выпустить HTTPS через certbot.
- Закрыть лишние порты (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 на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.
Если нужна помощь с запуском проекта
Развёртывание и настройку рабочего приложения можно обсудить со мной. Вместе с командой разберём серверы, зависимости и дальнейшие обновления. Помощь с инфраструктурой проекта.