+ 登录账号
+ 修改后立即生效,并写入服务器 .env(HUB_USERNAME / HUB_PASSWORD).
+
+
+{% endblock %}
diff --git a/使用说明.md b/使用说明.md
index c78f854..6d2b1db 100644
--- a/使用说明.md
+++ b/使用说明.md
@@ -15,11 +15,9 @@ OKX **期权多机中控**:在一个入口查看多台期权客户端的持仓
| **本仓库 crypto_okx_hub** | 中控:登录、实例登记、多机总览、内嵌/新标签打开 | [https://git.bz121.com/dekun/crypto_okx_hub.git](https://git.bz121.com/dekun/crypto_okx_hub.git) |
| **crypto_okx** | 期权客户端(执行机):密钥、开平仓、模拟盘、持仓与提醒 | [https://git.bz121.com/dekun/crypto_okx.git](https://git.bz121.com/dekun/crypto_okx.git) |
-关系简述:
-
-- 每个策略 / 账户部署一台(或多进程)**crypto_okx**,挂 **公网域名**。
-- **中控只部署一次**(可局域网电脑或云机),在后台登记各客户端的公网 URL 与 Bridge Token。
-- **交易所 API 密钥只在客户端**;中控不存、不代下单(第一期)。
+- 每个策略 / 账户部署一台 **crypto_okx**,挂 **公网域名**。
+- **中控只部署一次**(Ubuntu + PM2),在后台登记各客户端公网 URL 与 Bridge Token。
+- **交易所 API 密钥只在客户端**;中控不存、不代下单。
---
@@ -28,35 +26,30 @@ OKX **期权多机中控**:在一个入口查看多台期权客户端的持仓
| 功能 | 说明 |
|------|------|
| 多机持仓总览 | 按客户端卡片展示在线状态、sim/live、浮盈、持仓摘要 |
-| 内嵌打开 | 在中控工作台 iframe 中打开该客户端(默认) |
+| 内嵌打开 | 在中控工作台 iframe 中打开该客户端 |
| 新标签打开 | 浏览器新标签直达同一客户端公网地址 |
| 实例管理 | 增删改:名称、公网 URL、Token、标签、是否启用 |
+| 系统设置 | 修改中控登录用户名 / 密码 |
**不做:** 中控里直接下单、改客户端 env、保管 OKX 密钥。
---
-## 3. 使用流程(实现后)
+## 3. 使用流程
-1. 部署并登录中控(账号见中控 `.env`)。
-2. **实例管理** 中添加客户端:
- - 名称(如 `ETH-主策略`)
- - 公网根地址(如 `https://okx-eth.example.com`)
- - Bridge Token(与该客户端 `.env` 的 `HUB_BRIDGE_TOKEN` 一致)
-3. 打开 **总览**:确认各机在线且有持仓/空仓数据。
-4. 点 **打开** → 进入内嵌工作台操作期权;需要独立窗口时点 **新标签打开**。
+1. 部署并登录中控(默认 **admin / admin123**)。
+2. **系统设置** 中建议立刻修改密码。
+3. **实例** 中添加客户端:名称、公网根地址、Bridge Token(与客户端 `HUB_BRIDGE_TOKEN` 一致)。
+4. 打开 **总览**:确认各机在线。
+5. 点 **打开** → 内嵌工作台;需要独立窗口时点 **新标签打开**。
---
## 4. 对客户端的要求
-每台 crypto_okx 需(实现阶段在客户端仓库完成):
-
-1. 公网 HTTPS(或至少浏览器与中控都能访问的 URL)。
-2. 配置 `HUB_BRIDGE_TOKEN`,并开放中控约定的只读快照 API。
-3. 允许被中控页面 iframe 嵌入(或提供 embed 入口 + 短期登录链)。
-
-客户端日常操作仍以该机页面为准;中控是「总台 + 快捷入口」。
+1. 公网 HTTPS(或浏览器与中控都能访问的 URL)。
+2. 配置 `HUB_BRIDGE_TOKEN`,开放只读快照 API。
+3. 允许被中控页面 iframe 嵌入(`/embed` + 短期 SSO)。
---
@@ -67,14 +60,13 @@ OKX **期权多机中控**:在一个入口查看多台期权客户端的持仓
| 总览拉数 | 中控服务器 → 客户端公网 URL | 中控出口能访问客户端 |
| 内嵌/新标签 | 操作员浏览器 → 客户端公网 URL | 操作员网络能打开客户端 |
-中控放在 **局域网** 时:只要上面两条仍成立即可(常见:客户端公网域名,人在家访问局域网中控)。
-
---
## 6. 文档索引
| 文档 | 内容 |
|------|------|
-| [设计文档.md](./设计文档.md) | 架构、数据表、API 约定、验收标准 |
-| [部署文档.md](./部署文档.md) | 安装、环境变量、与客户端联调 |
+| [设计文档.md](./设计文档.md) | 架构、数据表、API 约定 |
+| [部署文档.md](./部署文档.md) | Ubuntu 一键部署 / PM2 |
+| [deploy/README.md](./deploy/README.md) | 部署脚本说明 |
| [README.md](./README.md) | 仓库入口摘要 |
diff --git a/设计文档.md b/设计文档.md
index c49b4d9..4f710d7 100644
--- a/设计文档.md
+++ b/设计文档.md
@@ -38,7 +38,7 @@
| **crypto_okx** | 期权客户端 / 执行机 | https://git.bz121.com/dekun/crypto_okx.git |
客户端对外:**公网域名**(如 `https://okx-eth.example.com`)。
-中控可部署在:**局域网机器** 或云服务器(第一期可用局域网)。
+中控部署:**Ubuntu 云机 + PM2**(与客户端同一套一键部署方式,不部署 Windows)。
协议靠约定对齐,不强制 monorepo。客户端侧需提供(实现阶段在 `crypto_okx` 补):
@@ -55,7 +55,7 @@
│ │ iframe / 新标签打开 │ 公网域名 + 密钥/DB │
│ ┌───────────────┐ │ └──────────────────────┘
│ │ crypto_okx_hub│ │ 中控服务端拉快照
-│ │ (局域网或云) │──┼────────────────────────────▶┌──────────────────────┐
+│ │ (Ubuntu/PM2) │──┼────────────────────────────▶┌──────────────────────┐
│ └───────────────┘ │ GET /api/hub/options/... │ crypto_okx Worker B │
└─────────────────────┘ Header: X-Hub-Token └──────────────────────┘
```
diff --git a/部署文档.md b/部署文档.md
index 0ef1acd..93edc9c 100644
--- a/部署文档.md
+++ b/部署文档.md
@@ -1,38 +1,61 @@
-# crypto_okx_hub 部署文档
+# crypto_okx_hub 部署文档(Ubuntu)
**仓库:** [https://git.bz121.com/dekun/crypto_okx_hub.git](https://git.bz121.com/dekun/crypto_okx_hub.git)
-配套说明:**[使用说明.md](./使用说明.md)** · **[设计文档.md](./设计文档.md)**
+配套说明:**[使用说明.md](./使用说明.md)** · **[设计文档.md](./设计文档.md)** · **[deploy/README.md](./deploy/README.md)**
关联客户端仓库:[crypto_okx](https://git.bz121.com/dekun/crypto_okx.git)
-> 第一期骨架已可用:登录、登记实例、总览拉快照、工作台内嵌/新标签(SSO)。
+> 中控与客户端一样:**仅 Ubuntu + PM2 一键部署**。不提供 Windows 部署。
---
-## 1. 部署拓扑(推荐)
+## 1. 一键部署(推荐)
-```
-[局域网 PC 或一台云机] [云服务器 A] [云服务器 B]
- crypto_okx_hub ──拉快照──▶ crypto_okx crypto_okx
- (中控只一份) 公网域名 A 公网域名 B
- HUB_BRIDGE_TOKEN=xxx HUB_BRIDGE_TOKEN=yyy
+新服务器(免 clone):
+
+```bash
+curl -fsSL https://git.bz121.com/dekun/crypto_okx_hub/raw/branch/main/deploy/manage.sh | bash
```
-- 客户端:**必须**能被浏览器与中控以 **公网域名(建议 HTTPS)** 访问。
-- 中控:可局域网;需能访问各客户端公网 URL。
+已安装:
+
+```bash
+bash /opt/crypto_okx_hub/deploy/manage.sh
+```
+
+菜单:
+
+1. **一键部署** — 系统依赖、Node/PM2、venv、启动 `crypto_okx_hub`
+2. **一键卸载** — 备份 `.env` / `hub.db` → 停 PM2 → 移走目录
+3. **更新** — git pull + pm2 restart(或含 pip)
+4. **仅检测** — 不安装
+
+安装路径:`/opt/crypto_okx_hub`,默认端口 **5100**,默认登录 **admin / admin123**。
---
-## 2. 中控环境变量(草案)
+## 2. 部署拓扑
-实现后提供 `.env.example`,核心项预计包括:
+```
+[Ubuntu 云机] [云服务器 A] [云服务器 B]
+ crypto_okx_hub ──拉快照──▶ crypto_okx crypto_okx
+ (中控只一份,PM2) 公网域名 A 公网域名 B
+ HUB_BRIDGE_TOKEN=xxx HUB_BRIDGE_TOKEN=yyy
+```
+
+- 客户端:**必须**能被浏览器与中控以 **公网域名(建议 HTTPS)** 访问。
+- 中控:Ubuntu + PM2;需能访问各客户端公网 URL。
+
+---
+
+## 3. 中控环境变量
| 变量 | 说明 |
|------|------|
-| `APP_HOST` / `APP_PORT` | 例如 `0.0.0.0` / `5100` |
-| `HUB_USERNAME` / `HUB_PASSWORD` | 中控登录 |
-| `FLASK_SECRET_KEY` | Session |
-| `DB_PATH` | 注册表 SQLite,默认 `./hub.db` |
+| `APP_HOST` / `APP_PORT` | 默认 `0.0.0.0` / `5100` |
+| `HUB_USERNAME` / `HUB_PASSWORD` | 默认 `admin` / `admin123`;也可在页面「系统设置」修改 |
+| `FLASK_SECRET_KEY` | Session;部署脚本可自动生成 |
+| `DB_PATH` | 注册表 SQLite,默认 `hub.db` |
| `HUB_PULL_INTERVAL_SEC` | 总览拉取间隔,默认 `10` |
| `HUB_PULL_TIMEOUT_SEC` | 单机超时,默认 `5` |
@@ -40,58 +63,23 @@
---
-## 3. 客户端侧(crypto_okx)联调清单
-
-在每台客户端 `.env`(名称以实现为准):
+## 4. 客户端侧(crypto_okx)联调清单
| 变量 | 说明 |
|------|------|
-| `HUB_BRIDGE_TOKEN` | 与中控登记的 Token 一致,足够长随机串 |
+| `HUB_BRIDGE_TOKEN` | 与中控登记的 Token 一致 |
| (可选)`HUB_EMBED_FRAME_ANCESTORS` | 允许嵌入的中控 Origin |
-并确认:
-
-1. 公网 DNS → 该机;反向代理 HTTPS。
-2. 快照 API 返回 `ok: true`(见设计文档 §6)。
-3. Embed 路径可打开(默认倾向 `/embed`)。
-
-防火墙可选:仅放行中控出口 IP 访问 `/api/hub/*`。
-
----
-
-## 4. 安装步骤(实现后)
-
-本地 / 局域网示意:
-
-```bash
-git clone https://git.bz121.com/dekun/crypto_okx_hub.git
-cd crypto_okx_hub
-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://<中控局域网IP>: