┌─────────────┐
│ Redis │
│ (pdf队列) │
└──────┬──────┘
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 主服务器 │ │ PDF机器1 │ │ PDF机器2 │
└───────────┘ └───────────┘ └───────────┘
│ │ │
└──────────────────┼──────────────────┘
▼
┌─────────────┐
│ MySQL │
└─────────────┘
mkdir -p /srv/www/math_cms
cd /srv/www/math_cms
git clone https://git.yunzhixue.cn/yms/math_cms.git .
从主服务器拷贝 .env 文件到 /srv/www/math_cms/.env
.env 中的
APP_URL=http://app:8000保持不变,PDF worker 会调用本机的 app 容器
docker-compose.pdf.yml已在项目根目录,clone 后直接可用
cd /srv/www/math_cms
docker compose -f docker-compose.pdf.yml up -d
docker compose -f docker-compose.pdf.yml ps
预期输出:5 个容器都是 Up 状态
docker exec pdf_worker_1 php artisan db:show
docker exec pdf_worker_1 php artisan tinker --execute="dump(Redis::ping());"
# 查看队列长度
docker exec pdf_worker_1 php artisan tinker --execute="echo Redis::llen('queues:pdf');"
# 查看 worker 日志
docker compose -f docker-compose.pdf.yml logs -f pdf-worker-1
在主服务器触发一个 PDF 生成,观察 PDF 机器日志是否有消费记录。
# 查看状态
docker compose -f docker-compose.pdf.yml ps
# 查看日志
docker compose -f docker-compose.pdf.yml logs -f
# 重启
docker compose -f docker-compose.pdf.yml restart
# 停止
docker compose -f docker-compose.pdf.yml down --timeout 120
cd /srv/www/math_cms
git pull origin main
docker compose -f docker-compose.pdf.yml restart
# 查看失败任务
docker exec pdf_worker_1 php artisan queue:failed
# 重试失败任务
docker exec pdf_worker_1 php artisan queue:retry all
# 查看 Laravel 日志
tail -f storage/logs/laravel.log