feat: scaffold gold_monitor web hub, API, PM2 deploy and docs
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
# 部署文档(gold_monitor)
|
||||
|
||||
## 1. 目标
|
||||
|
||||
在局域网 Ubuntu 上部署 **gold_monitor** 中控:
|
||||
|
||||
- Web 登录、下载中心、账户/机器标注、交易复盘
|
||||
- API:激活、成交上报、K 线缓存
|
||||
- **PM2** 常驻,端口 **5800**
|
||||
|
||||
## 2. 一键交互部署(推荐)
|
||||
|
||||
新机 root:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://git.bz121.com/dekun/gold_monitor/raw/branch/main/deploy/manage.sh | bash
|
||||
```
|
||||
|
||||
菜单:
|
||||
|
||||
1. 一键部署
|
||||
2. 一键卸载
|
||||
3. 更新
|
||||
0. 退出
|
||||
|
||||
已安装后再次进入:
|
||||
|
||||
```bash
|
||||
bash /opt/gold_monitor/deploy/manage.sh
|
||||
```
|
||||
|
||||
## 3. 部署后检查
|
||||
|
||||
```bash
|
||||
pm2 status
|
||||
pm2 logs gold_monitor --lines 100
|
||||
curl -s http://127.0.0.1:5800/health
|
||||
```
|
||||
|
||||
浏览器:`http://<服务器IP>:5800`
|
||||
默认账号:`admin` / `admin123` → 立即修改 `/opt/gold_monitor/.env` 中 `ADMIN_PASSWORD` 与 `FLASK_SECRET_KEY`,然后:
|
||||
|
||||
```bash
|
||||
pm2 restart gold_monitor
|
||||
```
|
||||
|
||||
## 4. 放置通用 exe
|
||||
|
||||
```bash
|
||||
# 将打包好的通用客户端拷到
|
||||
/opt/gold_monitor/releases/黄金市价辅助.exe
|
||||
```
|
||||
|
||||
网页「下载中心」即可提供下载。未放置时,下载接口会给出说明文件。
|
||||
|
||||
## 5. 防火墙(可选)
|
||||
|
||||
```bash
|
||||
ufw allow 5800/tcp
|
||||
ufw reload
|
||||
```
|
||||
|
||||
## 6. 更新
|
||||
|
||||
```bash
|
||||
bash /opt/gold_monitor/deploy/manage.sh
|
||||
# 选 3) 更新
|
||||
```
|
||||
|
||||
或:
|
||||
|
||||
```bash
|
||||
cd /opt/gold_monitor && git pull --ff-only
|
||||
pm2 restart gold_monitor
|
||||
```
|
||||
|
||||
## 7. 备份
|
||||
|
||||
重要路径:
|
||||
|
||||
- `/opt/gold_monitor/.env`
|
||||
- `/opt/gold_monitor/data/`
|
||||
- `/opt/gold_monitor/releases/`
|
||||
|
||||
卸载脚本会尝试备份 `.env` 与 `data` 到 `/opt/gold_monitor_backup_<时间戳>/`。
|
||||
@@ -0,0 +1,123 @@
|
||||
# 技术文档(gold_monitor)
|
||||
|
||||
## 1. 架构
|
||||
|
||||
```
|
||||
Browser (复盘/管理) ──HTTP:5800──► Flask(gunicorn) + SQLite
|
||||
▲
|
||||
Windows exe (通用包+激活) ──API───────────┘
|
||||
│
|
||||
└── MetaTrader5 (本机)
|
||||
```
|
||||
|
||||
- **不直连数据库**:多机只走 HTTP API。
|
||||
- **通用包 + 首次激活**:下载同一 exe;激活后获得 `token` 绑定 `account_id` / `machine_id`。
|
||||
|
||||
## 2. 技术栈
|
||||
|
||||
| 层 | 选型 |
|
||||
|----|------|
|
||||
| Web/API | Flask 3 + Jinja2 |
|
||||
| 进程 | gunicorn + PM2 |
|
||||
| 存储 | SQLite(`data/gold_monitor.db`) |
|
||||
| 前端复盘图 | 自研轻量 canvas 蜡烛图(无 CDN 依赖) |
|
||||
| 客户端 | Python/Tk + MetaTrader5(见 `desktop/`,逻辑迁移自既有方案) |
|
||||
|
||||
## 3. 主要数据表
|
||||
|
||||
| 表 | 用途 |
|
||||
|----|------|
|
||||
| `accounts` | 交易账户与标注 |
|
||||
| `machines` | 机器、指纹、在线时间 |
|
||||
| `activations` | 激活码、token、状态 |
|
||||
| `trades` | 成交与复盘字段(entry_style / review_note / snapshot_json) |
|
||||
| `bars` | K 线缓存(symbol+timeframe+ts 唯一) |
|
||||
|
||||
## 4. HTTP API
|
||||
|
||||
### 健康检查
|
||||
|
||||
`GET /health` → `{ ok, service, port }`
|
||||
|
||||
### 激活
|
||||
|
||||
`POST /api/v1/activate`
|
||||
|
||||
```json
|
||||
{
|
||||
"code": "xxxx",
|
||||
"fingerprint": "stable-machine-id",
|
||||
"machine_name": "书房PC"
|
||||
}
|
||||
```
|
||||
|
||||
响应:`{ ok, token, account_id, machine_id, public_base }`
|
||||
|
||||
### 心跳
|
||||
|
||||
`GET /api/v1/ping`
|
||||
Header:`X-Device-Token: <token>`
|
||||
|
||||
### 上报成交
|
||||
|
||||
`POST /api/v1/trades`
|
||||
Header:`X-Device-Token`
|
||||
|
||||
```json
|
||||
{
|
||||
"ticket": "2700219994",
|
||||
"symbol": "XAUUSDm",
|
||||
"side": "buy",
|
||||
"volume": 0.1,
|
||||
"open_price": 4175.02,
|
||||
"close_price": 4178.10,
|
||||
"open_time": 1729000000,
|
||||
"close_time": 1729001000,
|
||||
"profit": 12.5,
|
||||
"sl": 4170.0,
|
||||
"tp": 4190.0,
|
||||
"entry_style": "",
|
||||
"snapshot": { "m15_dir": 1, "m1_engulf": true }
|
||||
}
|
||||
```
|
||||
|
||||
### 上报 / 查询 K 线
|
||||
|
||||
`POST /api/v1/bars`(需 token)
|
||||
|
||||
```json
|
||||
{
|
||||
"symbol": "XAUUSDm",
|
||||
"timeframe": "M15",
|
||||
"bars": [
|
||||
{ "ts": 1729000000, "open": 1, "high": 2, "low": 0.5, "close": 1.5, "volume": 0 }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
`GET /api/v1/bars?symbol=&timeframe=&start=&end=`(需网页登录 Session)
|
||||
|
||||
## 5. 安全建议
|
||||
|
||||
- 修改默认管理员密码与 `FLASK_SECRET_KEY`
|
||||
- 仅局域网开放 5800;如需外网务必加 HTTPS 反代与强密码
|
||||
- 激活码一次性绑定后状态为 `active`;可在后续版本增加作废接口
|
||||
- token 等同设备凭证,泄露需重新签发
|
||||
|
||||
## 6. 目录与入口
|
||||
|
||||
| 路径 | 说明 |
|
||||
|------|------|
|
||||
| `wsgi.py` | 应用入口 |
|
||||
| `app/factory.py` | create_app |
|
||||
| `app/routes.py` | 页面与 API |
|
||||
| `app/db.py` | SQLite 访问 |
|
||||
| `deploy/ecosystem.config.cjs` | PM2 |
|
||||
| `deploy/manage.sh` | 交互部署 |
|
||||
|
||||
## 7. 后续扩展(规划)
|
||||
|
||||
- 客户端完整激活窗与成交/Bars 自动上报(对接 `desktop/`)
|
||||
- 复盘筛选、统计面板、AI 点评(可对齐 crypto_monitor)
|
||||
- PostgreSQL 替换 SQLite(多写高并发时)
|
||||
- Nginx 反代与 HTTPS
|
||||
@@ -0,0 +1,60 @@
|
||||
# Ubuntu 服务器环境说明
|
||||
|
||||
## 系统要求
|
||||
|
||||
| 项 | 要求 |
|
||||
|----|------|
|
||||
| OS | Ubuntu **22.04 / 24.04** LTS |
|
||||
| 用户 | **root**(与 crypto_monitor 部署习惯一致) |
|
||||
| 内存 | 建议 ≥ 1GB |
|
||||
| 磁盘 | 建议 ≥ 10GB(含 K 线缓存增长) |
|
||||
| 网络 | 局域网内 Windows 交易机可访问 5800 |
|
||||
|
||||
## 安装路径与进程
|
||||
|
||||
| 项 | 值 |
|
||||
|----|-----|
|
||||
| 代码 | `/opt/gold_monitor` |
|
||||
| 虚拟环境 | `/opt/gold_monitor/.venv` |
|
||||
| 数据 | `/opt/gold_monitor/data/gold_monitor.db` |
|
||||
| 发布包 | `/opt/gold_monitor/releases/` |
|
||||
| 进程名 | PM2 `gold_monitor` |
|
||||
| 绑定 | `0.0.0.0:5800` |
|
||||
|
||||
## 依赖
|
||||
|
||||
一键脚本会安装:
|
||||
|
||||
- `git` `curl` `ca-certificates`
|
||||
- `python3` `python3-venv` `python3-pip`
|
||||
- Node.js 20.x + 全局 `pm2`
|
||||
- Python 包:见仓库根 `requirements.txt`(Flask、gunicorn、dotenv)
|
||||
|
||||
## PM2
|
||||
|
||||
```bash
|
||||
pm2 status
|
||||
pm2 logs gold_monitor
|
||||
pm2 restart gold_monitor
|
||||
pm2 save
|
||||
```
|
||||
|
||||
开机自启由 `deploy/lib/install.sh` 尝试执行 `pm2 startup`。
|
||||
|
||||
## 环境变量
|
||||
|
||||
文件:`/opt/gold_monitor/.env`(由 `.env.example` 生成)
|
||||
|
||||
| 变量 | 说明 |
|
||||
|------|------|
|
||||
| `FLASK_SECRET_KEY` | Session 密钥 |
|
||||
| `ADMIN_USER` / `ADMIN_PASSWORD` | 网页登录 |
|
||||
| `HOST` / `PORT` | 默认 `0.0.0.0` / `5800` |
|
||||
| `PUBLIC_BASE_URL` | 对外访问根 URL(激活展示用) |
|
||||
| `DATABASE_URL` | 默认 SQLite 文件路径 |
|
||||
|
||||
## 与交易机关系
|
||||
|
||||
- Ubuntu **不替代** Windows 上的 MT5。
|
||||
- 交易机运行通用 exe → 连本机 MT5 → API 上报到 Ubuntu。
|
||||
- 复盘浏览器访问 Ubuntu:5800 即可,不必在交易机上开网页服务。
|
||||
@@ -0,0 +1,58 @@
|
||||
# 使用文档(gold_monitor)
|
||||
|
||||
## 1. 登录网页
|
||||
|
||||
浏览器打开:`http://<服务器IP>:5800`
|
||||
默认:`admin` / `admin123`(部署后请修改)。
|
||||
|
||||
顶栏:
|
||||
|
||||
- **总览**:账户/机器数量、最近成交
|
||||
- **交易复盘**:列表与详情
|
||||
- **下载中心**:通用 exe + 激活码
|
||||
- **账户 / 机器**:标注管理
|
||||
|
||||
## 2. 标注账户与机器
|
||||
|
||||
### 账户
|
||||
|
||||
「账户」页新增:名称、券商、登录号、类型(模拟/美分/实盘)、备注。
|
||||
用于激活码绑定与复盘归属。
|
||||
|
||||
### 机器
|
||||
|
||||
可预登记机器名称与备注;也可不登记,**激活时自动创建**并写入设备指纹。
|
||||
|
||||
## 3. 下载通用包并首次激活
|
||||
|
||||
1. 打开 **下载中心**
|
||||
2. 选择要绑定的 **账户**(可选预绑定机器)→ **生成激活码**
|
||||
3. 下载 `黄金市价辅助.exe`(需管理员已放入 `releases/`)
|
||||
4. 在 Windows 上启动 exe:
|
||||
- 填写服务器地址,例如 `http://192.168.1.10:5800`
|
||||
- 输入激活码
|
||||
- 成功后本地保存 token(后续请求带 `X-Device-Token`)
|
||||
|
||||
同一通用包可装多台机器;**每台使用各自的激活码**。
|
||||
|
||||
## 4. 日常交易
|
||||
|
||||
1. 先登录本机 MT5
|
||||
2. 打开已激活的辅助 exe 下单 / 保本 / 平仓
|
||||
3. 客户端在成交或平仓时自动上报(接口见技术文档)
|
||||
|
||||
## 5. 网页复盘
|
||||
|
||||
1. 打开 **交易复盘**
|
||||
2. 点某笔 **打开复盘**
|
||||
3. 查看成交信息与 **M1 / M5 / M15 / H1** 四图
|
||||
4. 选择 **入场形式**(如「M15关键位+M1强吞没」)并填写备注 → 保存
|
||||
|
||||
> K 线依赖客户端上报缓存。若四图为空,请确认 exe 已上报 bars,或稍后在客户端补传。
|
||||
|
||||
## 6. 推荐练手流程
|
||||
|
||||
1. 美分/模拟账户在「账户」中建好并标注
|
||||
2. 每台电脑生成激活码并激活
|
||||
3. 按纪律交易,自动上报
|
||||
4. 每日网页复盘:标注亏单共性(位不对 / 形不对 / 违纪)
|
||||
Reference in New Issue
Block a user