Очередь Laravel с помощью NodeJS PM2
PM2 - это программа мониторинга процессов, написанная на NodeJs. Я часто использую её как альтернативу официальной программе мониторинга процессов Laravel - supervisor. Однако, в отличие от супервизора, это ПО мониторинга процессов имеет меньше зависимостей, меньше конфигураций и проще. В общем, его я ставлю, когда не получается по каким-либо причинам установить supervisor на сервер.
Установка PM2
Установим PM2 в систему глобально, выполнив:
npm install pm2@latest -g
Отображаем список всех запущенных процессов
Выполните в командной строке команду, чтобы получить список всех процессов, отслеживаемых PM2 (команда прямо как в Docker).
pm2 ls
Настройка 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"
Прошу обратить внимание, что перед запуском мониторинга процессов, нам необходимо перезагрузить очередь 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, добавив лишь новую запись в конфиг.