Files
ospab.host/ospabhost/backend/PM2_SETUP.md
2025-11-23 14:35:16 +03:00

258 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Настройка 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 экземплярах и будет автоматически запускаться при перезагрузке сервера. 🚀