Restructure into modules/ with single-process CTP and config/ layout.
Move business code under modules/, env template to config/, PM2 single qihuo process, and _legacy shims for old imports. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+15
-16
@@ -43,7 +43,7 @@ pm2 save
|
||||
|
||||
以下文件 **不** 随 `git pull` 更新,卸载/重装时须 **单独备份与恢复**:
|
||||
|
||||
- `/opt/qihuo/.env`
|
||||
- `/opt/qihuo/config/.env`(兼容旧版 `/opt/qihuo/.env`)
|
||||
- `/opt/qihuo/futures.db`(SQLite)或 PostgreSQL 数据
|
||||
- `/opt/qihuo/uploads/`
|
||||
- `/opt/qihuo/backups/`(若有)
|
||||
@@ -58,18 +58,17 @@ pm2 save
|
||||
| 运行用户 | `root`(与 `deploy.sh` / PM2 配置一致) |
|
||||
| Web 端口 | `6600`(对外) |
|
||||
| CTP Worker 端口 | `6601`(仅 `127.0.0.1`,Web 进程 IPC 调用,勿对外开放) |
|
||||
| 进程管理 | PM2:`qihuo`(Flask Web)+ `qihuo-ctp`(CTP / vn.py 独立进程) |
|
||||
| 进程管理 | PM2:**仅** `qihuo`(Flask + CTP 单进程) |
|
||||
| 数据库 | **生产推荐 PostgreSQL**(见 [POSTGRES.md](./POSTGRES.md));未配置 `DATABASE_URL` 时使用 SQLite `futures.db` |
|
||||
| 仓库 | https://git.bz121.com/dekun/qihuo.git |
|
||||
|
||||
### 进程架构(2026-03 起)
|
||||
### 进程架构(2026-07 起:单进程)
|
||||
|
||||
| PM2 应用 | 角色 | 说明 |
|
||||
|----------|------|------|
|
||||
| `qihuo` | Web(`QIHUO_CTP_ROLE=client`) | Flask、页面、API、数据库;通过 HTTP 调用本机 Worker |
|
||||
| `qihuo-ctp` | Worker(`QIHUO_CTP_ROLE=worker`) | **唯一** 加载 vn.py / vnpy_ctp;CTP 连接、报单、持仓回调、止盈止损 tick、滚仓监控 |
|
||||
| PM2 应用 | 说明 |
|
||||
|----------|------|
|
||||
| `qihuo` | Flask Web + **vn.py / CTP 同进程**(`vnpy_bridge.CtpBridge`) |
|
||||
|
||||
Web 进程崩溃或重启 **不会** 直接带走 CTP 原生连接;Worker 重启后 Web 会自动通过 IPC 恢复读写。两个进程的 Token 须一致(见 `ecosystem.config.cjs` 中 `QIHUO_CTP_WORKER_TOKEN`)。
|
||||
详见 [ARCHITECTURE.md](./ARCHITECTURE.md)。旧版 `qihuo-ctp` 独立 Worker **已废弃**,`ecosystem.config.cjs` 不再启动该进程。
|
||||
|
||||
---
|
||||
|
||||
@@ -110,7 +109,7 @@ bash deploy.sh
|
||||
6. 首次生成 `.env`,并补全 `SIMNOW_ENV=实盘`、`CTP_AUTO_RECONNECT=true` 等缺项
|
||||
7. **自动探测 SimNow 前置**(`nc` 测端口),写入可用的 `SIMNOW_TD/MD_ADDRESS`(优先 `182.254.243.31`,其次 `180.168.146.187`)
|
||||
8. 若已配置 SimNow 账号,运行 `scripts/test_simnow.py` 验证连接
|
||||
9. `pm2 restart ecosystem.config.cjs --update-env` 或首次 `pm2 start ecosystem.config.cjs`,并 `pm2 save`(同时启动 **`qihuo`** 与 **`qihuo-ctp`**)
|
||||
9. `pm2 restart ecosystem.config.cjs --update-env` 或首次 `pm2 start ecosystem.config.cjs`,并 `pm2 save`(仅 **`qihuo`** 一个进程)
|
||||
|
||||
部署完成后访问:`http://<服务器IP>:6600`
|
||||
|
||||
@@ -141,7 +140,7 @@ MIGRATE_SQLITE=1 sudo bash scripts/deploy_postgres.sh
|
||||
|
||||
```bash
|
||||
# 在服务器上
|
||||
cp /opt/qihuo/.env /root/qihuo.env.bak
|
||||
cp /opt/qihuo/config/.env /root/qihuo.env.bak 2>/dev/null || cp /opt/qihuo/.env /root/qihuo.env.bak 2>/dev/null || true
|
||||
# SQLite
|
||||
cp /opt/qihuo/futures.db /root/futures.db.bak 2>/dev/null || true
|
||||
# PostgreSQL 见 POSTGRES.md 备份命令
|
||||
@@ -151,8 +150,8 @@ tar czf /root/qihuo_uploads.bak.tar.gz -C /opt/qihuo uploads 2>/dev/null || true
|
||||
### 2. 卸载 PM2 与代码目录
|
||||
|
||||
```bash
|
||||
pm2 stop qihuo qihuo-ctp 2>/dev/null || true
|
||||
pm2 delete qihuo qihuo-ctp 2>/dev/null || true
|
||||
pm2 stop qihuo 2>/dev/null || true
|
||||
pm2 delete qihuo 2>/dev/null || true
|
||||
pm2 save
|
||||
rm -rf /opt/qihuo
|
||||
```
|
||||
@@ -174,7 +173,7 @@ bash deploy.sh
|
||||
|
||||
```bash
|
||||
cd /opt/qihuo && git log -1 --oneline # 须与远端 main 最新提交一致
|
||||
pm2 status # qihuo、qihuo-ctp 均为 online
|
||||
pm2 status # qihuo 为 online
|
||||
```
|
||||
|
||||
浏览器访问 `http://<服务器IP>:6600` 登录验证。
|
||||
@@ -225,8 +224,8 @@ python -c "from vnpy_ctp import CtpGateway; print('vnpy_ctp OK')"
|
||||
若提示找不到模块,查看本文「CTP / vnpy 故障排查」一节。
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
cp config/.env.example config/.env
|
||||
nano config/.env
|
||||
```
|
||||
|
||||
| 变量 | 说明 |
|
||||
@@ -318,7 +317,7 @@ pm2 restart ecosystem.config.cjs --update-env
|
||||
pm2 save
|
||||
```
|
||||
|
||||
> 须 **同时重启** `qihuo` 与 `qihuo-ctp`。仅 `pm2 restart qihuo` 会导致 Web 与 Worker 代码/协议不一致。
|
||||
> 更新后执行 `pm2 restart ecosystem.config.cjs --update-env` 即可(仅 `qihuo`)。
|
||||
|
||||
若服务器曾用 SCP 覆盖文件导致 `git pull` 冲突,用 `git reset --hard origin/main` 与远端对齐。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user