Cài Đặt Supervisor trên Amazon Linux và Cấu Hình Laravel Queue

· 4 min read

Trong môi trường production, Laravel Queue worker cần chạy liên tục trong background. Nếu process bị dừng do lỗi hoặc server restart, queue sẽ ngừng hoạt động. Supervisor là hệ thống quản lý process giúp tự động restart worker nếu nó dừng.

Bài viết này hướng dẫn bạn cài đặt Supervisor trên Amazon Linux (Amazon Linux 2 hoặc 2023) và cấu hình để quản lý Laravel Queue.

Bước 1: Cài Đặt Supervisor

Trên Amazon Linux, bạn có thể cài Supervisor qua yum hoặc dnf.

Đầu tiên, cập nhật danh sách package:

sudo yum update -y

Nếu bạn đang dùng Amazon Linux 2, bạn có thể cần bật EPEL repository trước (nếu không tìm thấy package):

sudo amazon-linux-extras install epel -y

Cài đặt Supervisor:

sudo yum install supervisor -y
# Hoặc trên Amazon Linux 2023:
# sudo dnf install supervisor -y

Khởi động service và enable để chạy khi khởi động hệ thống:

sudo systemctl start supervisord
sudo systemctl enable supervisord

Kiểm tra trạng thái:

sudo systemctl status supervisord

Bước 2: Cấu Hình Supervisor Cho Laravel Worker

Supervisor lưu file cấu hình tại /etc/supervisord.conf hoặc trong thư mục /etc/supervisord.d/ (tùy phiên bản, chúng ta thường tạo file .ini riêng trong thư mục này).

Tạo file cấu hình mới cho worker:

sudo nano /etc/supervisord.d/laravel-worker.ini

Paste nội dung sau (thay đường dẫn project phù hợp):

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

Giải Thích Cấu Hình:

  • command: Lệnh chạy queue. Thay /var/www/html/my-project bằng đường dẫn thực tế của project.
  • user: User chạy process. Trên Amazon Linux thường là ec2-user hoặc webapp (đảm bảo user này có quyền ghi vào thư mục storage).
  • numprocs: Số worker chạy song song (ở đây là 2).
  • autostart/autorestart: Tự động start khi Supervisor khởi động và tự động restart khi bị crash.
  • stopwaitsecs: Thời gian chờ (tính bằng giây) để process kết thúc gracefully trước khi bị kill (quan trọng nếu job chạy lâu).

Bước 3: Áp Dụng Cấu Hình

Mỗi khi bạn thêm hoặc sửa file cấu hình, bạn cần báo cho Supervisor đọc lại:

sudo supervisorctl reread
sudo supervisorctl update

Lệnh reread đọc file config, và update sẽ start các process mới.

Bước 4: Kiểm Tra và Quản Lý

Để xem trạng thái các worker:

sudo supervisorctl status

Output sẽ trông như thế này:

laravel-worker:laravel-worker_00   RUNNING   pid 1234, uptime 0:00:10
laravel-worker:laravel-worker_01   RUNNING   pid 1235, uptime 0:00:10

Các lệnh hữu ích khác:

# Restart tất cả worker
sudo supervisorctl restart all

# Stop tất cả worker
sudo supervisorctl stop all

Lưu Ý Quan Trọng

  1. Deploy Code Mới: Khi deploy code mới, đừng quên chạy lệnh php artisan queue:restart. Supervisor sẽ không biết code đã thay đổi trừ khi bạn restart queue worker. Lệnh này ra tín hiệu cho worker thoát (gracefully), và Supervisor sẽ tự động restart chúng với code mới.
  2. Quyền Truy Cập: Đảm bảo file worker.log hoặc thư mục chứa nó có quyền ghi cho user được cấu hình trong user=....

Với Supervisor, hệ thống worker của bạn sẽ chạy ổn định và tự phục hồi trên Amazon Linux.

Bình luận