개발 환경 | 도구/서버 | 인프라 | 배포 | 운영

[Laravel] 프로세스 관리: systemd → Supervisor 이관 가이드

알쓸신개 2024. 11. 8. 16:02

1. systemd 서비스 구성 (초기 설정)

1-1. Laravel Web 서버 서비스

sudo nano /etc/systemd/system/laravel-web.service
[Unit]
Description=Laravel Web Server
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/html
ExecStart=/usr/bin/php artisan serve --host=0.0.0.0 --port=8000
Restart=always

[Install]
WantedBy=multi-user.target

1-2. Queue Worker 서비스

sudo nano /etc/systemd/system/laravel-worker.service
[Unit]
Description=Laravel Queue Worker
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/html
ExecStart=/usr/bin/php artisan queue:work
Restart=always

[Install]
WantedBy=multi-user.target

1-3. Scheduler 서비스

sudo nano /etc/systemd/system/laravel-scheduler.service
[Unit]
Description=Laravel Scheduler
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/html
ExecStart=/bin/bash -c 'while true; do /usr/bin/php artisan schedule:run --verbose --no-interaction; sleep 60; done'
Restart=always

[Install]
WantedBy=multi-user.target

1-4. 서비스 활성화 및 실행

sudo systemctl daemon-reload
sudo systemctl enable laravel-web.service
sudo systemctl enable laravel-worker.service
sudo systemctl enable laravel-scheduler.service

sudo systemctl start laravel-web.service
sudo systemctl start laravel-worker.service
sudo systemctl start laravel-scheduler.service

1-5. 문제 발생 시 수동 재시작

sudo systemctl restart laravel-web.service
sudo systemctl restart laravel-worker.service
sudo systemctl restart laravel-scheduler.service

2. Supervisor로 전환 (권한 오류, 유연한 관리 대응)

2-1. Supervisor 구성 파일 생성

sudo nano /etc/supervisor/conf.d/laravel-all.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/html/your_project/artisan queue:work --timeout=1000 --memory=512 --tries=3
directory=/var/www/html/your_project
user=www-data
group=www-data
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/worker.log
environment=HOME="/var/www",DISPLAY=":0",CHROME_PATH="/home/www-data/.cache/puppeteer/chrome/linux-*/chrome-linux64/chrome",PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true

[program:laravel-scheduler]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/html/your_project/artisan schedule:work
directory=/var/www/html/your_project
user=www-data
group=www-data
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/scheduler.log

[program:laravel-web]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php -S 0.0.0.0:8000 -t /var/www/html/your_project/public
directory=/var/www/html/your_project
user=www-data
group=www-data
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/web.log

2-2. Supervisor 서비스 적용

sudo supervisorctl stop all
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all

3. 권한 설정 (nproc 제한 해제)

Supervisor 관리 사용자 www-data의 프로세스 수 제한 해제:

sudo nano /etc/security/limits.conf
www-data soft nproc 65535
www-data hard nproc 65535

설정 후 시스템 재시작 필요