Гид по установке Laravel Horizon на OctoberCMS с использованием плагина Vdlp.Horizon

Как установить Laravel Horizon на OctoberCMS с помощью плагина Vdlp.Horizon?

Установка 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

  1. Откройте консоль и перейдите в директорию вашего OctoberCMS проекта.

  2. Выполните команду для установки плагина:

    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!