Руководство по Очередям и Задачам. Часть 3: Как запустить воркеры на продакшн-сервере

Теперь, когда вы создали свое первое Laravel-приложение с Очередями/Задачами по первому и второму уроку, пришло время развернуть его на рабочем сервере.

Единственное отличие от «обычного» Laravel-приложения (то есть приложениями без очередей и задач) заключается в том, что мы должны сказать серверу, чтобы он запустил команду queue:work и поддерживал ее работу даже после того, как мы закроем наше ssh-соединение с сервером и даже после перезапуска сервера.

Мы рассмотрим два способа, которыми это можно сделать. Первый и самый простой — с помощью Forge, фактически службы для развертывания Laravel-приложений, а затем узнаем, как можно обойтись и без Forge. Короче говоря, мы узнаем, что делает Forge для организации правильной работы очередей и воркеров на сервере.

Развертываем с помощью Forge

Предполагаю, что вы уже развернули свое приложение в Forge, и сосредоточусь на том, что нужно cделать дальше, чтобы команда queue:work заработала в фоновом режиме.

Итак, зайдите в Forge, а затем нажмите на вкладку «Queue» на левой панели.

Руководство по Очередям и Задачам. Часть 3: Как запустить воркеры на продакшн-сервере

Всё, что нужно для создания фонового воркера, это заполнить форму:

PS: нам не нужны все поля, только самые важные:

  • Connection: rabbitmq — название нашего подключения;
  • Queue: jobs — в прошлой статье у нас было две очереди: одна называлась jobs, а другая — emails. Создадим воркера для каждой.
  • Processes: 4 — указываем, сколько фоновых воркеров мы хотим использовать параллельно. В примерах предыдущих статей, мы обрабатывали одну задачу за раз, если же у нас достаточно ресурсов на сервере и если мы хотим обрабатывать очереди быстро, то мы можем сделать столько процессов, сколько захотим.
  • Maximum Tries: 3 — здесь мы говорим нашему приложению попытаться обработать одну и туже задачу 3 раза, прежде чем отметить её как проваленную (т.е. отправить в таблицу failed_jobs).

Это также зависит от характера ваших приложений. В некоторых вам может потребоваться попытаться обработать одну и ту же задачу несколько раз, прежде чем пометить её как проваленную, в другом, возможно, целесообразнее пометить её так сразу.

Руководство по Очередям и Задачам. Часть 3: Как запустить воркеры на продакшн-сервере

Теперь, после того как вы нажмете кнопку «Start worker», он появится в таблице «Active workers»:

Руководство по Очередям и Задачам. Часть 3: Как запустить воркеры на продакшн-сервере

Как вы видите, из этой таблицы воркеры можно перезапускать или полностью удалять.

Единственная проблема, которую можно здесь заметить — вам нужно создавать воркера с нуля в случае, если захотите обновить его настройки, даже если если просто нужно поменять количество воркеров.

Что дальше?

После того, как вы создадите воркеры через Forge, вам больше ничего не нужно делать. Даже после повторного развертывания приложения или перезапуска сервера — Forge позаботится обо всем, включая проверку работоспособности воркеров и их перезапуск после каждого изменения кода.

Развертывание без Laravel Forge

Это развертывание покажет нам, сколько всего Forge делает за кулисами.

Давайте посмотрим, какие шаги нужно предпринять, чтобы запустить наши воркеры продакшн-сервере.

Установка Supervisor

Чтобы команда queue:work работала постоянно, нужно установить монитор процессов, например Supervisor.

Если вы используете Ubuntu, то можете установить его с помощью команды:

sudo apt-get install supervisor

Настройка супервизора

Нужно сообщить Supervisor’у, какие очереди мы хотим использовать и сколько воркеров создать.

Для этого нам нужно создать по одному конфигурационному файлу для каждой очереди и сохранить их в каталоге /etc/supervisor/conf.d

Файлы конфигурации выглядят так (пример взят из документации Laravel):

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
stopwaitsecs=3600

Вот файл конфигурации, который воссоздает те же настройки, которык мы создали в предыдущем разделе с помощью Forge:

[program:jobs-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/djug/basic-analytics-v01/artisan queue:work rabbitmq --queue=jobs --tries=3
autostart=true
autorestart=true
user=djug
numprocs=4
redirect_stderr=true
stdout_logfile=/home/djug/basic-analytics-v01/worker.log

После добавления всех необходимых конфигураций нам нужно будет выполнить следующие команды, чтобы учесть новые изменения:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all

Вы должны будете проделать это после каждого изменения файлов конфигурации.

Вывод

В этой серии статей мы рассмотрели все темы, которые позволят вам создать Laravel-приложение на основе Задач. Мы узнали, как мы можно создавать Задачи и как использовать различные подключения для их обработки. Мы также узнали, что нам нужно сделать, чтобы наши воркеры правильно работали на продакшн-сервере.

Автор: Youghourta Benali
Перевод: Алексей Широков

Наш Телеграм-канал — следите за новостями о Laravel.