部署运维与故障排查
汇总 DoraCMS Docker 部署后的日常运维要点、备份策略与常见故障排查步骤,整理自仓库的 DOCKER_DEPLOYMENT.md 与 DOCKER_SETUP_SUMMARY.md。
TL;DR
- 健康检查:
docker compose ps+curl http://localhost:8080/api/health - 备份优先:数据库卷(MongoDB/MariaDB)与
app-uploads,结合scripts/backup.sh做定时 - 排查顺序:日志 → 端口占用 → 环境变量 → 初始化容器状态
健康检查
- 查看整体状态:
docker compose ps - 应用健康接口:
curl http://localhost:8080/api/health - MongoDB:
docker compose exec mongodb mongosh --eval "db.adminCommand('ping')" - MariaDB:
docker compose exec mariadb healthcheck.sh --connect - Redis:
docker compose exec redis redis-cli ping
Compose 内置健康检查示例:
yaml
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8080/api/health']
interval: 30s
timeout: 10s
retries: 3
start_period: 40s日志与监控
bash
# 查看全部/单个服务日志
docker compose logs
docker compose logs -f eggcms-app
docker compose logs --tail=100 mongodb
# 应用容器内日志路径
docker compose exec eggcms-app ls /app/server/logs
tail -f /app/server/logs/egg-web.log
tail -f /app/server/logs/common-error.log- 日志轮转:EggJS 默认按日轮转,保留最近 7 天
- 建议将日志收集到集中式系统(ELK/Loki)并配置告警
备份与恢复
MongoDB
bash
# 备份
docker compose exec mongodb mongodump \
--username=eggcms --password=请替换 \
--authenticationDatabase=doracms3 \
--db=doracms3 --archive > mongodb.archive
# 恢复
cat mongodb.archive | docker compose exec -T mongodb mongorestore --archive --nsInclude=doracms3.*MariaDB
bash
# 备份
docker compose exec mariadb mariadb-dump \
-u eggcms -p请替换 doracms3 > mariadb-backup.sql
# 恢复
cat mariadb-backup.sql | docker compose exec -T mariadb mariadb -u eggcms -p请替换 doracms3上传文件
bash
# 备份上传目录
docker run --rm -v egg-cms_app-uploads:/data -v $(pwd)/backups:/backup \
alpine tar czf /backup/app-uploads-$(date +%Y%m%d).tar.gz /data建议结合 scripts/backup.sh 配置定时任务(如 0 2 * * *)并存储异地备份。
常见问题排查
容器无法启动
- 查看日志:
docker compose logs eggcms-app - 检查端口占用:
lsof -i :8080、:27017、:3306 - 必要时重建镜像:
docker compose build --no-cache
数据库连接失败
- 检查服务:
docker compose ps mongodb/mariadb - 验证网络:
docker compose exec eggcms-app ping mongodb - 确认环境变量:
docker compose exec eggcms-app env | grep DATABASE
初始化失败
- 查看初始化日志:
docker compose logs mongodb-init/mariadb-init - 重新执行:
docker compose up -d --force-recreate mongodb-init
权限/磁盘不足
- 检查文件权限:
docker compose exec eggcms-app ls -la /app/server/logs - 检查资源占用:
docker stats,必要时在docker-compose.yml中增加内存限制
生产环境清单
- 修改所有默认密码与密钥(APP_KEYS、SESSION_SECRET、数据库/Redis)
- 关闭数据库端口对公网的暴露,启用 HTTPS 与防火墙
- 配置 CORS 与域名白名单:
CORS_ORIGINS、DOMAIN_WHITELIST - 开启 Redis 缓存,使用
NODE_ENV=production - 持续监控:健康检查、资源指标、错误日志;设定告警策略
常见问题 FAQ
Redis 报错连接失败怎么办?
使用docker compose exec redis redis-cli ping检查连通性,确认.env中主机与端口一致,并确保防火墙未阻断。日志堆积影响磁盘怎么办?
利用容器日志轮转配置或将日志收集到外部系统(如 ELK/Loki),定期清理宿主机上的app-logs卷。恢复备份时需要停机吗?
建议在低峰期进行,恢复前先停止应用容器以避免写入冲突,恢复完成后再启动并检查健康状态。