Cara Install dan Setup Supervisor di OS Linux: Studi Kasus Project Laravel

22 Oktober 2024 22x
Cara Install dan Setup Supervisor di OS Linux: Studi Kasus Project Laravel

Apakah Anda pernah mengalami masalah saat menjalankan background jobs pada aplikasi Laravel Anda? Beberapa proses penting, seperti pengiriman email massal, queue worker, atau scheduled task, tidak bisa diandalkan hanya dengan eksekusi manual. Nah, di sinilah Supervisor hadir sebagai solusi. Pada artikel ini, kita akan membahas cara install dan setup Supervisor di OS Linux, dengan studi kasus aplikasi Laravel. Dengan Supervisor, background jobs bisa berjalan otomatis dan lebih stabil. Yuk, kita mulai!

Apa Itu Supervisor?

Supervisor adalah tool untuk mengelola proses di sistem operasi. Dalam konteks Laravel, Supervisor berguna untuk menjaga worker queue tetap berjalan. Saat worker berhenti atau gagal, Supervisor akan otomatis me-restart, sehingga Anda tidak perlu khawatir tentang task yang tertunda.

Persiapan Awal

Sebelum kita mulai, pastikan Anda sudah memenuhi prasyarat berikut:

  • VPS atau server dengan OS Linux (misalnya Ubuntu atau Debian)
  • Akses root atau user dengan hak sudo
  • Laravel project yang membutuhkan queue worker (contoh: aplikasi yang mengirim email secara massal)
  • Composer dan PHP sudah terinstall

Langkah-Langkah Install dan Setup Supervisor

1. Install Supervisor

Supervisor biasanya tersedia di repository paket Linux. Berikut langkah instalasinya untuk distribusi berbasis Ubuntu/Debian:

sudo apt update
sudo apt install supervisor -y

Setelah instalasi selesai, Supervisor akan otomatis aktif. Anda bisa cek statusnya dengan:

sudo systemctl status supervisor

Pastikan output menunjukkan bahwa Supervisor active (running). Contohnya sebagai berikut:

2. Konfigurasi Supervisor untuk Laravel Queue Worker

Pada Laravel, queue worker biasanya dijalankan dengan perintah:

php artisan queue:work

Namun, kita perlu menyiapkan konfigurasi Supervisor agar perintah ini otomatis dijalankan sebagai service. Ikuti langkah-langkah berikut:

  1. Buat file konfigurasi Supervisor di direktori /etc/supervisor/conf.d/.

    Misalnya, kita buat file dengan nama laravel-worker.conf:

    sudo nano /etc/supervisor/conf.d/laravel-worker.conf
  2. Tambahkan konfigurasi berikut:

    [program:laravel-worker]
    process_name=%(program_name)s_%(process_num)02d
    command=php /var/www/html/laravel-project/artisan queue:work --sleep=3 --tries=3
    autostart=true
    autorestart=true
    user=www-data
    numprocs=1
    redirect_stderr=true
    stdout_logfile=/var/www/html/laravel-project/storage/logs/worker.log

    Penjelasan konfigurasi:

    1. command: Perintah untuk menjalankan queue worker.
    2. autostart=true: Supervisor otomatis menjalankan worker saat server menyala.
    3. autorestart=true: Jika worker gagal, Supervisor akan otomatis me-restart.
    4. user=www-data: User yang menjalankan proses (biasanya sama dengan user web server).
    5. stdout_logfile: Lokasi log file untuk debug jika terjadi error.
       
  3. Simpan dan keluar dari editor nano (Ctrl + O, Enter, lalu Ctrl + X).

3. Aktifkan dan Mulai Supervisor Configuration

Setelah menambahkan konfigurasi, jalankan perintah berikut:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

Anda bisa mengecek status worker dengan:

sudo supervisorctl status

Jika konfigurasi benar, Anda akan melihat status worker dalam kondisi RUNNING.

 

Troubleshooting Supervisor

Jika worker tidak berjalan atau berhenti tiba-tiba, coba cek log berikut:

  • Log Supervisor: /var/log/supervisor/supervisord.log
  • Log Laravel worker: /var/www/html/laravel-project/storage/logs/worker.log

Anda juga bisa menjalankan ulang Supervisor jika terjadi masalah:

sudo systemctl restart supervisor

Testing Queue Worker

Pastikan queue worker bekerja dengan baik. Anda bisa membuat job testing sederhana dengan perintah berikut:

php artisan make:job TestJob

Tambahkan log di dalam job tersebut, lalu masukkan job ke dalam queue:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\Log;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class TestJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     */
    public function handle()
    {
        Log::info('TestJob berhasil dijalankan!');
    }
}

Kirim job ke queue:

php artisan queue:push App\\Jobs\\TestJob

Jika Supervisor dan worker berfungsi dengan benar, Anda akan melihat log "TestJob berhasil dijalankan!" di file log Laravel.

FAQ

  1. Apakah Supervisor hanya bisa digunakan untuk Laravel?

    Tidak. Supervisor bisa digunakan untuk mengelola berbagai proses di server, termasuk aplikasi non-Laravel.

  2. Bagaimana cara menghentikan worker dengan Supervisor?

    Anda bisa menggunakan perintah berikut:

    sudo supervisorctl stop laravel-worker:*
  3. Apakah ada alternatif selain Supervisor?
          Ya, beberapa alternatif lain adalah **systemd services** atau **PM2** (khusus Node.js). Namun, Supervisor lebih mudah digunakan untuk PHP projects seperti Laravel.

 

Kesimpulan

Supervisor adalah solusi efektif untuk mengelola background jobs di aplikasi Laravel. Dengan setup yang tepat, Anda tidak perlu khawatir lagi tentang worker yang berhenti atau gagal. Dalam studi kasus ini, kita melihat bagaimana Supervisor memastikan proses queue berjalan otomatis dan andal di server Linux. Pastikan juga Anda selalu memonitor log untuk mendeteksi masalah lebih awal.

Semoga artikel ini membantu Anda mengoptimalkan project Laravel Anda!

Bagikan