Что такое деплой (deploy) Node.js приложения?

«Что такое деплой (deploy) Node.js приложения?» — вопрос из категории DevOps, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Деплой (deploy) — это процесс выгрузки собранного и протестированного Node.js приложения на сервер (или в облачную среду), его настройки и запуска для работы в продакшен-режиме.

Типичный пайплайн деплоя включает:

  1. Сборка (Build): Транспиляция TypeScript, минификация/бандлинг клиентских ассетов (если есть), выполнение скриптов сборки.
    npm run build
  2. Передача артефактов: Копирование файлов на целевой сервер (через SCP, rsync, Git или как артефакт CI/CD).
  3. Установка зависимостей: Установка только продакшен-зависимостей.
    npm ci --only=production
  4. Настройка среды: Установка переменных окружения (например, через .env файл или секреты облака).
  5. Запуск приложения: Использование процесс-менеджера для надёжного запуска.
    # Пример с PM2
    pm2 start dist/app.js --name "api-service" -i max

Ключевые практики для Node.js:

  • Использование процесс-менеджера: PM2 или systemd для автоматического перезапуска при падении.
  • Reverse Proxy: Настройка Nginx или Apache перед приложением для обслуживания статики, SSL-терминации и балансировки нагрузки.
  • Логирование: Настройка ротации логов (например, с помощью winston или pm2-logrotate).
  • Мониторинг: Интеграция с системами типа Sentry, New Relic или Prometheus для отслеживания ошибок и метрик.

Пример команды для деплоя на VPS с PM2:

# После копирования файлов на сервер
cd /var/www/myapp
export NODE_ENV=production
npm ci --only=production
pm2 start ecosystem.config.js # Конфиг с настройками кластера и переменными
pm2 save
pm2 startup systemd # Для автозапуска при перезагрузке сервера