DevOS v1 数据库文档
PostgreSQL 为系统记录源;Prisma 为 ORM。迁移位于 prisma/migrations/(基线 20260908000000_init)。
表名统一 snake_case(@@map);列名为 camelCase(Prisma 默认)。
表清单
身份与租户
| 表 |
说明 |
users |
平台用户(argon2id/scrypt 密码哈希) |
workspaces |
租户/安全边界 |
workspace_members |
用户-工作区关系 + 角色(OWNER/ADMIN/MEMBER/VIEWER),UNIQUE(workspaceId,userId) |
统一资源模型
| 表 |
说明 |
resources |
资源身份/发现/状态公共字段(type/name/provider/status/metadata);领域表经 resourceId 一对一关联 |
resource_relations |
有向关系边(UNIQUE source+target+relationType),如 deployed_on / runs_container / has_domain / resolves_to / monitors / has_deployment |
索引:workspaceId、(type,status)、(workspaceId,type)、关系端点。
凭据与合规
| 表 |
说明 |
credentials |
AES-256-GCM 密文(encryptedData JSON:iv/tag/data,base64;AAD=workspaceId) |
audit_logs |
每个变更一条:actorType/actorId/action/resource/riskLevel/status/requestId/ip/metadata(已脱敏)。索引 (workspaceId,createdAt)、(resourceType,resourceId) |
events |
领域事件:eventType/resourceId/payload/correlationId。索引 (eventType,createdAt) |
jobs |
异步任务状态机:PENDING→RUNNING→SUCCEEDED/FAILED/CANCELLED/DEAD;attempts/maxAttempts/runAt(指数退避),SKIP LOCKED 认领,15 分钟僵死回收。索引 (status,runAt) |
基础设施域
| 表 |
说明 |
servers |
SSH 目标(host/port/username/authType/provider("ssh"|"local")/credentialId/osInfo/lastSeenAt) |
containers |
docker 发现结果(containerId/name/image/state/ports/labels)→ serverId |
websites |
可部署应用(primaryDomain/serverId/repositoryUrl/deployType/port/healthPath/env) |
domains |
域名 + provider(CLOUDFLARE/MANUAL)+ credentialId |
domain_records |
DNS 记录(UNIQUE domain+type+name+value;providerRecordId 为云侧 ID) |
deployments |
部署执行(status QUEUED→RUNNING→…;trigger/progress/commit/config(branch、cancelRequested)/error)。索引 (websiteId,createdAt) |
deployment_logs |
步骤日志行(seq 顺序)。索引 (deploymentId,seq) |
monitors |
健康检查配置(kind/target/intervalSec/lastStatus/consecutiveFailures)。索引 (enabled,lastCheckedAt) |
monitor_results |
检查结果历史(ok/status/latencyMs/error)。索引 (monitorId,createdAt) |
自动化与 AI
| 表 |
说明 |
automations |
Trigger(MANUAL/CRON/EVENT/WEBHOOK)+ triggerConfig + conditions + actions(JSON)+ lastTriggeredAt |
automation_runs |
执行历史(status/stepIndex/logs/error/correlationId) |
ai_runs |
AI 运行:status(PLANNING→AWAITING_APPROVAL→RUNNING→SUCCEEDED/FAILED/REJECTED)、plan/toolCalls/verification JSON、riskLevel、approvedBy |
关键设计约束
- 租户隔离:所有领域表带
workspaceId;服务层查询一律带 workspace 谓词;守卫校验路径参数中的 workspaceId 成员资格。
- 资源 ↔ 领域表:领域行创建与 resources 行在同一个事务中;删除走
onDelete: Cascade。
- 密文隔离:明文机密只在内存短暂存在;
audit metadata 与日志经 maskSecrets() 脱敏。
- 事件追溯:events/audit_logs/jobs 均记录 correlationId / requestId,贯穿 HTTP 与 worker。
迁移与种子