Cài Đặt Supervisor trên Amazon Linux và Cấu Hình Laravel Queue
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-projectbằng đường dẫn thực tế của project. - user: User chạy process. Trên Amazon Linux thường là
ec2-userhoặcwebapp(đảm bảo user này có quyền ghi vào thư mụcstorage). - 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
- 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. - Quyền Truy Cập: Đảm bảo file
worker.loghoặc thư mục chứa nó có quyền ghi cho user được cấu hình tronguser=....
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.