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.

"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? Genelliklewww-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.