服务地址:
http://<内网IP>:5019
# 启动所有服务
docker compose up -d
# 停止所有服务
docker compose down
# 重启所有服务
docker compose restart
# 重启单个服务
docker compose restart app
docker compose restart queue
docker compose restart pdf-worker
# 查看运行状态
docker compose ps
# 查看所有日志(实时)
docker compose logs -f
# 查看指定服务日志
docker compose logs -f app # Web 服务
docker compose logs -f queue # 队列服务
docker compose logs -f pdf-worker # PDF 生成服务
# 查看最近 100 行日志
docker compose logs --tail=100 app
# 查看 Laravel 日志
tail -f storage/logs/laravel.log
# 1. 拉取最新代码
git pull
# 2. 重新构建并启动
docker compose down
docker compose build --no-cache
docker compose up -d
# 或一键操作
docker compose up -d --build
# 进入容器清理 Laravel 缓存
docker exec math_cms_app php artisan optimize:clear
# 重启队列(代码更新后必须)
docker compose restart queue pdf-worker
# 清理临时文件
rm -rf storage/app/temp/*
# 查看容器资源使用
docker stats
# 进入容器调试
docker exec -it math_cms_app sh
# 测试数据库连接
docker exec math_cms_app php artisan db:show
# 测试 Redis 连接
docker exec math_cms_app php artisan tinker --execute="Redis::ping()"
# 测试 Chrome(PDF 生成)
docker exec math_cms_app chromium-browser --version
# 查看队列状态
docker exec math_cms_app php artisan queue:monitor
# CPU 满载 - 停止 PDF 服务
docker compose stop pdf-worker
# 强制杀死所有 Chrome 进程
docker exec math_cms_pdf pkill -9 chromium
# 清理临时文件
docker exec math_cms_pdf rm -rf /tmp/chrome-profile-*
docker exec math_cms_pdf rm -rf /tmp/exam_pdf_*
# 重启 PDF 服务
docker compose restart pdf-worker
# 检查 Web 服务
curl http://localhost:5019/health
# 检查容器状态
docker compose ps
# 检查容器健康状态
docker inspect --format='{{.State.Health.Status}}' math_cms_app
# 备份日志
cp -r storage/logs storage/logs_backup_$(date +%Y%m%d)
# 备份上传文件
cp -r storage/app/public storage/app/public_backup_$(date +%Y%m%d)
# 清理临时文件(每小时)
0 * * * * cd /path/to/math_cms && rm -rf storage/app/temp/* 2>/dev/null
# 清理旧日志(每天凌晨 3 点)
0 3 * * * find /path/to/math_cms/storage/logs -name "*.log" -mtime +7 -delete
# 查看资源限制
docker inspect math_cms_pdf --format='{{.HostConfig.Memory}}'
# 临时调整资源限制
docker update --cpus=1 --memory=1g math_cms_pdf
┌─────────────────────────────────────────────────┐
│ Docker Compose │
│ ┌─────────────┐ ┌───────────┐ ┌─────────────┐ │
│ │ math_cms_app│ │math_cms_ │ │math_cms_pdf │ │
│ │ (Web) │ │ queue │ │(PDF Worker) │ │
│ │ :5019 │ │ │ │ CPU:2 Mem:2G│ │
│ └─────────────┘ └───────────┘ └─────────────┘ │
└─────────────────────────────────────────────────┘
│ │ │
└───────────────┴───────────────┘
│
┌──────────────┴──────────────┐
▼ ▼
┌──────────┐ ┌──────────┐
│ Redis │ │ MySQL │
│ (阿里云) │ │ (阿里云) │
└──────────┘ └──────────┘
如有问题请联系开发团队。
docker exec math_cms_app grep -A 10 "exam-answer-analysis\|ERROR" storage/logs/laravel.log | tail -50
tail -200 storage/logs/laravel.log
# 清空日志
docker exec math_cms_app truncate -s 0 storage/logs/laravel.log
# 实时监控(自动刷新)
docker exec math_cms_app tail -f storage/logs/laravel.log
# 组合:先显示最近 200 行,然后实时监控
docker exec math_cms_app tail -200f storage/logs/laravel.log
问题1: PDF生成超时(50秒后失败)
问题4: 公式显示为原始 LaTeX 文本
问题2: dbus 连接错误
Failed to connect to the bus 错误问题3: Chrome 进程积累导致 CPU 满载
解决:
# 强制清理Chrome进程
docker exec math_cms_pdf pkill -9 chromium
# 清理临时文件
docker exec math_cms_pdf rm -rf /tmp/chrome-profile-* /tmp/exam_*
# 重启PDF服务
docker compose restart pdf-worker
# 查看PDF生成日志
docker exec math_cms_app grep -i "ExamPdfExportService" storage/logs/laravel.log | tail -50
# 查看KaTeX渲染日志
docker exec math_cms_app grep -i "KatexRenderer\|LaTeX.*预渲染" storage/logs/laravel.log | tail -20
# 测试Node.js KaTeX是否正常工作
docker exec math_cms_app echo '$x^2 + y^2 = z^2$' | node /app/scripts/katex-render.js
# 测试Chrome是否正常工作
docker exec math_cms_pdf chromium-browser --headless --disable-gpu --no-sandbox --print-to-pdf=/tmp/test.pdf https://www.baidu.com
# 检查Chrome版本
docker exec math_cms_pdf chromium-browser --version
# 检查Node.js版本
docker exec math_cms_app node --version
# 检查dbus状态
docker exec math_cms_pdf pgrep -a dbus