Очередь Laravel с помощью NodeJS PM2

Очередь Laravel с помощью NodeJS PM2

PM2 - это программа мониторинга процессов, написанная на NodeJs. Я часто использую её как альтернативу официальной программе мониторинга процессов Laravel - supervisor. Однако, в отличие от супервизора, это ПО мониторинга процессов имеет меньше зависимостей, меньше конфигураций и проще. В общем, его я ставлю, когда не получается по каким-либо причинам установить supervisor на сервер.

Установка PM2

Установим PM2 в систему глобально, выполнив:

npm install pm2@latest -g

Отображаем список всех запущенных процессов

Выполните в командной строке команду, чтобы получить список всех процессов, отслеживаемых PM2 (команда прямо как в Docker).

pm2 ls

1_c-julg3T4PmCt-_vAesBcA

Настройка PM2 и создание процессов

Создайте новый YAML файл назвав его process.yml, в который добавьте код, приведенный ниже:

apps:
  - name: "queue_worker"
    script: artisan
    watch: false
    interpreter: php
    args: "queue:work --tries=3 --timeout=5 --sleep=2"
    restart_delay: 3000
    error_file: ./storage/logs/queue.error.log
    out_file: ./storage/logs/queue.out.log
    pid_file: ./storage/app/queue.pid

Чтобы узнать подробнее о PM2, советую просмотреть официальную документацию.

Добавляем alias быстрого запуска Laravel очереди

Для запуска мониторинга, создадим короткую команду, отредактируем package.json, куда добавим две новые команды:

"queue:start": "npm run queue:remove && pm2 start process.yml",
"queue:remove": "php artisan queue:restart && pm2 delete process.yml"

package.json

Прошу обратить внимание, что перед запуском мониторинга процессов, нам необходимо перезагрузить очередь Laravel. Если этого не сделать, и залить новые файлы на сервер, то без перезагрузки, очередь так и будет ссылаться на старую версию кода. Потому, сначала нужно остановить очередь, дать ей возможность прочитать актуальный код, и запустить заново. Что и делаем команда php artisan queue:restart.

Потому, если вы задаётесь вопросом, что при работе Laravel очереди через PM2, код не обновляется, то вам просто нужно перезагрузить очередь.

Вращаем барабан Запускаем процессы

Теперь, когда мы всё добавили, можем запустить PM2 для работы Laravel очереди.

npm run queue:start

Читаем логи процессов PM2

Для просмотра логов в PM2 просто выполните команду:

pm2 logs queue_worker

Резюме

В этой статье вы узнали, как можно настроить процессы PM2 для мониторинга Laravel очереди. И как её перезагружать при обновлении кода, чтобы обновить код в очереди. Аналогичным образом, вы можете добавить в мониторинг и процесс Laravel Echo Server-а в PM2, добавив лишь новую запись в конфиг.