补充功能说明与独立部署文档,精简 README 为文档入口

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-15 15:30:34 +08:00
parent bea7804d47
commit 613b88f2d3
3 changed files with 681 additions and 142 deletions
+322
View File
@@ -0,0 +1,322 @@
# 部署文档
国内期货交易监控复盘系统 — 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)