مقاله

تنظیم Redis به‌عنوان queue driver، نصب Horizon، dashboard، worker scaling و نکات deploy روی Ubuntu.

Redis Queue و Laravel Horizon — راه‌اندازی production

Redis Queue و Laravel Horizon — راه‌اندازی production

database queue برای شروع خوب است؛ وقتی صدها job در دقیقه دارید، Redis + Horizon استاندارد صنعتی Laravel است. Horizon dashboard زنده، retry، throughput و failed jobs — بدون حدس زدن «worker زنده است یا نه».

چرا Redis برای Queue؟

  • سریع in-memory
  • atomic pop/push
  • همان Redis برای cache — دو نقش
  • Horizon فقط روی redis driver

تنظیم

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_CONNECTION=redis
// config/queue.php — connection redis
'redis' => [
    'driver' => 'redis',
    'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
    'queue' => env('REDIS_QUEUE', 'default'),
    'retry_after' => 90,
],

نصب Horizon

composer require laravel/horizon
php artisan horizon:install
php artisan migrate

مسیر dashboard: /horizon — با Gate محافظت کنید.

Gate::define('viewHorizon', fn (User $user) => $user->is_admin);

اجرای Horizon

php artisan horizon

جایگزین queue:work برای redis — خودش workerها را balance می‌کند.

Supervisor production

[program:horizon]
command=php /var/www/app/artisan horizon
autostart=true
autorestart=true
user=www-data

بعد از deploy: php artisan horizon:terminate — graceful restart.

چند queue

// config/horizon.php environments
'supervisor-1' => [
    'queue' => ['default', 'emails'],
    'balance' => 'auto',
    'maxProcesses' => 10,
],

job سنگین queue جدا — onQueue('videos') در Job.

مانیتورینگ

Horizon: wait time، jobs per minute، failed. هشدار اگر queue انباشته شد.

اشتباهات

  • Horizon و queue:work همزمان روی یک queue
  • فراموش horizon:terminate بعد از deploy
  • Redis بدون persistence در داده حیاتی — AOF/RDB
  • dashboard عمومی بدون auth

جمع‌بندی

production queue = redis + horizon + supervisor. مقدمه: Queue. خطا: failed jobs.

Deploy queue