Supervisor ile Laravel’de Çoklu Queue Worker Kurulumu (10 Worker Örneğiyle)

"Supervisor ile Laravel’de Çoklu Queue Worker Kurulumu (10 Worker Örneğiyle)"

Laravel projelerinde arka planda çalışan işlemleri (örneğin e-posta gönderimi, bildirimler, cron işler vs.) Queue (Kuyruk) sistemi ile daha sağlıklı ve performanslı bir şekilde yönetebiliriz. Ancak php artisan queue:work komutunu manuel çalıştırmak yerine bu işi sistemsel olarak yöneten bir yapı gereklidir. İşte burada Supervisor devreye girer.

Bu yazıda Supervisor ile Laravel projenizde nasıl 10 adet worker paralel çalıştırırsınız, adım adım ve pratik şekilde açıklayacağım.


Supervisor Nedir?

Supervisor, Unix tabanlı sistemlerde arkaplan işlemlerini (daemon) izleyen, otomatik başlatan, izleyen ve gerektiğinde yeniden başlatan bir işlemdir.

Yani queue:work gibi komutları otomatik olarak arkaplanda çalıştırır, düşerse tekrar kaldırır, log tutar ve performans takibini sağlar.


Kurulum ve Yapılandırma

1. Supervisor'ı Kur

Ubuntu sistemlerde:

sudo apt update
sudo apt install supervisor -y

2. Laravel Projen için Konfigürasyon Dosyası Oluştur

Config dosyaları /etc/supervisor/conf.d/ altında bulunur.

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Aşağıdaki örnek yapılandırmayı dosyaya yapıştır:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:work
directory=/var/www/laravel-proje-yolunuzu-yazin
autostart=true
autorestart=true
user=www-data
numprocs=10
redirect_stderr=true
stdout_logfile=/var/log/laravel-worker.log

Açıklamalar:

  • process_name: Her worker'a özel isim verir. Örn: laravel-worker_00, laravel-worker_01, ...

  • numprocs=10: 10 tane worker başlatır.

  • command: Çalıştırılacak komut (Laravel'in kuyruğu).

  • directory: Laravel projenin bulunduğu klasör.

  • user: Hangi kullanıcı çalıştıracak? Genellikle www-data.

  • stdout_logfile: Loglar bu dosyaya yazılır. Hataları takip edebilirsin.


3. Supervisor’u Yeniden Yükle

sudo supervisorctl reread
sudo supervisorctl update

4. Worker’ları Başlat

sudo supervisorctl start laravel-worker:*

Veya yeniden başlatmak için:

sudo supervisorctl restart laravel-worker:*

5. Durumu Kontrol Et

sudo supervisorctl status

Çıktı şöyle olmalı:

laravel-worker_00   RUNNING   pid 1234, uptime 0:12:34
laravel-worker_01   RUNNING   pid 1235, uptime 0:12:34
...
laravel-worker_09   RUNNING   pid 1243, uptime 0:12:34

Laravel Queue Yapılandırması

.env dosyana bu satırları eklediğinden emin ol:

QUEUE_CONNECTION=redis ve ya database

Eğer farklı kuyruğa göre (priority gibi) çalışacak worker’lar istiyorsan ek config yazabilirsin:

[program:laravel-high-priority]
command=php artisan queue:work --queue=high
...

[program:laravel-low-priority]
command=php artisan queue:work --queue=low
...

Neden 10 Worker?

  • Yüksek trafikli projelerde aynı anda çok sayıda kuyruğa iş düşer (örneğin bildirim, e-posta, video işleme vs.).

  • Laravel, worker’ları otomatik olarak işlere yönlendirir.

  • Redis ile birlikte kullanıldığında iş dağılımı daha da verimli olur.

  • Worker sayısını CPU/RAM durumuna göre ayarlamak gerekir. 10 genel olarak orta-yüksek sistemlerde idealdir.


Log ve Hata Takibi

Logları görmek için:

tail -f /var/log/laravel-worker.log

Hata ayıklamak için can kurtarıcıdır. Eğer worker durduysa buradan neden düştüğünü anlayabilirsin.


Kapanış

Supervisor, Laravel’in queue sistemini gerçek bir background servis haline getirir. Doğru yapılandırmayla performans artar, sistem stabil çalışır ve projeni büyük ölçekli trafiklere hazırlamış olursun.


Ekstra İpucu:

  • php artisan queue:restart komutu ile çalışan tüm worker’ları otomatik yeniden başlatabilirsin. Kod güncellemesi sonrası şarttır.

  • queue:retry all ile failed jobs tekrar denettir.

Aykhan Gasimzade Aykhan Gasimzade verified icon
Full Stack Developer

Merhaba! Ben Aykhan, 1999 doğumlu bir Azerbaycanlıyım ve 2017 yılından bu yana programlamayla ilgileniyorum. Teknolojinin büyülü dünyası beni her zaman etkilemiştir ve bu merakımı kendi blogumda paylaşarak daha geniş bir kitleyle buluşturmayı amaçlıyorum.