feat: accept CLIENT_API_KEY on /license page.

Users can paste the key from the seller instead of editing license.env; it persists in license_state.json.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-17 17:20:47 +08:00
parent 863da10d1f
commit 8eefc6cfd5
6 changed files with 91 additions and 32 deletions
+14 -10
View File
@@ -7,8 +7,8 @@
1. 部署并启动本系统(三所或中控任一页面)。
2. 浏览器打开 **`/license`**(未授权时会自动跳转)。
3. 复制页面上的 **设备 ID**
4. 联系微信 **dekun03** 购买(备注设备 ID),按约定支付 **USDT** 后获得激活码。
5.`/license` 粘贴激活码并兑换
4. 联系微信 **dekun03** 购买(备注设备 ID),按约定支付 **USDT** 后获得 **CLIENT_API_KEY**激活码。
5.`/license` 填写 **CLIENT_API_KEY** 与激活码并兑换(密钥会写入本地 `data/license_state.json`,下次可留空)
## 定价(整机授权)
@@ -22,29 +22,33 @@
- 换机:旧设备立即失效,需换机码(向卖家申请)。
- USDT 收款地址由卖家提供(链与地址以当时通知为准)。
## 环境变量
## CLIENT_API_KEY(推荐)
在**仓库根目录**创建 **`license.env`**(勿提交 Git):
卖家在授权站后台 **系统设置** 可查看/复制 `CLIENT_API_KEY`,发给用户后填入软件 `/license` 页即可,**不必再手改 `license.env`**
优先级:环境变量 `LICENSE_CLIENT_KEY` > 授权页保存的本地密钥。
## 环境变量(可选)
在**仓库根目录**创建 **`license.env`**(勿提交 Git),可预先写好密钥:
```bash
cd /opt/crypto_monitor_user # 或你的安装目录
cp license.env.example license.env
# 编辑 license.envLICENSE_CLIENT_KEY 必须与授权站 CLIENT_API_KEY 完全一致
```
```env
LICENSE_API_URL=https://sq.bz121.com
LICENSE_CLIENT_KEY=与授权站 CLIENT_API_KEY 相同
# 可选:与授权站 CLIENT_API_KEY 相同;也可只在 /license 页填写
# LICENSE_CLIENT_KEY=
# 可选:断网宽限小时数(默认 72
# LICENSE_OFFLINE_GRACE_HOURS=72
# 本地调试可临时关闭门禁(生产勿开)
# LICENSE_DISABLED=false
```
改完后**重启** Flask / 中控进程。页面若提示未配置 `LICENSE_CLIENT_KEY`,就是根目录缺少有效的 `license.env`
改完环境变量后**重启** Flask / 中控进程。也可在各实例 `.env` 里写同样的 `LICENSE_*`(不要留空键)
也可在各实例 `.env` 里写同样的 `LICENSE_*`(不要留空键)。
许可状态保存在仓库根目录 **`data/license_state.json`**(三所 + 中控共用)。
许可状态保存在仓库根目录 **`data/license_state.json`**(三所 + 中控共用,含本地保存的 `client_api_key`)。
系统约每 **3 天** 向授权站校验一次;明确过期或换机后旧设备将无法使用。