- Home »

Быстрый старт: Как развернуть свой VPS под Docker с автодеплоем
Если ты когда-нибудь пытался запустить свой проект на Node.js в продакшене, то знаешь, что просто node app.js
на домашнем компе — это не вариант. Нужно что-то понадежнее, чтобы твой сервис не падал от любого чиха, а пользователи не жаловались на тормоза. В этой статье я расскажу, как быстро и правильно развернуть Node.js-приложение на VPS, используя PM2 для управления процессами и NGINX как обратный прокси. Всё максимально практично и без воды — только то, что реально работает.
Зачем вообще заморачиваться с VPS, PM2 и NGINX?
- VPS — это твой личный сервер в облаке, где ты хозяин. Никаких ограничений, как на шаред-хостинге.
- Node.js — идеален для современных веб-приложений, но сам по себе не умеет работать с https, балансировкой и автозапуском после падения.
- PM2 — менеджер процессов для Node.js, который перезапустит твой сервис, если он упал, и поможет с логами.
- NGINX — быстрый и надёжный веб-сервер, который умеет проксировать запросы, раздавать статику и работать с SSL.
Всё вместе — это классическая схема для любого серьёзного проекта. Так работают и стартапы, и крупные компании.
Как это работает? Архитектура и алгоритмы
Схема простая, но эффективная:
- Пользователь заходит на твой сайт по домену (например,
mycoolapp.com
). - Запрос попадает на NGINX, который слушает 80/443 порты (HTTP/HTTPS).
- NGINX решает, что делать с запросом: отдать статику или проксировать на Node.js.
- Node.js-приложение крутится в фоне под управлением PM2 — если оно падает, PM2 его поднимает.
- Ответ возвращается пользователю через NGINX.
Вот простая схема:
Пользователь → [NGINX] → [PM2 → Node.js] → [База данных, если есть]
Где взять VPS?
Если у тебя ещё нет VPS, можешь взять тут: https://arenda-server.cloud/vps — быстро, просто, без лишней бюрократии.
Установка и настройка: шаг за шагом
1. Подключаемся к VPS
Обычно после заказа VPS тебе приходит IP, логин (обычно root
) и пароль. Подключаемся по SSH:
ssh root@your_vps_ip
2. Обновляем систему
apt update && apt upgrade -y
(Для CentOS вместо apt
используй yum
или dnf
)
3. Ставим Node.js
Рекомендую ставить через nvm — это удобно и гибко:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install --lts nvm use --lts node -v npm -v
Если нужен другой способ — смотри официальную инструкцию.
4. Устанавливаем PM2
npm install -g pm2
Проверь, что всё ок:
pm2 --version
5. Копируем проект на сервер
- Через
git clone
(если проект на GitHub/GitLab) - Через
scp
илиrsync
(если локально)
git clone https://github.com/yourname/yourproject.git cd yourproject npm install
6. Запускаем приложение через PM2
pm2 start app.js --name myapp
Где app.js
— твой главный файл.
Чтобы процесс запускался после ребута сервера:
pm2 startup pm2 save
7. Устанавливаем и настраиваем NGINX
apt install nginx -y
Проверь, что работает:
systemctl status nginx
Теперь настраиваем проксирование. Открываем конфиг:
nano /etc/nginx/sites-available/default
Пример конфига для Node.js (замени mycoolapp.com
и порт на свой):
server { listen 80; server_name mycoolapp.com www.mycoolapp.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Перезапускаем NGINX:
systemctl reload nginx
8. (Бонус) Настраиваем HTTPS через Let’s Encrypt
apt install certbot python3-certbot-nginx -y certbot --nginx
Следуй инструкциям — сертификат будет установлен автоматически.
Практические советы и лайфхаки
- Держи логи под контролем:
pm2 logs
покажет, что происходит с приложением. - Для деплоя можно использовать PM2 deploy или Capistrano (для продвинутых).
- Не запускай Node.js на 80/443 портах напрямую — это небезопасно и неудобно.
- Ограничь доступ к серверу по SSH (например, через fail2ban или смену порта).
- Регулярно обновляй Node.js, NGINX и саму систему.
Кейсы: что бывает, если сделать всё правильно и неправильно
Позитивный кейс
Миша поднял свой стартап на VPS по этой схеме. Сайт выдержал 10k пользователей в день, не падал, SSL работал, а обновления выкатывались за пару минут. PM2 спасал от падений, а NGINX — от DDoS и кривых запросов.
Негативный кейс
Петя запускал Node.js напрямую на 80 порту, без NGINX и PM2. Сайт падал при каждом баге, SSL не работал, поисковики ругались на небезопасное соединение, а после перезагрузки VPS всё приходилось запускать вручную.
Частые ошибки новичков и мифы
- Ошибка: “Зачем мне NGINX, если Node.js и так умеет слушать порт?”
Реальность: NGINX нужен для SSL, балансировки, отдачи статики и безопасности. - Ошибка: “PM2 — это только для больших проектов”.
Реальность: Даже для маленьких pet-проектов PM2 спасёт от лишних нервов. - Миф: “VPS — это сложно и дорого”.
Реальность: Сейчас VPS стоит как пара чашек кофе в месяц, а настроить его проще, чем кажется. - Ошибка: Не сохранять конфиг PM2 (
pm2 save
), из-за чего после ребута всё падает. - Ошибка: Не закрывать лишние порты на сервере — открывай только то, что реально нужно.
Похожие решения и альтернативы
- forever — альтернатива PM2, но менее удобная и функциональная (forever на GitHub).
- systemd — можно запускать Node.js как сервис, но это сложнее для новичков.
- Caddy — альтернатива NGINX, умеет сам получать SSL, но менее популярен (caddyserver.com).
- Docker — для контейнеризации, если хочется ещё больше гибкости (но это отдельная тема).
Заключение: почему стоит выбрать такую схему?
Если тебе нужен быстрый, надёжный и гибкий сервер для Node.js — VPS + PM2 + NGINX это проверенное временем решение. Ты получаешь:
- Полный контроль над сервером и приложением
- Автоматический перезапуск и логи через PM2
- Безопасность и SSL через NGINX
- Гибкость для масштабирования и обновлений
Не бойся пробовать — даже если что-то не получится с первого раза, опыт быстро приходит. А если нужна быстрая аренда VPS — вот ссылка. Удачи в продакшене!
Полезные ссылки
- Node.js — официальный сайт
- PM2 — документация
- NGINX — документация
- Let’s Encrypt — бесплатные SSL-сертификаты
- nvm — Node Version Manager
Если остались вопросы — пиши в комментариях, помогу чем смогу!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.