沒什麼教學成份,純個人記錄
docker exec -it <php-docker-name> sh
如果你docker是Ubuntu / Debian
apt-get install -y supervisor
如果是 Alpine Linux
apk add --no-cache supervisor
安裝好之後做設定
mkdir -p /var/log/supervisor
mkdir -p /etc/supervisor.d
cat > /etc/supervisor.d/horizon.ini << 'EOF'
[program:horizon]
process_name=%(program_name)s
command=php /www/domain.com/artisan horizon
directory=/www/domain.com/
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/horizon.log
stopwaitsecs=3600
EOF
command 和 directory 這兩行填上自己的docker 中 Laravel folder 位置
//reload
supervisorctl reread
supervisorctl update
//start Horizon
supervisorctl start horizon
//check status
supervisorctl status
前往
https://{Laravel_app_domain}/horizon/dashboard
這樣就能查看了horizon狀況,見到Active 就成功了
進階:Docker 容器持久化 docker-compose + Supervisor + Horizon
# 進入應用程式目錄(根據實際路徑調整)
cd /opt/1panel/apps/php8/laravelcom
# 建立目錄
mkdir -p supervisor
mkdir -p scripts
# 建立 Supervisor 設定檔
cat > supervisor/horizon.ini << 'EOF'
[program:horizon]
process_name=%(program_name)s
command=php /www/domain.com/artisan horizon
directory=/www/domain.com
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/horizon.log
stopwaitsecs=3600
EOF
# 建立啟動腳本
cat > scripts/start.sh << 'EOF'
#!/bin/sh
set -e
echo "Installing supervisor..."
apk add --no-cache supervisor
echo "Creating directories..."
mkdir -p /var/log/supervisor
mkdir -p /etc/supervisor.d
echo "Copying supervisor config..."
cp /opt/supervisor/horizon.ini /etc/supervisor.d/horizon.ini
echo "Starting supervisord in background..."
supervisord -c /etc/supervisord.conf
echo "Waiting for supervisor to start..."
sleep 2
echo "Supervisor started, now starting PHP-FPM..."
exec php-fpm -F
EOF
# 設定執行權限
chmod +x scripts/start.sh
# 驗證檔案
ls -la supervisor/
ls -la scripts/
cat supervisor/horizon.ini
cat scripts/start.sh
使用docker-compose.yml
networks:
1panel-network:
external: true
services:
deiva888com:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
image: ${IMAGE_NAME}
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- 127.0.0.1:${PANEL_APP_PORT_HTTP}:9000
restart: always
volumes:
- ${PANEL_WEBSITE_DIR}:/www/
- ./conf/php.ini:/usr/local/etc/php/php.ini
- ./conf/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf
- ./log:/var/log/php
- ./composer:/tmp/composer
- ./extensions:/php/extensions
- ./supervisor:/opt/supervisor
- ./scripts/start.sh:/start.sh
entrypoint: ["/start.sh"]
關鍵新增的內容:
- ./supervisor:/opt/supervisor
- ./scripts/start.sh:/start.sh
entrypoint: ["/start.sh"]
日常管理指令
# 查看 Horizon 狀態
docker exec -it docker_name supervisorctl status
# 重新啟動 Horizon
docker exec -it docker_name supervisorctl restart horizon
# 查看 Horizon 即時記錄
docker exec -it docker_name supervisorctl tail -f horizon
# 或者查看記錄檔日常管理指令
```bash
docker exec -it docker_name cat /var/log/supervisor/horizon.log
/opt/1panel/apps/php8/project_name/
├── supervisor/
│ └── horizon.ini # Supervisor 設定(持久化)
├── scripts/
│ └── start.sh # 容器啟動腳本(持久化)
├── conf/
│ ├── php.ini
│ └── php-fpm.conf
└── docker-compose.yml # Docker Compose 設定
儲存這份文件,以後部署其他Project也可以參考!