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:
fmq
2026-07-28 21:54:02 +08:00
parent 4b4238d702
commit b91f1e4fa5
59 changed files with 7697 additions and 1490 deletions
+64 -1
View File
@@ -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 操作。
### 节点凭据管理 APIAdmin 角色)
| 方法 | 路径 | 说明 |
| :--- | :--- | :--- |
| 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**:仅允许同源或本地 Originlocalhost / 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 服务配置、安全令牌与日志管理。