258 lines
5.7 KiB
Markdown
258 lines
5.7 KiB
Markdown
# Настройка PM2 для Backend
|
||
|
||
## 📦 Установка PM2 (если ещё не установлен)
|
||
|
||
```bash
|
||
# Глобальная установка PM2
|
||
npm install -g pm2
|
||
|
||
# Проверка версии
|
||
pm2 -v
|
||
```
|
||
|
||
## 🚀 Запуск Backend в 4 экземплярах
|
||
|
||
### Шаг 1: Сборка проекта
|
||
|
||
```bash
|
||
cd /var/www/ospab-host/backend
|
||
# или локально:
|
||
cd backend
|
||
|
||
# Установка зависимостей (если нужно)
|
||
npm install
|
||
|
||
# Компиляция TypeScript
|
||
npm run build
|
||
```
|
||
|
||
### Шаг 2: Создание папки для логов
|
||
|
||
```bash
|
||
mkdir -p logs
|
||
```
|
||
|
||
### Шаг 3: Запуск с помощью PM2
|
||
|
||
```bash
|
||
# Запуск 4 экземпляров согласно ecosystem.config.js
|
||
pm2 start ecosystem.config.js --env production
|
||
|
||
# Или напрямую (без конфига):
|
||
pm2 start dist/src/index.js -i 4 --name ospab-backend
|
||
```
|
||
|
||
### Шаг 4: Сохранение конфигурации для автозапуска
|
||
|
||
```bash
|
||
# Сохранить текущий список процессов
|
||
pm2 save
|
||
|
||
# Настроить автозапуск при перезагрузке сервера
|
||
pm2 startup
|
||
|
||
# Выполните команду, которую выведет pm2 startup
|
||
# Обычно это что-то вроде:
|
||
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u root --hp /root
|
||
```
|
||
|
||
## 📊 Управление процессами
|
||
|
||
### Просмотр статуса
|
||
|
||
```bash
|
||
# Список всех процессов
|
||
pm2 list
|
||
|
||
# Детальная информация о процессе
|
||
pm2 show ospab-backend
|
||
|
||
# Мониторинг в реальном времени
|
||
pm2 monit
|
||
```
|
||
|
||
### Логи
|
||
|
||
```bash
|
||
# Все логи
|
||
pm2 logs
|
||
|
||
# Логи конкретного процесса
|
||
pm2 logs ospab-backend
|
||
|
||
# Последние 100 строк
|
||
pm2 logs ospab-backend --lines 100
|
||
|
||
# Очистка логов
|
||
pm2 flush
|
||
```
|
||
|
||
### Перезапуск
|
||
|
||
```bash
|
||
# Перезапуск без даунтайма (рекомендуется)
|
||
pm2 reload ospab-backend
|
||
|
||
# Полный перезапуск (с кратковременным даунтаймом)
|
||
pm2 restart ospab-backend
|
||
|
||
# Остановка
|
||
pm2 stop ospab-backend
|
||
|
||
# Удаление из PM2
|
||
pm2 delete ospab-backend
|
||
```
|
||
|
||
## 🔧 Обновление кода (деплой)
|
||
|
||
### Вариант 1: Автоматический деплой через PM2
|
||
|
||
```bash
|
||
# Из корня проекта
|
||
pm2 deploy ecosystem.config.js production
|
||
```
|
||
|
||
### Вариант 2: Ручной деплой
|
||
|
||
```bash
|
||
cd /var/www/ospab-host
|
||
|
||
# Обновление кода
|
||
git pull origin main
|
||
|
||
# Переход в backend
|
||
cd backend
|
||
|
||
# Установка зависимостей
|
||
npm install
|
||
|
||
# Сборка
|
||
npm run build
|
||
|
||
# Перезапуск без даунтайма
|
||
pm2 reload ospab-backend
|
||
|
||
# Сохранение конфигурации
|
||
pm2 save
|
||
```
|
||
|
||
## 📈 Мониторинг и отладка
|
||
|
||
### Проверка памяти и CPU
|
||
|
||
```bash
|
||
pm2 monit
|
||
```
|
||
|
||
### Веб-интерфейс (опционально)
|
||
|
||
```bash
|
||
# Установка PM2 Plus (бесплатно для мониторинга)
|
||
pm2 link <secret_key> <public_key>
|
||
|
||
# Или просто веб-дашборд
|
||
pm2 web
|
||
# Откройте http://localhost:9615
|
||
```
|
||
|
||
## ⚙️ Текущая конфигурация
|
||
|
||
- **Экземпляры**: 4 процесса в кластерном режиме
|
||
- **Порт**: 5000 (балансировка внутри PM2)
|
||
- **Автоперезапуск**: Да
|
||
- **Лимит памяти**: 500 MB на процесс
|
||
- **Логи**: `./logs/pm2-error.log` и `./logs/pm2-out.log`
|
||
|
||
## 🔍 Проверка автозапуска
|
||
|
||
После перезагрузки сервера:
|
||
|
||
```bash
|
||
# Проверить, что PM2 запустился
|
||
pm2 list
|
||
|
||
# Должен показать 4 экземпляра ospab-backend в статусе "online"
|
||
```
|
||
|
||
## 🛠️ Устранение проблем
|
||
|
||
### PM2 не запускается при загрузке
|
||
|
||
```bash
|
||
# Удалить старую конфигурацию
|
||
pm2 unstartup
|
||
|
||
# Создать новую
|
||
pm2 startup
|
||
# Выполните команду, которую выведет
|
||
|
||
# Сохранить
|
||
pm2 save
|
||
```
|
||
|
||
### Процессы крашатся
|
||
|
||
```bash
|
||
# Проверить логи ошибок
|
||
pm2 logs ospab-backend --err
|
||
|
||
# Увеличить лимит памяти в ecosystem.config.js
|
||
# max_memory_restart: '1G'
|
||
|
||
# Перезапустить
|
||
pm2 reload ecosystem.config.js
|
||
```
|
||
|
||
### Высокая нагрузка на CPU
|
||
|
||
```bash
|
||
# Уменьшить количество экземпляров
|
||
# В ecosystem.config.js:
|
||
instances: 2
|
||
|
||
# Перезапустить
|
||
pm2 reload ecosystem.config.js
|
||
```
|
||
|
||
## 📝 Полезные команды
|
||
|
||
```bash
|
||
# Обновить PM2 до последней версии
|
||
npm install -g pm2@latest
|
||
pm2 update
|
||
|
||
# Резервная копия конфигурации PM2
|
||
pm2 save --force
|
||
|
||
# Информация о системе
|
||
pm2 info ospab-backend
|
||
|
||
# Метрики производительности
|
||
pm2 describe ospab-backend
|
||
```
|
||
|
||
## 🎯 Быстрый старт (TL;DR)
|
||
|
||
```bash
|
||
# 1. Перейти в папку backend
|
||
cd backend
|
||
|
||
# 2. Собрать проект
|
||
npm run build
|
||
|
||
# 3. Создать папку логов
|
||
mkdir -p logs
|
||
|
||
# 4. Запустить PM2
|
||
pm2 start ecosystem.config.js --env production
|
||
|
||
# 5. Сохранить и настроить автозапуск
|
||
pm2 save
|
||
pm2 startup
|
||
|
||
# 6. Проверить статус
|
||
pm2 list
|
||
```
|
||
|
||
Готово! Backend запущен в 4 экземплярах и будет автоматически запускаться при перезагрузке сервера. 🚀
|