PM2

Очень полезно будет иметь на сервере демона, который будет поднимать наш api в случае его падения, либо же перезружать api при превышении лимитов по памяти и, так далее. Тут я расскажу максимально всё, что нам потребуется от PM2. Устанавливаем pm2:

npm i -g pm2

Далее нам нужен конфигурационный файл. PM2 поддерживает много вариантов и форматов конфигураций. А я вам расскажу о самом менее распространённом, но найболее удобном варианте. Проект с api я обычно храню в корне домашнего каталога юзера и там же этот конфигурационный файл. Создаем app.json в корне домашнего каталога:

{
    "apps": [
        {
            "name": "app", // Название сервиса
            "script": "index.js", // Директория к файлу проекта 
            "instances": 2, // Колличество потоков для выполнения
            "exec_mode" : "cluster", // Кластерный режим
            "max_memory_restart": "1G", // Макс потребление ОЗУ на поток
            "env": {  // и указываем наш env тут
                "NODE_ENV": ***,
                "NODE_PATH": ***,
                "DB_DATABASE": ***,
                "DB_HOST": ***,
                "DB_NAME": ***,
                "DB_PASSWORD": ***,
                ***
            }
        }
    ]
}

Колличество instances не может привышать колличество доступных потоков(ядер).

Можно отключить кластерный режим просто удалив exec_mode и instances.

Далее для запуска нашего api через pm2 нам нужно выполнить :

pm2 start app.json

Остановка:

pm2 stop app.json

Рестарт:

pm2 restart id

Удаление из списка:

pm2 delete app.json

Можно посмотреть статистику и логи запущенных сервисов командой:

pm2 monit

В случае с api это удобно тем, что можно контролировать количество запросов к api. Есть интересная функция, но признаюсь честно, я ей не пользовался ни разу. В замен pm2 monit можно использовать web версию. Для этого нужно выполнить команду:

pm2 plus

И пройти регистрацию. Также в случае падения всего сервера у провайдера, что может быть очень редко, но всё же. Нам нужно добавить нашего демона в автозагрузку. Сохраняем запущенные процессы (при изменении конфигурации или запускаемых сервисов нужно сохранить процессы повторно):

pm2 save 

Добавляем в автозагрузку:

pm2 startup systemd

После чего мы получим ответ, последнюю строку которого нужно выполнить с привилегиями root: (команда может отличаться, так что не стоит копировать её из этого ответа).

[PM2] Init System found: systemd 
[PM2] To setup the Startup Script, copy/paste the following command: 
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host --hp /home/8host

С разбором PM2 мы закончили.

Last updated

Was this helpful?