====== 🔧 DV IT Infrastructure Platform - 故障排查指南 ====== **更新日期**: 2025年1月 **项目**: DV IT Infrastructure Platform **基于**: 生产环境实际故障排查经验 **VPS**: 156.67.214.225 ----- ===== 🎯 故障排查概述 ===== ==== 排查原则 ==== * **系统性排查**: 从网络→容器→服务→应用逐层排查 * **日志优先**: 优先查看容器和服务日志 * **配置验证**: 检查配置文件和环境变量 * **网络隔离**: 验证Docker网络和Traefik路由 ==== 常用命令 ==== # 查看所有容器状态 docker ps -a # 查看容器日志 docker logs # 查看网络 docker network ls docker network inspect # 查看Traefik路由 docker logs traefik # 检查端口 netstat -tlnp | grep :80 netstat -tlnp | grep :443 ----- ===== 🚨 常见故障及解决方案 ===== ==== 1. 服务无法通过域名访问 ==== ===== 症状 ===== * 域名返回 404 或连接超时 * 直接IP访问正常,域名访问异常 ===== 排查步骤 ===== ==== 1. 检查Traefik容器状态 ==== docker ps | grep traefik docker logs traefik ==== 2. 检查Traefik labels配置 ==== # 检查容器是否配置了正确的labels docker inspect | grep -A 10 -B 5 "Labels" ==== 3. 检查网络连接 ==== # 检查容器是否在traefik-network中 docker network inspect traefik-network # 检查容器间网络连通性 docker exec -it ping traefik ==== 4. 检查SSL证书 ==== # 检查acme.json权限 ls -la /opt/discountvapor-it/traefik/acme.json # 检查证书内容 docker exec traefik ls -la /letsencrypt/ ===== 解决方案 ===== ==== 问题1: 容器未加入traefik-network ==== # 将容器加入网络 docker network connect traefik-network # 重启容器 docker restart ==== 问题2: Traefik labels配置错误 ==== # 正确的labels配置示例 labels: - "traefik.enable=true" - "traefik.http.routers.service.rule=Host(`domain.oasisvape.co.nz`)" - "traefik.http.routers.service.entrypoints=websecure" - "traefik.http.routers.service.tls.certresolver=letsencrypt" - "traefik.http.services.service.loadbalancer.server.port=" - "traefik.docker.network=traefik-network" ==== 问题3: SSL证书权限问题 ==== # 修复acme.json权限 chmod 600 /opt/discountvapor-it/traefik/acme.json chown 1000:1000 /opt/discountvapor-it/traefik/acme.json # 重启Traefik docker restart traefik ----- ==== 2. ERPNext 404/500 错误 ==== ===== 症状 ===== * ERPNext返回404或500错误 * 数据库连接失败 * 前端无法加载 ===== 排查步骤 ===== ==== 1. 检查ERPNext容器状态 ==== docker ps | grep erpnext docker logs discountvapor-it-frontend-1 docker logs discountvapor-it-backend-1 ==== 2. 检查数据库连接 ==== # 检查MariaDB容器 docker logs discountvapor-it-database-1 # 检查数据库连接 docker exec -it discountvapor-it-backend-1 bench doctor ==== 3. 检查Redis连接 ==== # 检查Redis容器 docker logs discountvapor-it-redis-cache-1 docker logs discountvapor-it-redis-queue-1 ===== 解决方案 ===== ==== 问题1: 数据库密码错误 ==== # 检查.env文件中的DB_PASSWORD cat /opt/discountvapor-it/.env # 重新配置数据库连接 docker exec -it discountvapor-it-configurator-1 bench set-config -g db_host database docker exec -it discountvapor-it-configurator-1 bench set-config -gp db_port 3306 ==== 问题2: 权限问题 ==== # 修复数据目录权限 chown -R 1000:1000 /opt/discountvapor-it/data/erpnext/ # 重启ERPNext服务 docker compose -f docker-compose-erpnext.yml restart ==== 问题3: 配置问题 ==== # 重新运行配置器 docker compose -f docker-compose-erpnext.yml up configurator # 重启所有ERPNext服务 docker compose -f docker-compose-erpnext.yml restart ----- ==== 3. n8n 登录页面异常 ==== ===== 症状 ===== * n8n登录页面显示异常 * 无法正常登录 * Webhook URL配置错误 ===== 排查步骤 ===== ==== 1. 检查n8n配置 ==== docker logs discountvapor-it-n8n-1 docker inspect discountvapor-it-n8n-1 | grep -A 20 "Env" ==== 2. 检查N8N_HOST配置 ==== # 检查环境变量 docker exec -it discountvapor-it-n8n-1 env | grep N8N ===== 解决方案 ===== ==== 问题1: N8N_HOST配置错误 ==== # 正确的n8n配置 environment: - N8N_HOST=n8n.oasisvape.co.nz - N8N_PORT=5678 - WEBHOOK_TUNNEL_URL=https://n8n.oasisvape.co.nz ==== 问题2: 数据库连接问题 ==== # 检查PostgreSQL连接 docker exec -it discountvapor-it-n8n-1 ping strapi_postgres # 检查数据库schema docker exec -it strapi_postgres psql -U strapi_user -d strapi_db -c "\dn" ----- ==== 4. DokuWiki 安装页面问题 ==== ===== 症状 ===== * DokuWiki显示安装页面 * 主页面返回404 * 权限问题 ===== 排查步骤 ===== ==== 1. 检查DokuWiki配置 ==== docker logs dokuwiki docker exec -it dokuwiki ls -la /config/dokuwiki/ ==== 2. 检查数据目录权限 ==== ls -la /opt/discountvapor-it/data/ chown -R 1000:1000 /opt/discountvapor-it/data/ ===== 解决方案 ===== ==== 问题1: 权限问题 ==== # 修复权限 chown -R 1000:1000 /opt/discountvapor-it/data/ chown -R 1000:1000 /opt/discountvapor-it/logs/ # 重启DokuWiki docker restart dokuwiki ==== 问题2: 配置问题 ==== # 正确的DokuWiki配置 environment: - PUID=1000 - PGID=1000 - TZ=Pacific/Auckland volumes: - ./data:/config - ./logs:/var/log/dokuwiki ----- ==== 5. Grafana 访问问题 ==== ===== 症状 ===== * Grafana无法访问 * 登录失败 * 数据目录权限问题 ===== 排查步骤 ===== ==== 1. 检查Grafana容器 ==== docker logs grafana docker exec -it grafana ls -la /var/lib/grafana/ ==== 2. 检查数据目录权限 ==== ls -la /opt/discountvapor-it/data/grafana/ ===== 解决方案 ===== ==== 问题1: 权限问题 ==== # 修复Grafana数据目录权限 chown -R 472:472 /opt/discountvapor-it/data/grafana/ # 重启Grafana docker restart grafana ==== 问题2: 配置问题 ==== # 正确的Grafana配置 environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=35@Riccarton - GF_USERS_ALLOW_SIGN_UP=false - TZ=Pacific/Auckland ----- ==== 6. SSL证书问题 ==== ===== 症状 ===== * HTTPS访问失败 * 证书过期 * 证书申请失败 ===== 排查步骤 ===== ==== 1. 检查acme.json ==== ls -la /opt/discountvapor-it/traefik/acme.json docker exec traefik ls -la /letsencrypt/ ==== 2. 检查Traefik日志 ==== docker logs traefik | grep -i "certificate\|acme\|error" ==== 3. 检查域名解析 ==== nslookup erp.oasisvape.co.nz nslookup cms.oasisvape.co.nz ===== 解决方案 ===== ==== 问题1: acme.json权限问题 ==== # 修复权限 chmod 600 /opt/discountvapor-it/traefik/acme.json chown 1000:1000 /opt/discountvapor-it/traefik/acme.json # 重启Traefik docker restart traefik ==== 问题2: 证书申请失败 ==== # 删除旧的acme.json(谨慎操作) rm /opt/discountvapor-it/traefik/acme.json # 重启Traefik重新申请证书 docker restart traefik ==== 问题3: 域名解析问题 ==== # 检查DNS记录 dig erp.oasisvape.co.nz dig cms.oasisvape.co.nz # 确保A记录指向正确的IP # 156.67.214.225 ----- ==== 7. 防火墙问题 ==== ===== 症状 ===== * 外部无法访问服务 * 端口被阻止 * 内部服务正常,外部访问失败 ===== 排查步骤 ===== ==== 1. 检查防火墙状态 ==== ufw status iptables -L ==== 2. 检查端口监听 ==== netstat -tlnp | grep :80 netstat -tlnp | grep :443 ===== 解决方案 ===== ==== 问题1: 防火墙阻止端口 ==== # 开放必要端口 ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp # 关闭其他端口 ufw deny 3000 ufw deny 5678 ufw deny 8080 ufw deny 8081 ufw deny 8180 ufw deny 9090 ==== 问题2: 端口未监听 ==== # 检查Traefik是否监听80/443端口 docker logs traefik # 重启Traefik docker restart traefik ----- ===== 🔍 系统级故障排查 ===== ==== 1. 磁盘空间不足 ==== ==== 检查命令 ==== # 检查磁盘使用情况 df -h # 检查Docker使用情况 docker system df # 检查大文件 du -sh /opt/discountvapor-it/data/* | sort -hr ==== 解决方案 ==== # 清理Docker缓存 docker system prune -a # 清理日志文件 find /opt/discountvapor-it/logs/ -name "*.log" -mtime +7 -delete # 清理备份文件 find /opt/discountvapor-it/config_backup/ -name "*.bak" -mtime +30 -delete ==== 2. 内存不足 ==== ==== 检查命令 ==== # 检查内存使用 free -h # 检查容器内存使用 docker stats --no-stream ==== 解决方案 ==== # 重启内存占用高的容器 docker restart # 调整容器内存限制 # 在docker-compose.yml中添加 # deploy: # resources: # limits: # memory: 1G ==== 3. 网络问题 ==== ==== 检查命令 ==== # 检查网络接口 ip addr show # 检查路由 ip route show # 检查DNS cat /etc/resolv.conf ==== 解决方案 ==== # 重启网络服务 systemctl restart networking # 重启Docker网络 docker network prune docker network create traefik-network ----- ===== 📊 监控和告警 ===== ==== 1. 设置监控告警 ==== ==== Grafana告警配置 ==== # 在Grafana中配置告警规则 - alert: ContainerDown expr: up == 0 for: 1m labels: severity: critical annotations: summary: "Container {{ $labels.instance }} is down" ==== 系统监控 ==== # 设置系统监控脚本 #!/bin/bash # 检查容器状态 docker ps --format "table {{.Names}}\t{{.Status}}" | grep -v "Up" # 检查磁盘空间 df -h | awk '$5 > "80%" {print $0}' # 检查内存使用 free -h | awk 'NR==2{if($3/$2 > 0.8) print "Memory usage high: " $3 "/" $2}' ==== 2. 日志监控 ==== ==== 日志轮转配置 ==== # 配置logrotate cat > /etc/logrotate.d/docker-logs << EOF /opt/discountvapor-it/logs/*.log { daily rotate 7 compress delaycompress missingok notifempty create 644 root root } EOF ----- ===== 🔄 恢复和备份 ===== ==== 1. 服务恢复流程 ==== # 1. 停止所有服务 docker compose -f docker-compose-*.yml down # 2. 备份当前状态 tar -czf backup-$(date +%Y%m%d_%H%M%S).tar.gz /opt/discountvapor-it/ # 3. 恢复配置 cp config_backup/*.yml ./ cp config_backup/.env ./ # 4. 重启服务 docker compose -f docker-compose-traefik.yml up -d docker compose -f docker-compose-erpnext.yml up -d docker compose -f docker-compose-strapi.yml up -d docker compose -f docker-compose-n8n.yml up -d docker compose -f docker-compose-dokuwiki.yml up -d docker compose up -d ==== 2. 数据库恢复 ==== # ERPNext数据库恢复 docker exec -i discountvapor-it-database-1 mysql -u root -p${DB_PASSWORD} < backup.sql # PostgreSQL数据库恢复 docker exec -i strapi_postgres psql -U strapi_user -d strapi_db < backup.sql ----- ===== 📞 紧急联系 ===== ==== 技术支持 ==== * **项目文档**: https://wiki.oasisvape.co.nz * **监控面板**: https://grafana.oasisvape.co.nz * **联系邮箱**: discountvapor2025@gmail.com ==== 服务商支持 ==== * **VPS提供商**: Hostinger * **域名管理**: Cloudflare * **SSL证书**: Let's Encrypt ----- ===== 📋 故障排查检查清单 ===== ==== 服务状态检查 ==== * [ ] 所有容器运行正常 * [ ] 网络连接正常 * [ ] 数据库连接正常 * [ ] SSL证书有效 * [ ] 防火墙配置正确 ==== 日志检查 ==== * [ ] Traefik日志无错误 * [ ] 应用日志无错误 * [ ] 系统日志无错误 * [ ] 数据库日志正常 ==== 配置检查 ==== * [ ] 环境变量正确 * [ ] Docker Compose配置正确 * [ ] Traefik labels配置正确 * [ ] 网络配置正确 ==== 性能检查 ==== * [ ] 磁盘空间充足 * [ ] 内存使用正常 * [ ] CPU使用正常 * [ ] 网络带宽充足 ----- **最后更新**: 2025-01-06 **基于生产环境**: 156.67.214.225