Введение: Почему VPS — это правильный выбор для вашего Node.js приложения
Вы написали крутое приложение на JavaScript (Node.js), протестировали его локально, и теперь оно готово покорить мир. Но как перенести его из уютной среды разработки в суровый мир продакшена? Ответ прост — VPS (Virtual Private Server). В отличие от общего хостинга, VPS даёт вам полный контроль над сервером, root-доступ и возможность тонкой настройки окружения под нужды вашего Node.js приложения.
В этом пошаговом руководстве мы пройдем весь путь: от покупки сервера и установки Node.js до настройки домена, SSL-сертификата и менеджера процессов PM2. Вы узнаете, как сделать ваш сайт стабильным, быстрым и безопасным. Поехали!
Шаг 1: Подготовка VPS и подключение к серверу
Первым делом вам нужно арендовать VPS. Подойдут любые популярные провайдеры: DigitalOcean, Linode, Vultr или российские аналоги. Минимальная конфигурация для небольшого приложения — 1 vCPU и 1 GB RAM (с Ubuntu 20.04 или 22.04 LTS).
После создания сервера вы получите IP-адрес и root-пароль. Подключаемся по SSH:
ssh root@ваш_IP_адрес
Если вы используете macOS или Linux, SSH-клиент уже встроен. На Windows можно использовать PowerShell или Putty.
Сразу обновим систему:
apt update && apt upgrade -y
Совет: создайте отдельного пользователя (не root) для повседневной работы. Это повысит безопасность:
adduser myuser
usermod -aG sudo myuser
su - myuser
Установка Node.js и npm
Мы установим последнюю стабильную версию Node.js через NodeSource — это самый надежный способ:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Проверяем версии:
node --version # v20.x.x
npm --version # 10.x.x
Отлично! Теперь у нас есть среда для запуска JavaScript кода на сервере.
Шаг 2: Загрузка приложения на сервер и установка зависимостей
Есть несколько способов перенести код. Самый простой для новичков — использовать git clone. Если ваш код хранится на GitHub/GitLab, выполните:
git clone https://github.com/ваш_аккаунт/ваш_репозиторий.git /var/www/myapp
cd /var/www/myapp
Если репозиторий приватный, настройте SSH-ключи или используйте Personal Access Token.
Альтернативный способ — загрузить файлы через SCP (из вашей локальной консоли):
scp -r /путь/к/вашему/проекту myuser@ваш_IP:/var/www/myapp
После переноса кода устанавливаем зависимости:
cd /var/www/myapp
npm install --production
Флаг --production гарантирует, что не будут установлены dev-зависимости (тесты, сборщики и т.д.), что экономит место и повышает безопасность.
Настройка переменных окружения
Никогда не храните пароли и API-ключи в коде. Создайте файл .env в корне проекта:
nano .env
Пример содержимого:
PORT=3000
DB_HOST=localhost
DB_USER=myuser
DB_PASS=supersecret
JWT_SECRET=myjwtsecret123
Убедитесь, что этот файл добавлен в .gitignore. Для чтения переменных в коде используйте пакет dotenv (он уже должен быть в ваших зависимостях).
Шаг 3: Запуск приложения с PM2 и настройка автозапуска
Если вы запустите node app.js и закроете SSH-сессию — приложение упадет. Нам нужен менеджер процессов, который будет держать приложение живым 24/7. PM2 — идеальный выбор для Node.js.
Устанавливаем PM2 глобально:
sudo npm install -g pm2
Запускаем приложение:
pm2 start app.js --name "myapp"
Если ваше приложение использует порт 3000, проверьте, что оно работает:
curl http://localhost:3000
Вы должны увидеть HTML или JSON ответ. Теперь настраиваем автозапуск PM2 при перезагрузке сервера:
pm2 startup systemd
pm2 save
PM2 автоматически создаст systemd-сервис. Теперь ваше приложение будет запускаться даже после ребута.
Полезные команды PM2
pm2 list— список запущенных процессовpm2 logs myapp— просмотр логов в реальном времениpm2 restart myapp— перезапуск приложенияpm2 stop myapp— остановка приложенияpm2 monit— мониторинг использования CPU/RAM
Шаг 4: Настройка Nginx как Reverse Proxy и SSL сертификат
Ваше приложение слушает порт 3000, но пользователи не хотят вводить http://ваш_IP:3000. Мы настроим Nginx, который будет принимать запросы на стандартных портах 80 (HTTP) и 443 (HTTPS) и перенаправлять их на Node.js.
Устанавливаем Nginx:
sudo apt install nginx -y
Создаем конфигурационный файл для нашего сайта:
sudo nano /etc/nginx/sites-available/myapp
Вставляем следующий код (замените your_domain.com на ваш домен):
server {
listen 80;
server_name your_domain.com www.y