Files
qihuo/docs/DEPLOY.md
T

323 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 部署文档
国内期货交易监控复盘系统 — Ubuntu 服务器部署、更新与运维说明。
---
## 部署概要
| 项目 | 默认值 |
|------|--------|
| 部署目录 | `/opt/qihuo` |
| 运行用户 | `root`(与 `deploy.sh` / PM2 配置一致) |
| 服务端口 | `6600` |
| 进程管理 | PM2,应用名 `qihuo` |
| 数据库 | SQLite `futures.db` |
| 仓库 | https://git.bz121.com/dekun/qihuo.git |
---
## 环境要求
- **系统**Ubuntu 20.04+(推荐)
- **Python**3.10+
- **Node.js + PM2**:进程守护与开机自启
- **网络**
- `hq.sinajs.cn`(新浪行情)
- 企业微信 API(若启用推送)
- `git.bz121.com`(拉取代码)
- 可选:`pip` 安装 akshare 时需访问 PyPI
---
## 一键部署(推荐)
**root** 登录服务器后执行:
```bash
cd /opt/qihuo
# 若目录不存在,先克隆:
# git clone https://git.bz121.com/dekun/qihuo.git /opt/qihuo
bash deploy.sh
```
`deploy.sh` 会自动完成:
1. 安装 `python3``python3-venv``git``nodejs``npm``pm2`
2. `git pull``git clone``/opt/qihuo`
3. 创建虚拟环境 `venv``pip install -r requirements.txt`
4. 首次生成 `.env`(随机 `SECRET_KEY`
5. `pm2 start ecosystem.config.cjs``pm2 save`
部署完成后访问:`http://<服务器IP>:6600`
---
## 手动部署
### 1. 安装系统依赖
```bash
apt update
apt install -y python3 python3-venv python3-pip git nodejs npm
npm install -g pm2
```
### 2. 克隆代码
```bash
git clone https://git.bz121.com/dekun/qihuo.git /opt/qihuo
cd /opt/qihuo
```
### 3. Python 虚拟环境与依赖
```bash
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
```
### 4. 可选:AKShare(手续费第三方同步)
```bash
source venv/bin/activate
pip install akshare
```
不安装也可使用系统内置 `data/fee_rates.json` 默认费率。
### 5. 环境变量
```bash
cp .env.example .env
nano .env
```
| 变量 | 说明 |
|------|------|
| `HOST` | 监听地址,默认 `0.0.0.0` |
| `PORT` | 端口,默认 `6600` |
| `SECRET_KEY` | Flask Session 密钥,务必随机 |
| `ADMIN_USERNAME` | 初始管理员用户名 |
| `ADMIN_PASSWORD` | 初始管理员密码(仅首次建库生效) |
| `ADMIN_SYNC_FROM_ENV` | `true` 时重启可从 `.env` 同步账号密码 |
| `WECHAT_WEBHOOK` | 企业微信机器人地址(可选) |
| `QUOTE_SOURCE` | `sina`(默认)/ `ths` / `auto` |
| `THS_REFRESH_TOKEN` | 同花顺 iFinD token(机构用户) |
示例:
```env
HOST=0.0.0.0
PORT=6600
SECRET_KEY=请替换为随机长字符串
ADMIN_USERNAME=admin
ADMIN_PASSWORD=你的强密码
ADMIN_SYNC_FROM_ENV=false
WECHAT_WEBHOOK=
QUOTE_SOURCE=sina
```
### 6. PM2 启动
```bash
cd /opt/qihuo
pm2 start ecosystem.config.cjs
pm2 save
pm2 startup # 按提示执行命令,实现开机自启
```
### 7. 创建日志目录(若不存在)
```bash
mkdir -p /opt/qihuo/logs /opt/qihuo/uploads
```
---
## 更新部署
代码已推送后,在服务器执行:
```bash
cd /opt/qihuo
git pull
source venv/bin/activate
pip install -r requirements.txt
pm2 restart qihuo
```
若新增可选依赖(如 akshare):
```bash
pip install akshare
pm2 restart qihuo
```
应用启动时会自动执行 SQLite 表结构迁移(`ALTER TABLE` 容错),一般无需手工改库。
---
## PM2 常用命令
```bash
pm2 status # 查看状态
pm2 logs qihuo # 查看日志
pm2 logs qihuo --lines 100
pm2 restart qihuo # 重启
pm2 stop qihuo # 停止
pm2 delete qihuo # 删除进程
pm2 save # 保存进程列表
```
日志文件:
- `/opt/qihuo/logs/pm2-out.log`
- `/opt/qihuo/logs/pm2-error.log`
---
## 本地开发
```bash
git clone https://git.bz121.com/dekun/qihuo.git
cd qihuo
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env
python app.py
```
浏览器访问:`http://127.0.0.1:6600`
---
## 账号与密码
| 场景 | 操作 |
|------|------|
| 首次部署 | `.env` 中设置 `ADMIN_USERNAME` / `ADMIN_PASSWORD` 后启动 |
| 已部署后改 `.env` 密码 | 设 `ADMIN_SYNC_FROM_ENV=true``pm2 restart qihuo` |
| 网页改密码 | 登录 → 系统设置 |
| 忘记密码 | `cd /opt/qihuo && source venv/bin/activate && python reset_admin.py` |
账号数据在 `futures.db``settings` 表,不会仅因改 `.env` 自动更新(除非开启 `ADMIN_SYNC_FROM_ENV`)。
---
## 数据库与数据文件
| 路径 | 说明 |
|------|------|
| `/opt/qihuo/futures.db` | 主数据库,建议定期备份 |
| `/opt/qihuo/uploads/` | 复盘截图、自动 K 线图 |
| `/opt/qihuo/data/fee_rates.json` | 默认手续费表(可重载) |
备份示例:
```bash
cp /opt/qihuo/futures.db /opt/qihuo/futures.db.bak.$(date +%Y%m%d)
```
### 手工补列(极少需要)
若极老版本库缺少字段,可对照报错执行(新版本启动会自动迁移):
```bash
sqlite3 /opt/qihuo/futures.db "ALTER TABLE key_monitors ADD COLUMN sina_code TEXT;"
```
---
## Nginx 反向代理(可选)
将 6600 反代到 80/443,并配置 HTTPS
```nginx
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass http://127.0.0.1:6600;
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;
}
}
```
---
## 防火墙
若使用 `ufw`,开放端口:
```bash
ufw allow 6600/tcp
# 或使用 Nginx 时只开放 80/443
```
---
## 故障排查
| 现象 | 可能原因 | 处理 |
|------|----------|------|
| 无法访问 6600 | 服务未启动 / 防火墙 | `pm2 status``pm2 logs qihuo` |
| 登录失败 | 密码未同步 | 网页改密或 `reset_admin.py` |
| 现价一直 `--` | 新浪网络不可达 | 检查服务器能否访问 `hq.sinajs.cn` |
| 关键位 500 | 缺 `sina_code` 列 | `git pull` 重启;或手工 `ALTER TABLE` |
| K 线生成失败 | matplotlib 未装 | `pip install matplotlib==3.9.2` |
| 手续费同步失败 | 未装 akshare | `pip install akshare` 或用「重载 JSON」 |
| `git pull` 冲突 | 本地有修改 | 备份 `futures.db` 后处理冲突或 `git stash` |
查看应用是否在监听:
```bash
ss -tlnp | grep 6600
```
---
## 安全建议
1. 部署后立即修改默认密码
2. 勿将 `.env``futures.db` 提交到公开仓库
3. 生产环境使用 HTTPS + 限制访问 IP
4. 定期备份 `futures.db``uploads/`
---
## 目录结构(部署后)
```
/opt/qihuo/
├── app.py
├── venv/
├── futures.db
├── .env
├── logs/
│ ├── pm2-out.log
│ └── pm2-error.log
├── uploads/
├── data/fee_rates.json
├── ecosystem.config.cjs
├── deploy.sh
└── docs/
├── FEATURES.md
└── DEPLOY.md
```
---
## 相关文档
- [功能说明文档](./FEATURES.md)
- [README](../README.md)