Rumusan Masalah
Seringkali programmer pemula bingung bagaimana menjalankan Job Queue Worker pada server production? bagaimana cara menjalankan php artisan queue:work pada server production?
Pada contoh kasus ini sebenarnya ada banyak cara untuk menyelesaikannya, dua diantaranya kita bisa menggunakan Supervisor atau Crontab. Meskipun crontab bisa digunakan untuk menjalankan worker, Supervisor adalah solusinya yang lebih baik untuk production, karena :
Memastikan worker tetap berjalan
Mudah monitoring dan restart worker
Menghindari masalah seperti worker yang berhenti tiba-tiba.
Pada contoh kali ini kita akan coba implementasikan Supervisor pada server Centos 7 untuk aplikasi laravel. berikut tutorialnya :
1. Pastikan Supervisor Terinstal
Pastikan Supervisor sudah terinstal dengan menjalankan perintah :
sudo yum install supervisor
Setelah instalasi, pastikan service Supervisor aktif dan berjalan :
sudo systemctl start supervisord
sudo systemctl enable supervisord
2. Konfigurasi Supervisor
File konfigurasi utama Supervisor berada di /etc/supervisord.conf. Buka file ini untuk menambahkan konfigurasi worker Laravel:
sudo nano /etc/supervisord.conf
Di dalam file ini, cari bagian [include]. Secara default, baris berikut akan ada:
[include]
files = supervisord.d/*.ini
Ini berarti Supervisor akan memuat semua file konfigurasi program dari direktori /etc/supervisord.d/ dengan ekstensi .ini
3. Buat Konfigurasi Worker Laravel
Buat file konfigurasi baru untuk worker Laravel di direktori /etc/supervisord.d/. Contoh:
sudo nano /etc/supervisord.d/laravel-worker.ini
Tambahkan konfigurasi berikut ke dalam file:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=your_user
numprocs=1
redirect_stderr=true
stdout_logfile=/path/to/your/project/storage/logs/worker.log
Penjelasan :
command: Perintah untuk menjalankan worker Laravel.
autostart: Memastikan worker mulai secara otomatis saat Supervisor dijalankan.
autorestart: Memastikan worker di-restart otomatis jika berhenti.
user: User yang menjalankan worker (sesuaikan dengan user server anda).
numprocs: Jumlah proses worker yang dijalankan.
stdout_logfile: Lokasi file log untuk output worker.
/path/to/your/project silahkan diganti dengan direktori aplikasi anda.
your_user silahkan diganti dengan user yang terdaftar dengan sistem centos 7 anda.
Jika tidak memerlukan worker dijalankan sebagai user khusus, silahkan hapus baris user=your_user dari konfigurasi. Supervisor akan menjalankan worker sebagai user yang sama dengan proses Supervisor (biasanya root).
4. Reload dan Jalankan Supervisor
Setelah membuat konfigurasi, reload Supervisor untuk menerapkan perubahan:
sudo supervisorctl reread
sudo supervisorctl update
Jalankan worker Laravel:
sudo supervisorctl start laravel-worker:*
5. Periksa Status Worker
Untuk memastikan worker berjalan dengan baik, periksa statusnya:
sudo supervisorctl status
Jika worker berjalan, kita akan melihat output seperti ini:
laravel-worker:laravel-worker_00 RUNNING pid 12345, uptime 0:00:10
6. Log dan Troubleshooting
Log Supervisor: Cek log Supervisor untuk melihat pesan error atau informasi lainnya:
sudo tail -f /var/log/supervisor/supervisord.log
Log Worker: Cek log worker Laravel yang telah anda tentukan di stdout_logfile (misalnya, /path/to/your/project/storage/logs/worker.log).
7. Restart Worker
Jika mengubah konfigurasi atau memperbarui kode Laravel, restart worker dengan perintah:
sudo supervisorctl restart laravel-worker:*
8. Pastikan Laravel Queue Worker Berjalan dengan Benar
Pastikan file .env sudah di-update dengan konfigurasi terbaru (seperti password, email, dll).
Bersihkan cache Laravel:
php artisan config:cache
php artisan config:clear
php artisan cache:clear
Dengan mengikuti langkah-langkah di atas, worker Laravel seharusnya berjalan dengan baik di CentOS 7 menggunakan Supervisor.