Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
project:troubleshooting:start

Table of Contents

🔧 DV IT Infrastructure Platform - 故障排查指南

更新日期: 2025年1月 项目: DV IT Infrastructure Platform 基于: 生产环境实际故障排查经验 VPS: 156.67.214.225


🎯 故障排查概述

排查原则

  • 系统性排查: 从网络→容器→服务→应用逐层排查
  • 日志优先: 优先查看容器和服务日志
  • 配置验证: 检查配置文件和环境变量
  • 网络隔离: 验证Docker网络和Traefik路由

常用命令

# 查看所有容器状态
docker ps -a
 
# 查看容器日志
docker logs <container_name>
 
# 查看网络
docker network ls
docker network inspect <network_name>
 
# 查看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 <container_name> | grep -A 10 -B 5 "Labels"

3. 检查网络连接

# 检查容器是否在traefik-network中
docker network inspect traefik-network
 
# 检查容器间网络连通性
docker exec -it <container_name> 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 <container_name>
 
# 重启容器
docker restart <container_name>

问题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=<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 <container_name>
 
# 调整容器内存限制
# 在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

📞 紧急联系

技术支持

服务商支持

  • VPS提供商: Hostinger
  • 域名管理: Cloudflare
  • SSL证书: Let's Encrypt

📋 故障排查检查清单

服务状态检查

  • [ ] 所有容器运行正常
  • [ ] 网络连接正常
  • [ ] 数据库连接正常
  • [ ] SSL证书有效
  • [ ] 防火墙配置正确

日志检查

  • [ ] Traefik日志无错误
  • [ ] 应用日志无错误
  • [ ] 系统日志无错误
  • [ ] 数据库日志正常

配置检查

  • [ ] 环境变量正确
  • [ ] Docker Compose配置正确
  • [ ] Traefik labels配置正确
  • [ ] 网络配置正确

性能检查

  • [ ] 磁盘空间充足
  • [ ] 内存使用正常
  • [ ] CPU使用正常
  • [ ] 网络带宽充足

最后更新: 2025-01-06 基于生产环境: 156.67.214.225

project/troubleshooting/start.txt · Last modified: by 127.0.0.1