Деплой JavaScript приложения на VPS: пошаговое руководство от А до Я

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Почему 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                

Блоги

Рекомендаций по книгам