# ZJPB - 焦提示词 部署文档 ## 1Panel部署指南 ### 前置要求 - 1Panel管理面板已安装 - MySQL 5.7+ 或 MariaDB - Python 3.8+ - Nginx(1Panel自带) --- ## 一、数据库准备 ### 1.1 在1Panel中创建MySQL数据库 1. 登录1Panel管理面板 2. 进入「数据库」菜单 3. 点击「创建数据库」 4. 填写信息: - 数据库名:`ai_nav` - 用户名:`ai_nav_user` - 密码:自动生成或自定义(记录下来) - 权限:本地访问 5. 点击创建 ### 1.2 导入数据库结构 使用1Panel的phpMyAdmin或命令行导入: ```sql -- 如果你有数据库备份文件,可以直接导入 -- 否则在部署后通过init_db.py初始化 ``` --- ## 二、上传项目文件 ### 2.1 压缩项目 在本地Windows环境压缩项目文件夹为 `zjpb.zip`,**排除以下文件/文件夹**: - `__pycache__/` - `*.pyc` - `.git/` - `.env`(生产环境重新配置) - `venv/` 或 `env/` - `test_*.py`(测试文件) ### 2.2 上传到服务器 1. 在1Panel中进入「文件」菜单 2. 导航到 `/opt/1panel/apps/` 或你的网站目录(如 `/www/wwwroot/`) 3. 创建项目目录:`zjpb` 4. 上传 `zjpb.zip` 并解压 5. 最终路径示例:`/www/wwwroot/zjpb/` --- ## 三、环境配置 ### 3.1 SSH连接到服务器 使用1Panel的终端或SSH工具连接服务器 ### 3.2 创建Python虚拟环境 ```bash cd /www/wwwroot/zjpb # 创建虚拟环境 python3 -m venv venv # 激活虚拟环境 source venv/bin/activate # 升级pip pip install --upgrade pip ``` ### 3.3 安装Python依赖 ```bash pip install -r requirements.txt ``` ### 3.4 配置环境变量 创建生产环境的 `.env` 文件: ```bash nano .env ``` 填写以下内容(**修改为实际值**): ```env # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USER=ai_nav_user DB_PASSWORD=你的数据库密码 DB_NAME=ai_nav # 安全配置(生成随机密钥) SECRET_KEY=your-production-secret-key-change-this # 运行环境 FLASK_ENV=production # DeepSeek API配置(可选) DEEPSEEK_API_KEY=你的DeepSeek_API密钥 DEEPSEEK_BASE_URL=https://api.deepseek.com ``` **生成安全的SECRET_KEY**: ```bash python3 -c "import secrets; print(secrets.token_hex(32))" ``` ### 3.5 创建必要的目录 ```bash # 创建日志目录 mkdir -p logs # 创建静态文件上传目录 mkdir -p static/uploads # 设置权限 chmod 755 logs static/uploads ``` --- ## 四、初始化数据库 ### 4.1 运行初始化脚本 ```bash source venv/bin/activate python init_db.py ``` 这会创建所有表并创建默认管理员账号: - 用户名:`admin` - 密码:`admin123` **⚠️ 重要:登录后立即修改默认密码!** --- ## 五、配置Nginx反向代理 ### 5.1 在1Panel中创建网站 1. 进入1Panel「网站」菜单 2. 点击「创建网站」 3. 填写信息: - 网站类型:反向代理 - 域名:`your-domain.com`(或IP) - 代理地址:`http://127.0.0.1:5000` - 启用SSL:推荐(自动申请Let's Encrypt证书) ### 5.2 自定义Nginx配置(可选) 如果需要自定义,编辑Nginx配置: ```nginx server { listen 80; server_name your-domain.com; # 如果启用SSL,这里会自动重定向到443 client_max_body_size 10M; # 允许上传文件大小 location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket支持(如果需要) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # 静态文件直接由Nginx处理 location /static/ { alias /www/wwwroot/zjpb/static/; expires 30d; add_header Cache-Control "public, immutable"; } } ``` --- ## 六、配置Supervisor守护进程 ### 6.1 在1Panel中使用Supervisor 1. 进入1Panel「容器」→「应用编排」或「进程管理」 2. 创建新的守护进程配置 ### 6.2 创建Supervisor配置文件 如果1Panel没有内置,手动创建: ```bash nano /etc/supervisor/conf.d/zjpb.conf ``` 配置内容: ```ini [program:zjpb] command=/www/wwwroot/zjpb/venv/bin/gunicorn -c gunicorn_config.py app:app directory=/www/wwwroot/zjpb user=www autostart=true autorestart=true redirect_stderr=true stdout_logfile=/www/wwwroot/zjpb/logs/supervisor.log environment=FLASK_ENV="production" ``` ### 6.3 启动服务 ```bash # 重新加载Supervisor配置 supervisorctl reread supervisorctl update # 启动应用 supervisorctl start zjpb # 查看状态 supervisorctl status zjpb ``` --- ## 七、使用systemd守护进程(替代方案) 如果不使用Supervisor,可以用systemd: ### 7.1 创建systemd服务文件 ```bash sudo nano /etc/systemd/system/zjpb.service ``` 内容: ```ini [Unit] Description=ZJPB AI Navigation Flask Application After=network.target mysql.service [Service] Type=notify User=www Group=www WorkingDirectory=/www/wwwroot/zjpb Environment="PATH=/www/wwwroot/zjpb/venv/bin" Environment="FLASK_ENV=production" ExecStart=/www/wwwroot/zjpb/venv/bin/gunicorn -c gunicorn_config.py app:app Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` ### 7.2 启动服务 ```bash # 重新加载systemd sudo systemctl daemon-reload # 启动服务 sudo systemctl start zjpb # 设置开机自启 sudo systemctl enable zjpb # 查看状态 sudo systemctl status zjpb ``` --- ## 八、验证部署 ### 8.1 检查服务状态 ```bash # 查看gunicorn进程 ps aux | grep gunicorn # 查看日志 tail -f logs/error.log tail -f logs/access.log ``` ### 8.2 访问网站 1. 前台访问:`http://your-domain.com` 2. 后台访问:`http://your-domain.com/admin/login` - 用户名:`admin` - 密码:`admin123`(首次登录后立即修改) --- ## 九、常用管理命令 ### 9.1 重启应用 **使用Supervisor:** ```bash supervisorctl restart zjpb ``` **使用systemd:** ```bash sudo systemctl restart zjpb ``` ### 9.2 查看日志 ```bash # 应用日志 tail -f logs/error.log # Nginx访问日志 tail -f /www/server/nginx/logs/your-domain.com.log # Supervisor日志 tail -f logs/supervisor.log ``` ### 9.3 更新代码 ```bash cd /www/wwwroot/zjpb # 备份数据库 mysqldump -u ai_nav_user -p ai_nav > backup_$(date +%Y%m%d).sql # 拉取新代码或上传新文件 # ... # 激活虚拟环境 source venv/bin/activate # 安装新依赖 pip install -r requirements.txt # 重启应用 supervisorctl restart zjpb # 或 sudo systemctl restart zjpb ``` --- ## 十、安全加固 ### 10.1 修改默认管理员密码 登录后台后立即修改密码: 1. 访问:`/admin/change-password` 2. 输入旧密码:`admin123` 3. 设置新的强密码 ### 10.2 配置防火墙 ```bash # 只允许80和443端口(1Panel通常已配置) sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable ``` ### 10.3 配置SSL证书 在1Panel中为网站启用SSL: 1. 进入网站设置 2. 启用SSL 3. 选择Let's Encrypt免费证书 4. 自动申请并配置 --- ## 十一、故障排查 ### 11.1 应用无法启动 检查日志: ```bash tail -f logs/error.log ``` 常见问题: - 数据库连接失败:检查`.env`配置 - 端口被占用:修改`gunicorn_config.py`中的端口 - 权限问题:确保文件所有者为`www`用户 ### 11.2 静态文件404 检查Nginx配置和目录权限: ```bash ls -la static/ chmod -R 755 static/ ``` ### 11.3 数据库连接失败 ```bash # 测试数据库连接 mysql -u ai_nav_user -p ai_nav # 检查MySQL服务 sudo systemctl status mysql ``` --- ## 十二、备份策略 ### 12.1 数据库备份 创建定时任务: ```bash crontab -e ``` 添加每日备份: ```cron 0 2 * * * mysqldump -u ai_nav_user -p密码 ai_nav > /www/backup/zjpb_$(date +\%Y\%m\%d).sql ``` ### 12.2 文件备份 ```bash # 备份上传的文件 tar -czf uploads_backup_$(date +%Y%m%d).tar.gz static/uploads/ ``` --- ## 支持与帮助 如有问题,请检查: 1. 应用日志:`logs/error.log` 2. Nginx日志:`/www/server/nginx/logs/` 3. 系统日志:`journalctl -u zjpb -f` 祝部署顺利!🚀