JS Tower
Node.jsМодуль 7: Тестирование и деплой

Деплой

Heroku, Railway, VPS, PM2

Цель урока

В этом уроке ты научишься:

  • Деплоить на PaaS (Railway, Render)
  • Настраивать VPS
  • Использовать PM2

Railway

Деплой

  1. Создай аккаунт на railway.app
  2. New Project → Deploy from GitHub repo
  3. Добавь переменные окружения

railway.json

{
  "build": {
    "builder": "NIXPACKS"
  },
  "deploy": {
    "startCommand": "npm start",
    "healthcheckPath": "/health"
  }
}

Render

Деплой

  1. Создай аккаунт на render.com
  2. New → Web Service
  3. Подключи GitHub репозиторий

render.yaml

services:
  - type: web
    name: my-api
    env: node
    buildCommand: npm install
    startCommand: npm start
    envVars:
      - key: NODE_ENV
        value: production

VPS с PM2

Установка PM2

npm install pm2 -g

Запуск

# Простой запуск
pm2 start src/index.js --name my-api

# С настройками
pm2 start ecosystem.config.js

ecosystem.config.js

module.exports = {
  apps: [{
    name: 'my-api',
    script: 'src/index.js',
    instances: 'max',  // Кластер
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    },
    max_memory_restart: '500M',
    error_file: 'logs/err.log',
    out_file: 'logs/out.log',
    log_date_format: 'YYYY-MM-DD HH:mm:ss'
  }]
};

Команды PM2

pm2 start app.js          # Запуск
pm2 stop my-api           # Остановка
pm2 restart my-api        # Перезапуск
pm2 reload my-api         # Zero-downtime reload
pm2 delete my-api         # Удаление
pm2 list                  # Список процессов
pm2 logs                  # Логи
pm2 monit                 # Мониторинг
pm2 save                  # Сохранить конфигурацию
pm2 startup               # Автозапуск при старте системы

Nginx как reverse proxy

Установка

sudo apt update
sudo apt install nginx

Конфигурация

# /etc/nginx/sites-available/my-api
server {
    listen 80;
    server_name api.example.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_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}
sudo ln -s /etc/nginx/sites-available/my-api /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL с Certbot

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d api.example.com

Чеклист деплоя

  • NODE_ENV=production
  • Переменные окружения настроены
  • База данных подключена
  • HTTPS настроен
  • Логирование работает
  • Мониторинг настроен
  • Бэкапы базы данных
  • CI/CD pipeline

Практика

Задание: Деплой на Railway

Задача: Задеплой API на Railway.

Решение:

  1. Создай Procfile:
web: npm start
  1. Убедись, что package.json имеет start скрипт:
{
  "scripts": {
    "start": "node src/index.js"
  }
}
  1. Подключи репозиторий на Railway
  2. Добавь переменные окружения
  3. Deploy!

Проверь себя

  1. Что делает PM2?
  2. Зачем нужен Nginx?
  3. Как настроить SSL?