464 lines
8.1 KiB
Markdown
464 lines
8.1 KiB
Markdown
# 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`
|
||
|
||
祝部署顺利!🚀
|