Node.jsМодуль 7: Тестирование и деплой
Деплой
Heroku, Railway, VPS, PM2
Цель урока
В этом уроке ты научишься:
- Деплоить на PaaS (Railway, Render)
- Настраивать VPS
- Использовать PM2
Railway
Деплой
- Создай аккаунт на railway.app
- New Project → Deploy from GitHub repo
- Добавь переменные окружения
railway.json
{
"build": {
"builder": "NIXPACKS"
},
"deploy": {
"startCommand": "npm start",
"healthcheckPath": "/health"
}
}Render
Деплой
- Создай аккаунт на render.com
- New → Web Service
- Подключи GitHub репозиторий
render.yaml
services:
- type: web
name: my-api
env: node
buildCommand: npm install
startCommand: npm start
envVars:
- key: NODE_ENV
value: productionVPS с PM2
Установка PM2
npm install pm2 -gЗапуск
# Простой запуск
pm2 start src/index.js --name my-api
# С настройками
pm2 start ecosystem.config.jsecosystem.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 nginxSSL с 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.
Решение:
- Создай
Procfile:
web: npm start- Убедись, что
package.jsonимеетstartскрипт:
{
"scripts": {
"start": "node src/index.js"
}
}- Подключи репозиторий на Railway
- Добавь переменные окружения
- Deploy!
Проверь себя
- Что делает PM2?
- Зачем нужен Nginx?
- Как настроить SSL?