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