feat(license): dual-path opsx-licence client alongside HMAC
Wire LIC-/LICOFF- activate/verify/heartbeat to licence.rlwj.cn/api, keep legacy HMAC accepted with deprecation banner, add instance_id fingerprint and licensing docs (product lokistack still needs admin create).
This commit is contained in:
1 parent
5f42d9f696
commit
af0298e994
13 files changed
+888
-37
No files matched your search
@@ -0,0 +1,74 @@
|
||||
# LokiStack × opsx-licence 对接说明
|
||||
|
||||
## 状态
|
||||
|
||||
- 代码:双路径已接入(`LIC-`/`LICOFF-` → opsx-licence;旧 HMAC 迁移窗口内仍接受并提示)。
|
||||
- 生产 product **`lokistack` 尚未在 licence.rlwj.cn 创建**(公开 `GET /api/v1/products/code/lokistack` 返回「产品不存在」)。
|
||||
- 默认 API:`LICENSE_API_BASE=https://licence.rlwj.cn/api`(可用环境变量覆盖;`l123` 仅网络失败备灾)。
|
||||
|
||||
## Plan(产品锁)
|
||||
|
||||
| plan_type | 时长 | 实例(max_devices) |
|
||||
|-----------|------|---------------------|
|
||||
| trial | 14 天 | 1 |
|
||||
| yearly | 365 天 | 默认 1,可加购 |
|
||||
| perpetual | 0(永久) | 默认 1,可加购 |
|
||||
|
||||
计费按**部署实例**,不计登录席位。`instance_id` = `DATA_DIR/instance.id` 机器指纹,无 PII。
|
||||
|
||||
## 管理端创建 product(需管理员登录,本说明不含账密)
|
||||
|
||||
1. 打开 `https://licence.rlwj.cn` 管理后台并登录。
|
||||
2. **产品** → 新建:
|
||||
- name: `LokiStack`
|
||||
- code: `lokistack`(必须完全一致)
|
||||
- features: `log_analysis`, `log_alerts`, `ai_ops`, `audit_log`
|
||||
- price_model: `perpetual`(或按需)
|
||||
- status: 启用
|
||||
3. **定价计划** → 为该产品新建三条:
|
||||
- trial / 14 / max_devices=1 / price=0
|
||||
- yearly / 365 / max_devices=1
|
||||
- perpetual / 0 / max_devices=1
|
||||
4. **许可证** → 选客户 + 产品 `lokistack` 签发 `LIC-`;离线场景签发 `LICOFF-`(须绑定目标实例的 `instance_id`)。
|
||||
|
||||
### 等价 Admin API(需 Bearer;勿把 token 写进仓)
|
||||
|
||||
```bash
|
||||
# 创建产品
|
||||
curl -sS -X POST 'https://licence.rlwj.cn/api/v1/products' \
|
||||
-H "Authorization: Bearer <ADMIN_TOKEN>" -H 'Content-Type: application/json' \
|
||||
-d '{"name":"LokiStack","code":"lokistack","version":"1.0.0","description":"LokiStack Pro","features":["log_analysis","log_alerts","ai_ops","audit_log"],"price":0,"price_model":"perpetual","status":1}'
|
||||
|
||||
# 创建计划(替换 PRODUCT_ID)
|
||||
curl -sS -X POST 'https://licence.rlwj.cn/api/v1/plans' \
|
||||
-H "Authorization: Bearer <ADMIN_TOKEN>" -H 'Content-Type: application/json' \
|
||||
-d '{"product_id":PRODUCT_ID,"name":"体验","plan_type":"trial","price":0,"currency":"CNY","duration":14,"max_devices":1,"features":["Pro","体验","1 实例"],"sort_order":0,"status":1}'
|
||||
# yearly duration=365;perpetual duration=0 —— 同结构各建一条
|
||||
```
|
||||
|
||||
公开校验:
|
||||
|
||||
```bash
|
||||
curl -sS 'https://licence.rlwj.cn/api/v1/products/code/lokistack'
|
||||
```
|
||||
|
||||
## 旧 HMAC 迁移
|
||||
|
||||
- 已发出的本地 HMAC 码:**迁移窗口内继续可用**,设置页黄条提示换发;**禁止静默清码**。
|
||||
- 换发:后台为客户建 `lokistack` 许可证 → 客户在设置页粘贴新 `LIC-`/`LICOFF-` 覆盖激活。
|
||||
- 窗口结束后再关 HMAC 路径(另开刀,需产品点头)。
|
||||
|
||||
## 环境变量
|
||||
|
||||
| 变量 | 含义 |
|
||||
|------|------|
|
||||
| `LICENSE_API_BASE` 或 `OPSX_LICENSE_API_BASE` | 覆盖默认 `https://licence.rlwj.cn/api` |
|
||||
|
||||
## 对齐 Shell 的差异
|
||||
|
||||
| | OpsxShell | LokiStack |
|
||||
|--|-----------|-----------|
|
||||
| product_code | `opsxshell` | `lokistack` |
|
||||
| 绑定字段 | `device_id` | `instance_id`(同语义) |
|
||||
| 默认 Base | l123 主 / 国内备 | **国内主** / l123 备 |
|
||||
| 落盘 | `license.opsx` | JsonDB `license` 字段 |
|
||||
Reference in new issue
Block a user