0d6cd375798e2843c770bdbb632648584e7e3dfd
- Monorepo: NestJS API (Fastify) + React web (antd/ProComponents) + shared packages - PostgreSQL/Prisma (unified resources, relations graph, audit, events, jobs) - Auth/RBAC/workspace isolation, credential vault (AES-256-GCM) - Servers/SSH, Docker discovery & lifecycle, Job Center - Websites & deployments (git provider credential clone, env, health verification) - Domains/DNS (Cloudflare adapter), certificates (TLS probe), monitoring - Automation (cron/event/webhook HMAC + notifications), AI Gateway, MCP (29 tools) - AI chat window (LLM function-calling + rules fallback, SSE streaming, approvals) - Notes: Vditor WYSIWYG markdown editor, non-blocking autosave - Tests: 35 unit/security tests; UI audit clean (desktop+mobile, deep links)
DevOS — Developer Work OS
统一管理服务器、容器、网站、域名、部署、监控与自动化的开发者工作操作系统。
架构遵循 Docs/devos-v1/(统一资源模型:Resource + Action + Event + Agent,模块化单体)。
技术栈
| 层 | 技术 |
|---|---|
| 后端 | NestJS 11 + Fastify 适配器 + zod DTO + Prisma 6 |
| 前端 | React 18 + Ant Design 5 + ProComponents + TanStack Query + Zustand |
| 数据 | PostgreSQL 16 + Redis 7(Docker Compose) |
| 运行时 | Bun(包管理/测试/运行;后端编译为 CommonJS 后由 Bun/Node 运行) |
| 集成 | SSH (ssh2)、Docker(CLI over SSH / 本机 socket)、Cloudflare DNS |
目录结构
devos/
├── apps/
│ ├── api/ # NestJS 模块化单体(/api/v1 + /api/v1/mcp)
│ └── web/ # React SPA(ProLayout)
├── packages/
│ ├── types/ # 共享领域类型
│ ├── auth/ # JWT(HS256) + 密码哈希(零第三方依赖)
│ ├── api-client/ # 浏览器 API 客户端
│ └── ui/ # 共享 UI(预留)
├── prisma/ # schema + migrations + seed
├── tests/ # bun test 单元测试
├── infra/ssh-target/ # 开发用 SSH 目标机(--profile dev-target)
├── docker-compose.yml
└── Docs/devos-v1/ # 规范文档(唯一事实源)
快速开始
# 1. 基础设施(PostgreSQL 15432 / Redis 16379,避免与本机其它实例冲突)
docker compose up -d postgres redis
# 2. 安装依赖
bun install
# 3. 数据库迁移 + 种子(管理员账号来自 .env)
bunx prisma migrate deploy
bun run prisma/seed.ts
# 4. 构建
bun run build:packages
bun run build:api
bun run build:web
# 5. 启动 API(默认 :4100)
bun apps/api/dist/main.js
# 6. 开发前端(任一 dev server 端口,API 直连 :4100)
bun --hot apps/web/index.html
默认管理员:admin@devos.local,密码为部署时 .env 中 SEED_ADMIN_PASSWORD 的值(不要使用示例值上线;本实例已轮换为随机密码)。
环境变量(.env)
| 变量 | 说明 |
|---|---|
PORT / HOST |
API 监听(默认 4100 / 0.0.0.0) |
APP_SECRET |
JWT HS256 密钥(必填) |
ENCRYPTION_KEY |
凭据信封加密主密钥,64 位 hex(必填) |
DATABASE_URL |
PostgreSQL 连接串(必填) |
REDIS_URL |
Redis(任务派发信号,可选降级) |
AI_PROVIDER_* |
OpenAI 兼容 AI Provider(可选;缺省用启发式规划器) |
功能地图(V1 = 15-ZCODE-DEV-SPEC 任务 001–018)
- 认证与租户:注册/登录(HS256 JWT 12h)、工作区 + 成员 RBAC(OWNER/ADMIN/MEMBER/VIEWER)、workspace isolation 全层强制
- 统一资源:
resources身份/状态 + 类型化领域表(servers/websites/domains/containers/deployments/monitors/credentials/automations/ai_runs)+ 关系图谱(resource_relations) - 审计:每个变更写
audit_logs(actor/workspace/action/risk/requestId,元数据自动脱敏) - 服务器:SSH 连通性探测、命令执行(危险命令 CRITICAL 标记)、重启(显式 confirm)、local provider(本机 docker socket)
- Docker 发现:容器 list/inspect/restart(SSH
dockerCLI 或 Engine API 双适配),容器入资源图谱(runs_container 关系) - 网站与部署:网站 CRUD + 关系;部署 = QUEUED→RUNNING→SUCCEEDED/FAILED 异步流水线(git 拉取 → docker build → 容器替换 → curl 健康验证),步骤级日志与进度、运行中取消(步骤间生效)
- 域名:Cloudflare(token 凭据)与 MANUAL 双 provider;记录读取/写入/删除 + 审计
- 监控:HTTP/TCP 检查调度器(interval),结果历史,
website.down/website.recovered事件 - 事件总线:规范事件名(
deployment.success等),持久化events+ 进程内分发 + Redis PUBLISH - 任务队列:Postgres
jobs状态机(PENDING/RUNNING/…/DEAD)+ SKIP LOCKED 认领 + 指数退避 + 僵死回收 + Redis 派发信号 - 自动化:Trigger(MANUAL/CRON/EVENT/WEBHOOK)→ Condition(path/op/value)→ Action(LOG/WEBHOOK/DEPLOY_WEBSITE),重试/超时/执行历史
- AI Gateway:objective → 计划(LLM 或启发式)→ 风险评估 →(HIGH/CRITICAL 需审批)→ 工具执行 → 领域验证 → 报告;工具层与 UI/MCP 共享同一授权与审计
- MCP:
POST /api/v1/mcp(Streamable HTTP,无状态),Bearer JWT 鉴权,actorType=MCP 审计;工具 14 个(server/website/deployment/domain/automation)
测试
bun test # 26 个用例:JWT(alg 混淆/过期/篡改)、cron、脱敏、危险命令、docker 输出解析、条件评估
MCP 接入示例
curl -X POST http://localhost:4100/api/v1/mcp \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
安全设计(11-SECURITY.md)
- 凭据 AES-256-GCM 信封加密,AAD 绑定 workspaceId;无任何明文读取端点
- 日志/审计/工具结果统一脱敏(键名+内嵌 token 模式)
- HIGH/CRITICAL 动作(部署、重启、凭据变更)需显式确认或审批
- MCP 不是绕过安全旁路:同 JWT、同授权、同审计
- API 错误契约:
{error:{code,message,requestId}},不暴露堆栈与机密
AI 聊天(产品核心入口)
/ai 是对话式管理入口:用自然语言完成查询、创建任务/笔记、部署网站、重启容器、DNS 解析、URL 总结存笔记等全部操作。
- 双引擎:配置 LLM(
AI_PROVIDER_*)时走 OpenAI function-calling 多轮编排(工具白名单 29 个,覆盖增删改查与复合流程);未配置时内置规则引擎,核心操作开箱可用 - 安全:HIGH/CRITICAL 操作(部署/重启容器/删除)不直接执行,聊天中出审批卡片,确认后经 AiRun 管线执行;所有工具调用与人工/MCP 走同一授权与审计
- 验证:以 Mock LLM(脚本化 function-calling)完成端到端验证 —— 「总结 保存到 Note」→ web.fetch + note.create ✓ 「把 安装到 JP-001 并用 xx.com 在 CF 代理解析」→ repository.createFromUrl + server.find + domain.find + website.create + domain.upsertRecord(proxied) ✓ + website.deploy 转审批 → 用户确认 → 部署 job 执行 ✓
Notes AI 助手与配置
笔记页(/notes)为双栏笔记应用:TipTap 富文本(标题/列表/任务列表/代码块/引用 + 占位符 + 自动保存 1.2s)+ 置顶/标签/搜索 + AI 助手。
AI 助手动作:续写、总结要点、润色、中译英、英译中、生成大纲、起标题(选中文字后可只处理选区)。
启用 AI:在 .env 配置任意 OpenAI 兼容端点后重启:
AI_PROVIDER_BASE_URL=http://127.0.0.1:23030/openai/v1 # 示例:本机 claude-relay
AI_PROVIDER_API_KEY=<你的访问令牌>
AI_PROVIDER_MODEL=claude-sonnet-4-5
systemctl restart devos-api
未配置时 AI 菜单会明确提示,不影响其它功能。
Phase 2 增量(Docs/devos-v1-phase2)
| 阶段 | 内容 | 状态 |
|---|---|---|
| A 安全加固 | 生产 secret 校验、注册开关(ENABLE_REGISTRATION,生产默认关)、登录/注册限流、webhook HMAC+防重放、默认密码轮换、测试凭据清理、9 个安全回归测试 |
✅ |
| B 资源图谱 | 关系类型标准化(RELATION_TYPES 大写规范 + 数据迁移)、删除影响检查(GET /resources/:id/relations/impact)、项目页(Projects 聚合关系与活动) |
✅ |
| C 基础设施 | 服务器 stats(uptime/CPU/内存/磁盘/Top 进程)、Docker start/stop/logs/stats/images、Job Center(列表/详情/重试/取消) | ✅ |
| D 网站部署 | GitProviderConnection(GitHub/GitLab/Gitea 适配器)、Repository 聚合 + 凭据克隆(token 不进 URL/不残留 .git/config)、Website environment、部署 buildStrategy/deployStrategy/verification 记录 | ✅ |
| E 生产力 | Tasks(5 状态看板字段)、Notes(markdown+预览;TipTap 留待下迭代)、Certificates(TLS 探针+到期预警);Email 模块延后 | ✅(Email 延后) |
| F 自动化 | PATCH 编辑、HMAC webhook、新动作(CONTAINER_RESTART/TASK_CREATE/NOTE_CREATE/NOTIFICATION_SEND)+ 站内通知 | ✅ |
| G/H AI+MCP | 工具注册表扩至 18 个(task.list/create、note.create、container.restart 等)、启发式规划器新场景(故障诊断/任务记录/容器重启)、MCP 同步暴露 | ✅ |
| I 统一 UX | 全局搜索(/search + 头部入口 ⌘K 提示)、通知中心(铃铛+未读数)、任务中心页、项目页、主题切换(亮/暗) |
✅ |
新增 API 一览:/git/*、/tasks、/notes、/certificates、/jobs、/search、/notifications、/automations/:id(PATCH)、/servers/:id/stats、/servers/:id/images、/containers/:id/start|stop|logs|stats、/resources/:id/relations/impact。
生产部署(本机)
- systemd 常驻:
systemctl status devos-api(/etc/systemd/system/devos-api.service,监听 127.0.0.1:4100,自动重启/开机自启) - API 同进程托管 Web 静态资源与 SPA fallback(
apps/web/dist),nginx 仅纯反代 - 域名:
ldns devos.opentest.cc 127.0.0.1:4100(nginx 反代 + Cloudflare DNS/CDN) - 线上地址:https://devos.opentest.cc
更新部署流程:
bun run build:api && bun run build:web && systemctl restart devos-api
已知限制(V1 范围内取舍)
bun --hotdev server 下 ProComponents 存在 CJS 互操作问题(生产 bundle 与 nginx 部署不受影响)- 登出为无状态(客户端丢弃 JWT);撤销列表留待 V2
- Webhook 触发的自动化以
X-Webhook-Secret头校验(HMAC 签名留待 V2)
Languages
TypeScript
99.8%