# ZJPB v2.6.0 部署故障排查指南 ## 问题现象 ```bash supervisorctl restart zjpb zjpb: ERROR (no such process) ``` --- ## 🔍 故障诊断步骤 ### 1. 检查应用当前运行状态 ```bash cd /opt/1panel/apps/zjpb # 检查Python进程 ps aux | grep app.py ps aux | grep gunicorn | grep zjpb # 检查端口占用(通常是5000或8000) netstat -tlnp | grep :5000 netstat -tlnp | grep :8000 ``` **预期结果**: - 如果有进程,说明应用在运行,只是不在supervisor管理下 - 如果没有进程,说明应用已停止 --- ### 2. 检查应用管理方式 在1Panel环境中,应用可能通过以下方式管理: #### 方式A: systemd服务 ```bash # 检查是否有systemd服务 systemctl list-units | grep zjpb ls -la /etc/systemd/system/zjpb.service # 如果存在,使用systemctl管理 systemctl status zjpb systemctl restart zjpb systemctl start zjpb ``` #### 方式B: manage.sh脚本 ```bash # 检查是否有管理脚本 ls -la manage.sh cat manage.sh # 如果存在,使用脚本管理 ./manage.sh status ./manage.sh restart ./manage.sh start ``` #### 方式C: 1Panel内置管理 ```bash # 检查1Panel容器 docker ps | grep zjpb # 如果是Docker容器 docker restart zjpb ``` #### 方式D: supervisor配置问题 ```bash # 检查supervisor配置 ls -la /etc/supervisor/conf.d/zjpb.conf cat /etc/supervisor/conf.d/zjpb.conf # 重新加载supervisor配置 supervisorctl reread supervisorctl update supervisorctl status ``` --- ## 🚀 快速解决方案 ### 方案1: 手动启动(推荐,最快) ```bash cd /opt/1panel/apps/zjpb # 1. 激活虚拟环境 source venv/bin/activate # 2. 安装新依赖 pip install Flask-Limiter==3.5.0 # 3. 查找并停止旧进程 pkill -f "gunicorn.*zjpb" pkill -f "python.*app.py" # 4. 启动应用(后台运行) nohup gunicorn -w 4 -b 0.0.0.0:5000 wsgi:app > logs/gunicorn.log 2>&1 & # 或者如果有wsgi.py nohup gunicorn -c gunicorn_config.py wsgi:app > logs/gunicorn.log 2>&1 & # 5. 验证启动 ps aux | grep gunicorn netstat -tlnp | grep :5000 # 6. 查看日志 tail -f logs/gunicorn.log ``` ### 方案2: 使用manage.sh(如果存在) ```bash cd /opt/1panel/apps/zjpb # 安装依赖 source venv/bin/activate pip install Flask-Limiter==3.5.0 # 使用脚本重启 ./manage.sh stop ./manage.sh start ./manage.sh status ``` ### 方案3: 配置supervisor(推荐长期方案) 如果要使用supervisor管理,需要创建配置文件: ```bash # 1. 创建supervisor配置 cat > /etc/supervisor/conf.d/zjpb.conf << 'EOF' [program:zjpb] directory=/opt/1panel/apps/zjpb command=/opt/1panel/apps/zjpb/venv/bin/gunicorn -c gunicorn_config.py wsgi:app autostart=true autorestart=true startsecs=10 startretries=3 user=root redirect_stderr=true stdout_logfile=/opt/1panel/apps/zjpb/logs/supervisor.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 environment=PATH="/opt/1panel/apps/zjpb/venv/bin" EOF # 2. 重新加载配置 supervisorctl reread supervisorctl update # 3. 启动应用 supervisorctl start zjpb supervisorctl status zjpb ``` ### 方案4: 通过1Panel Web界面 1. 登录1Panel管理面板 2. 找到"网站"或"应用"菜单 3. 找到zjpb应用 4. 点击"停止" → 等待 → 点击"启动" --- ## ✅ 部署验证 启动成功后,执行以下验证: ```bash # 1. 检查进程 ps aux | grep gunicorn # 2. 检查端口 netstat -tlnp | grep :5000 # 3. 测试HTTP访问 curl http://localhost:5000/ # 4. 查看日志 tail -50 logs/gunicorn.log tail -50 logs/error.log # 5. 测试详情页(替换为实际的code) curl http://localhost:5000/site/12345678 ``` **预期结果**: - 进程存在 - 端口被监听 - HTTP返回200 - 日志无错误 --- ## 🐛 常见错误处理 ### 错误1: ImportError: No module named 'utils.rate_limiter' **原因**: 新文件未正确拉取 **解决**: ```bash cd /opt/1panel/apps/zjpb git status git pull origin master ls -la utils/rate_limiter.py # 确认文件存在 ``` ### 错误2: ModuleNotFoundError: No module named 'flask_limiter' **原因**: 依赖未安装 **解决**: ```bash source venv/bin/activate pip install Flask-Limiter==3.5.0 ``` ### 错误3: 端口被占用 **现象**: `Address already in use` **解决**: ```bash # 查找占用端口的进程 lsof -i :5000 netstat -tlnp | grep :5000 # 停止旧进程 kill -9 # 或批量停止 pkill -f "gunicorn.*zjpb" ``` ### 错误4: Permission denied **解决**: ```bash # 确保目录权限 chown -R root:root /opt/1panel/apps/zjpb chmod +x manage.sh # 如果有 ``` --- ## 📋 完整的重启流程(推荐) ```bash #!/bin/bash # 安全的重启流程 cd /opt/1panel/apps/zjpb echo "=== Step 1: 备份当前代码 ===" git stash echo "=== Step 2: 拉取最新代码 ===" git pull origin master echo "=== Step 3: 激活虚拟环境 ===" source venv/bin/activate echo "=== Step 4: 安装依赖 ===" pip install Flask-Limiter==3.5.0 echo "=== Step 5: 停止旧进程 ===" pkill -f "gunicorn.*zjpb" || echo "No process to kill" sleep 2 echo "=== Step 6: 启动应用 ===" nohup gunicorn -w 4 -b 0.0.0.0:5000 wsgi:app > logs/gunicorn.log 2>&1 & sleep 3 echo "=== Step 7: 验证启动 ===" if ps aux | grep -v grep | grep gunicorn | grep zjpb; then echo "✅ 应用启动成功" echo "进程信息:" ps aux | grep gunicorn | grep zjpb else echo "❌ 应用启动失败" echo "查看日志:" tail -20 logs/gunicorn.log exit 1 fi echo "=== Step 8: 测试访问 ===" curl -s http://localhost:5000/ | head -5 echo "" echo "✅ 部署完成!" ``` 将上述脚本保存为 `deploy_v2.6.sh`,然后执行: ```bash chmod +x deploy_v2.6.sh ./deploy_v2.6.sh ``` --- ## 📞 需要提供的信息 如果以上方案都无法解决,请提供以下信息: ```bash # 1. 当前进程状态 ps aux | grep python ps aux | grep gunicorn # 2. 端口占用 netstat -tlnp | grep -E ":(5000|8000)" # 3. 项目文件 ls -la /opt/1panel/apps/zjpb/ # 4. 日志内容 tail -50 /opt/1panel/apps/zjpb/logs/error.log tail -50 /opt/1panel/apps/zjpb/logs/gunicorn.log # 5. Git状态 cd /opt/1panel/apps/zjpb git status git log --oneline -3 # 6. Python环境 which python python --version pip list | grep Flask ``` --- **最快解决方案**: 使用方案1手动启动,后续再配置自动化管理。 **推荐方案**: 配置systemd服务(更稳定)或使用1Panel内置管理。