feat(server,dashboard): 引入多工作流数据隔离、安全中间件与前端 ESM 模块化重构
- server: 实现按 workflow_name 的多工作流数据隔离与旧数据库平滑迁移机制 - server: 新增 API Key 认证(auth)、限流中间件(rate_limit)与运维备份接口(admin) - server: 统一 AppError 错误处理体系,重构调度器 scheduler 支持工作流级重置与抢占 - node: 节点 ID 缺失时自动生成随机 UUID,原生支持 `docker compose --scale node=N` 动态扩容 - dashboard: 前端模块化重构(state/api/components),升级 CSS 变量设计系统与 Toast 通知 - docker/docs: 更新 /healthz 健康检查、部署脚本 IP 配置及数据库设计文档
This commit is contained in:
@@ -50,6 +50,69 @@ DCTS_MAX_SLOTS=4
|
||||
|
||||
---
|
||||
|
||||
## 🔐 安全与鉴权 (Security & Auth)
|
||||
|
||||
DCTS 采用**分层鉴权**模型,公网部署务必按下表配置凭据。
|
||||
|
||||
### 鉴权主体
|
||||
|
||||
| 主体 | 环境变量 | 用途 | 持有方式 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **Admin** | `DCTS_ADMIN_TOKEN` | Dashboard 登录、工作流 CRUD、起停计算 | 人工,Dashboard 输入 |
|
||||
| **Enrollment** | `DCTS_ENROLLMENT_TOKEN` | 节点首次注册领取专属 token | 部署脚本/人工 |
|
||||
| **Node** | _(服务端自动颁发)_ | 心跳、领任务、上报、下载数据 | 节点本地 `.node_token` 文件(权限 600) |
|
||||
|
||||
> **兼容**:旧变量 `DCTS_AUTH_TOKEN` 仍有效,自动同时充当 Admin + Enrollment 凭据(建议迁移到上面两个独立变量)。
|
||||
|
||||
### 节点注册流程(L2)
|
||||
|
||||
1. 启动时优先读取本地 `runtime/.node_token`;不存在则用 `DCTS_ENROLLMENT_TOKEN` 调 `/api/node/register`。
|
||||
2. 服务端注册成功后**颁发该节点专属 token**(仅返回一次,DB 只存 SHA-256 hash),节点持久化到 `.node_token`。
|
||||
3. 后续所有请求携带专属 token;服务端按 token 反查 `node_id` 鉴权。
|
||||
4. **吊销/重发**:通过 Dashboard「节点凭据管理」面板或下方管理 API 操作。
|
||||
|
||||
### 节点凭据管理 API(Admin 角色)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| :--- | :--- | :--- |
|
||||
| GET | `/api/admin/nodes` | 列出全部节点及凭据状态(在线/token 有效/吊销/颁发时间) |
|
||||
| POST | `/api/admin/nodes/:node_id/revoke` | 吊销指定节点 token(立即失效,幂等) |
|
||||
| POST | `/api/admin/nodes/:node_id/reissue` | 重新颁发 token,返回新明文(旧 token 失效) |
|
||||
|
||||
所有端点要求 Admin token(`Authorization: Bearer <DCTS_ADMIN_TOKEN>`)。被攻陷节点持有的 node token 无权访问这些端点,因此吊销/重发始终是管理员主动行为。
|
||||
|
||||
### 公网部署清单
|
||||
|
||||
```bash
|
||||
# 生成强随机 token
|
||||
openssl rand -hex 32
|
||||
```
|
||||
|
||||
```env
|
||||
# .env(服务端 + 节点共享此文件时各自读取所需变量)
|
||||
DCTS_ADMIN_TOKEN=<强随机值>
|
||||
DCTS_ENROLLMENT_TOKEN=<强随机值>
|
||||
```
|
||||
|
||||
**TLS 反代**(推荐 Caddy,自动 HTTPS):
|
||||
|
||||
```bash
|
||||
# 1. 编辑 Caddyfile,把 dcts.example.com 改为真实域名
|
||||
# 2. 启用 public profile 拉起反代
|
||||
docker compose --profile public up -d --build
|
||||
# 3. 节点的 DCTS_SERVER_URL 改为 https://你的域名
|
||||
```
|
||||
|
||||
### 默认安全策略
|
||||
|
||||
- **CORS**:仅允许同源或本地 Origin(localhost / 127.0.0.1 / [::1])。
|
||||
- **请求体限制**:普通 API 10MB,任务上报 256MB。
|
||||
- **安全响应头**:CSP / `X-Content-Type-Options` / `X-Frame-Options` / `Referrer-Policy` 默认开启。
|
||||
- **审计日志**:所有写操作(POST/PUT/DELETE)记录 `subject + method + path`(不记请求体)。
|
||||
- **应急调试**:`DCTS_AUTH_DISABLE=1` 跳过全部鉴权(仅本地,切勿生产)。
|
||||
|
||||
---
|
||||
|
||||
## 🏛️ Workspace 核心模块
|
||||
|
||||
| Crate / Tool | 类型 | 职责说明 | 详细文档 |
|
||||
@@ -68,7 +131,7 @@ DCTS_MAX_SLOTS=4
|
||||
系统技术细节按以下主题组织:
|
||||
|
||||
- 📐 **[系统架构 (Architecture)](docs/architecture.md)**:Master-Worker 拓扑结构、任务生命周期与心跳机制。
|
||||
- 🔗 **[API 参考 (API Reference)](docs/api_reference.md)**:Axum RESTful 接口规格明细与鉴权方式。
|
||||
- 🔗 **[API 参考 (API Reference)](docs/api.md)**:Axum RESTful 接口规格明细与鉴权方式。
|
||||
- 💾 **[数据库设计 (Database)](docs/database.md)**:SQLite 数据表结构模式与队列状态机设计。
|
||||
- ⚙️ **[物理链设计 (Design)](docs/design.md)**:4 阶段 TLUSTY/SYNSPEC 计算链、冷启动与种子步进(Seed Step)降级重试逻辑。
|
||||
- 📦 **[部署运维指南 (Deployment)](docs/deployment.md)**:生产环境部署、Systemd 服务配置、安全令牌与日志管理。
|
||||
|
||||
Reference in New Issue
Block a user