Теперь, когда вы создали свое первое Laravel-приложение с Очередями/Задачами по первому и второму уроку, пришло время развернуть его на рабочем сервере.
Единственное отличие от «обычного» Laravel-приложения (то есть приложениями без очередей и задач) заключается в том, что мы должны сказать серверу, чтобы он запустил команду queue:work
и поддерживал ее работу даже после того, как мы закроем наше ssh-соединение с сервером и даже после перезапуска сервера.
Мы рассмотрим два способа, которыми это можно сделать. Первый и самый простой — с помощью Forge, фактически службы для развертывания Laravel-приложений, а затем узнаем, как можно обойтись и без Forge. Короче говоря, мы узнаем, что делает Forge для организации правильной работы очередей и воркеров на сервере.
Развертываем с помощью Forge
Предполагаю, что вы уже развернули свое приложение в Forge, и сосредоточусь на том, что нужно cделать дальше, чтобы команда queue:work
заработала в фоновом режиме.
Итак, зайдите в Forge, а затем нажмите на вкладку «Queue» на левой панели.
Всё, что нужно для создания фонового воркера, это заполнить форму:
PS: нам не нужны все поля, только самые важные:
- Connection: rabbitmq — название нашего подключения;
- Queue: jobs — в прошлой статье у нас было две очереди: одна называлась
jobs
, а другая —emails
. Создадим воркера для каждой. - Processes: 4 — указываем, сколько фоновых воркеров мы хотим использовать параллельно. В примерах предыдущих статей, мы обрабатывали одну задачу за раз, если же у нас достаточно ресурсов на сервере и если мы хотим обрабатывать очереди быстро, то мы можем сделать столько процессов, сколько захотим.
- Maximum Tries: 3 — здесь мы говорим нашему приложению попытаться обработать одну и туже задачу 3 раза, прежде чем отметить её как проваленную (т.е. отправить в таблицу
failed_jobs
).
Это также зависит от характера ваших приложений. В некоторых вам может потребоваться попытаться обработать одну и ту же задачу несколько раз, прежде чем пометить её как проваленную, в другом, возможно, целесообразнее пометить её так сразу.
Теперь, после того как вы нажмете кнопку «Start worker», он появится в таблице «Active workers»:
Как вы видите, из этой таблицы воркеры можно перезапускать или полностью удалять.
Единственная проблема, которую можно здесь заметить — вам нужно создавать воркера с нуля в случае, если захотите обновить его настройки, даже если если просто нужно поменять количество воркеров.
Что дальше?
После того, как вы создадите воркеры через 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.