Установка Laravel Horizon на OctoberCMS с помощью плагина vdlp.horizon
OctoberCMS — одна из популярных CMS на базе фреймворка Laravel, предлагающая гибкое управление контентом и множество расширений. Laravel Horizon — удивительный инструмент для мониторинга очередей заданий в Laravel. Именно этот инструмент поможет оптимизировать обработку задач в вашем OctoberCMS. Давайте разберёмся, как правильно установить и настроить Laravel Horizon с использованием плагина vdlp.horizon.
Прежде чем начать установку убедитесь, что у вас имеются ext-pcntl, ext-posix и ext-redis и настроен Супервизор.
Шаг 1: Установка плагина vdlp.horizon
-
Откройте консоль и перейдите в директорию вашего OctoberCMS проекта.
-
Выполните команду для установки плагина:
php artisan plugin:install Vdlp.Horizon
После успешной установки вы должны увидеть сообщение об успешном завершении. Если это так, переходите к шагу 2.
Если вы устанавливаете плагин на Windows, может произойти ошибка Your requirements could not be resolved to an installable set of packages. . Это приосходит потому, что плагин требует для установки наличия ext-pcntl, ext-posix и ext-redis. Чтобы обойти это требование выполните composer require vdlp/oc-horizon-plugin --ignore-platform-reqs
Далее выполните php artisan october:migrate чтобы выполнить все миграции.
Шаг 2: Отключите автоматическое обнаружение laravel/horizon (важно)
Поскольку этот плагин имеет свой собственный HorizonServiceProvider, который расширяет Laravel\Horizon\HorizonServiceProvider, нам нужно предотвратить загрузку Laravel\Horizon\HorizonServiceProvider из-за автообнаружения пакетов в Laravel.
Вы должны добавить опцию dont-discover в файл composer.json вашего проекта, который расположен в корневой директории вашего проекта.
"extra": {
"laravel": {
"dont-discover": [
"laravel/horizon"
]
}
}
ВАЖНО: После добавления этих строк убедитесь, что вы выполнили команду composer update, чтобы применить изменения. Если будет ошибк об обязательном наличии ext-pcntl, ext-posix и ext-redis не забывайте выполнять эту команду с флагом --ignore-platform-reqs. Также вам нужно удалить файл storage/framework/packages.php. Без паники! Этот файл будет создан заново, как только вы загрузите ваш проект.
ВАЖНО: Убедитесь, что файл composer.json загружен на ваш хостинг в PRODUCTION. Фреймворк будет анализировать его, чтобы определить, какие сервис-провайдеры следует игнорировать.
Шаг 3: Публикация ресурсов и конфигурации Horizon
Теперь вам нужно опубликовать конфигурацию и ресурсы Horizon для дальнейшей настройки:
php artisan vendor:publish --tag=horizon-config
Эта команда создаст файл config/horizon.php, в котором вы можете настроить различные параметры Horizon.
Далее обновляем ассеты командами php artisan horizon:install и затем php artisan horizon:publish
Почти готово! Теперь необходимо настроить очереди в config/queue.php:
'redis' => [
'driver' => 'redis',
'connection' => 'horizon', // References: databases.redis.horizon
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => env('QUEUE_RETRY_AFTER', 90),
'block_for' => null,
],
Далее добавляем базу данных horizon в redis конфигурацию в config/databases.php:
'redis' => [
'cluster' => false,
'client' => 'phpredis',
'default' => [
// ..
],
'horizon' => [
'host' => env('HORIZON_REDIS_HOST', '127.0.0.1'),
'password' => env('HORIZON_REDIS_PASSWORD'),
'port' => env('HORIZON_REDIS_PORT', 6379),
'database' => env('HORIZON_REDIS_DATABASE', '1'),
]
],
вновь идём в config/queue.php и ставим по умолчанию драйвер очереди redis:
/*
|--------------------------------------------------------------------------
| Default Queue Driver
|--------------------------------------------------------------------------
|
| The Laravel queue API supports a variety of back-ends via an unified
| API, giving you convenient access to each back-end using the same
| syntax for each one. Here you may set the default queue driver.
|
| Supported: "null", "sync", "database", "beanstalkd",
| "sqs", "iron", "redis"
|
*/
'default' => env('QUEUE_CONNECTION', 'redis'),
далее в файле окружения .env не забываем добавить наши новые переменные:
#
# Queue
#
QUEUE_CONNECTION = "redis"
QUEUE_RETRY_AFTER = 90
#
# Horizon
#
HORIZON_PREFIX = "myproject-local:"
HORIZON_REDIS_HOST = "127.0.0.1"
HORIZON_REDIS_PASSWORD = null
HORIZON_REDIS_PORT = 6379
HORIZON_REDIS_DATABASE = "1"
Ну и включаем в конфигурации Horizon чтобы пользовалась база данных из Redis - horizon config/horizon.php:
/*
|--------------------------------------------------------------------------
| Horizon Redis Connection
|--------------------------------------------------------------------------
|
| This is the name of the Redis connection where Horizon will store the
| meta information required for it to function. It includes the list
| of supervisors, failed jobs, job metrics, and other information.
|
*/
'use' => 'horizon',
Шаг 4: Запуск Horizon
Теперь вы готовы запустить Horizon и начать мониторинг задач в вашем OctoberCMS:
php artisan horizon
Чтобы каждый раз этого не делать, можно создать для супервизора настроечку в etc/supervisor/conf.d/:
[program:<queue-name>-queue]
process_name=%(program_name)s_%(process_num)02d
directory=/<myproject-directory>
command=/<path-to-php>/php /<myproject-directory>/artisan horizon
autostart=true
autorestart=true
user=<user>
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisord/<queue-name>-queue.log
Шаг 5: Аутентификация и безопасность
Чтобы предотвратить несанкционированный доступ к панели управления Horizon, рекомендуется настроить аутентификацию. В файле config/horizon.php найдите строку 'middleware' => ['web'], и добавьте по вашему усмотрению дополнительные middleware, например, для аутентификации.
Заключение
OctoberCMS с Laravel Horizon — отличное сочетание для оптимизации и мониторинга задач. С помощью плагина vdlp.horizon установка и настройка проходит легко и быстро. Не забывайте регулярно обновлять плагины и следить за безопасностью вашего сайта. Впереди вас ждут высокопроизводительные и оптимизированные веб-приложения на основе OctoberCMS!