Введение: Почему VPS — идеальное решение для вашего Node.js приложения?
Вы написали крутое приложение на JavaScript (Node.js), протестировали его локально, и теперь хотите, чтобы оно было доступно в интернете 24/7. Shared-хостинг часто не подходит для Node.js из-за ограничений, а облачные сервисы (Heroku, Railway) могут быть дорогими или непредсказуемыми в плане производительности. Виртуальный частный сервер (VPS) — это золотая середина: полный контроль, высокая производительность и доступная цена.
В этом пошаговом руководстве мы разберем процесс деплоя JavaScript (Node.js) приложения на VPS с нуля. Вы узнаете, как настроить сервер, установить необходимое ПО, безопасно запустить приложение и сделать его доступным по домену. Все примеры кода — рабочие и проверенные.
1. Подготовка сервера: первичная настройка VPS
Для начала вам потребуется арендовать VPS у любого провайдера (DigitalOcean, Vultr, Timeweb, Selectel). Минимальные характеристики: 1 vCPU, 1-2 GB RAM, 20-30 GB SSD. Операционная система — Ubuntu 22.04 LTS (самая стабильная версия).
1.1. Подключение к серверу по SSH
После получения IP-адреса и пароля подключаемся к серверу через терминал (Mac/Linux) или PuTTY (Windows):
ssh root@ваш_IP_сервера
Сразу меняем пароль и создаем нового пользователя (работать под root — плохая практика):
adduser deploy_user
usermod -aG sudo deploy_user
su - deploy_user
1.2. Обновление системы и установка базовых пакетов
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ufw build-essential
Настраиваем базовый файрвол UFW (оставляем только SSH и порты, которые будем использовать):
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
2. Установка Node.js и менеджера процессов PM2
Для работы JavaScript приложения на сервере нам понадобится Node.js. Используем официальный менеджер версий NodeSource, чтобы установить актуальную LTS версию:
2.1. Установка Node.js (v20 LTS)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Проверяем установку:
node -v # v20.x.x
npm -v # 10.x.x
2.2. Установка и настройка PM2
PM2 — это продвинутый менеджер процессов для Node.js. Он автоматически перезапускает приложение при падении, управляет логами и позволяет запускать несколько экземпляров (кластеризация).
sudo npm install -g pm2
Настраиваем автозапуск PM2 при перезагрузке сервера:
pm2 startup systemd
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u deploy_user --hp /home/deploy_user
3. Деплой приложения и запуск через PM2
Теперь мы готовы перенести ваше JavaScript приложение на сервер. Есть два популярных способа: через Git (рекомендуется) или через SCP/FileZilla.
3.1. Клонирование репозитория (Git)
cd /home/deploy_user
git clone https://github.com/ваш_username/ваш_репозиторий.git myapp
cd myapp
Устанавливаем зависимости и собираем проект (если требуется):
npm install
# Если есть скрипт сборки: npm run build
3.2. Создание конфигурационного файла .env
Никогда не храните секреты в коде. Создайте файл .env в папке проекта:
nano .env
Пример содержимого:
PORT=3000
NODE_ENV=production
DATABASE_URL=mongodb://localhost:27017/myapp
JWT_SECRET=ваш_супер_секретный_ключ
3.3. Запуск приложения через PM2
Предположим, точка входа вашего приложения — app.js или server.js. Запускаем:
pm2 start app.js --name "myapp"
Проверяем статус:
pm2 status
pm2 logs myapp # просмотр логов
Сохраняем список процессов, чтобы PM2 восстановил их после перезагрузки:
pm2 save
4. Настройка обратного прокси через Nginx и SSL
Ваше приложение работает на порту 3000, но пользователи должны заходить по стандартным портам 80 (HTTP) и 443 (HTTPS). Для этого используется Nginx как reverse proxy. Также обязательно настроим SSL-сертификат через Certbot.
4.1. Установка Nginx
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
4.2. Настройка конфигурации сайта
Создаем файл конфигурации для вашего домена (замените yourdomain.com на ваш реальный домен):
sudo nano /etc/nginx/sites-available/yourdomain.com
Вставляем следующий код (этот конфиг будет работать и для HTTP, и для HTTPS после настройки SSL):
server {
listen 80;
server_name yourdomain.com www.yourdomain.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;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Активируем конфигурацию и проверяем:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo