{ "project": { "name": "unidesk", "timezone": "Etc/UTC" }, "runtime": { "typescript": "bun", "bunVersion": "1.3.13" }, "network": { "host": "0.0.0.0", "publicHost": "74.48.78.17", "core": { "port": 18080, "containerPort": 8080 }, "frontend": { "port": 18081, "containerPort": 8080 }, "database": { "port": 15432, "containerPort": 5432 }, "providerIngress": { "port": 18082, "containerPort": 8081 }, "restrictedHostAccess": { "bindHost": "0.0.0.0", "allowedSourceCidrs": [ "36.49.30.105/32", "59.72.97.73/32" ] } }, "database": { "user": "unidesk", "password": "unidesk_dev_password", "name": "unidesk", "volume": "unidesk_pgdata_10gb", "volumeSize": "10GB" }, "providerGateway": { "id": "main-server", "name": "Main Server Provider", "token": "unidesk-dev-token-change-me", "labels": { "host": "main-server", "role": "self-provider", "docker": true }, "heartbeatIntervalMs": 15000, "reconnectBaseMs": 1000, "reconnectMaxMs": 30000, "metrics": { "diskPath": "/" }, "upgrade": { "hostProjectRoot": "/root/unidesk", "workspacePath": "/workspace", "composeFile": "docker-compose.yml", "composeEnvFile": ".state/docker-compose.env", "composeProject": "unidesk", "service": "provider-gateway", "runnerImage": "unidesk_provider-gateway" } }, "docker": { "composeFile": "docker-compose.yml", "projectName": "unidesk" }, "microservices": [ { "id": "findjob", "name": "FindJob", "providerId": "D601", "description": "FindJob 纯后端服务,部署在 D601 Docker 中,UniDesk frontend 负责统一前端展示。", "repository": { "url": "https://gitee.com/Lyon1998/findjob", "commitId": "2d43212c5f474df5d87820985a6c75a8c2e7ac42", "dockerfile": "Dockerfile", "composeFile": "docker-compose.yml", "composeService": "server", "containerName": "findjob-server" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:3254", "nodeBindHost": "127.0.0.1", "nodePort": 3254, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedPathPrefixes": [ "/api/" ], "healthPath": "/api/health", "timeoutMs": 12000, "allowedMethods": [ "GET", "HEAD" ] }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/findjob" }, "frontend": { "route": "/apps/findjob", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "pipeline", "name": "Pipeline v2", "providerId": "D601", "description": "Pipeline v2 观测后端部署在 D601 Docker 中,UniDesk frontend 负责渲染组件矩阵、运行状态、epoch 甘特图和运行材料索引。", "repository": { "url": "https://github.com/pikasTech/pipeline", "commitId": "87811a8d43edf216a4f4d8efa55bbb96bad8df14", "dockerfile": "Dockerfile", "composeFile": "docker-compose.yml", "composeService": "pipeline-control", "containerName": "pipeline-v2-control" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:18082", "nodeBindHost": "127.0.0.1", "nodePort": 18082, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedPathPrefixes": [ "/health", "/api/", "/oa/" ], "healthPath": "/health", "timeoutMs": 15000, "allowedMethods": [ "GET", "HEAD", "POST" ] }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/pipeline" }, "frontend": { "route": "/apps/pipeline", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "met-nonlinear", "name": "MET Nonlinear", "providerId": "D601", "description": "MET Nonlinear 训练编排用户服务,TS 后端部署在 D601 Docker 中,按需拉起 TensorFlow 2.6 GPU 训练容器并由 UniDesk frontend 展示队列、进度和历史记录。", "repository": { "url": "https://github.com/pikasTech/met_nonlinear", "commitId": "9fcdfc0b505e52cc88cf51b196543dc055da2334", "dockerfile": "docker/unidesk/Dockerfile.ml", "composeFile": "docker-compose.unidesk.yml", "composeService": "met-nonlinear-ts", "containerName": "met-nonlinear-ts" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:3288", "nodeBindHost": "127.0.0.1", "nodePort": 3288, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "PUT" ], "allowedPathPrefixes": [ "/health", "/api/" ], "healthPath": "/health", "timeoutMs": 90000 }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/met_nonlinear" }, "frontend": { "route": "/apps/met-nonlinear", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "claudeqq", "name": "ClaudeQQ", "providerId": "D601", "description": "ClaudeQQ 纯后端 QQ 消息网关,容器化部署在 D601 Docker 中,为 UniDesk、主 server 和其他用户服务提供 QQ 消息事件订阅与消息推送 API。", "repository": { "url": "https://gitee.com/lyon1998/agent_skills", "commitId": "203b1f46684c91340ecbbd8a74502bd55e4f2011", "dockerfile": "claudeqq/Dockerfile", "composeFile": "claudeqq/docker-compose.unidesk.yml", "composeService": "claudeqq", "containerName": "claudeqq-backend" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:3290", "nodeBindHost": "127.0.0.1", "nodePort": 3290, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "DELETE" ], "allowedPathPrefixes": [ "/health", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 30000 }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/.agents/skills/claudeqq" }, "frontend": { "route": "/apps/claudeqq", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "todo-note", "name": "Todo Note", "providerId": "main-server", "description": "Todo Note 纯后端服务,从 D518 /mnt/d/work/todo_note 迁移到主 server Docker,使用 UniDesk PostgreSQL 存储,UniDesk frontend 负责统一前端展示。", "repository": { "url": "https://gitee.com/Lyon1998/todo_note", "commitId": "a14ce0eb855a685fa17b47adacd54623e72cd2ff", "dockerfile": "Dockerfile", "composeFile": "docker-compose.yml", "composeService": "todo-note", "containerName": "todo-note-backend" }, "backend": { "nodeBaseUrl": "http://todo-note:4211", "nodeBindHost": "todo-note", "nodePort": 4211, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "DELETE" ], "allowedPathPrefixes": [ "/api/" ], "healthPath": "/api/health", "timeoutMs": 12000 }, "development": { "providerId": "main-server", "sshPassthrough": true, "worktreePath": "/root/todo_note" }, "frontend": { "route": "/apps/todo-note", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "project-manager", "name": "Project Manager", "providerId": "main-server", "description": "项目管理用户服务,部署在主 server Docker 中,使用 UniDesk PostgreSQL 保存合作项目清单,支持项目增删改查、Excel 导入和 Excel 导出。", "repository": { "url": "https://github.com/pikasTech/unidesk", "commitId": "a278de032d5cdb91010466ac1e2183c79026550d", "dockerfile": "src/components/microservices/project-manager/Dockerfile", "composeFile": "docker-compose.yml", "composeService": "project-manager", "containerName": "project-manager-backend" }, "backend": { "nodeBaseUrl": "http://project-manager:4233", "nodeBindHost": "project-manager", "nodePort": 4233, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "PUT", "DELETE" ], "allowedPathPrefixes": [ "/health", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 30000 }, "development": { "providerId": "main-server", "sshPassthrough": true, "worktreePath": "/root/unidesk" }, "frontend": { "route": "/apps/project-manager", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "baidu-netdisk", "name": "Baidu Netdisk", "providerId": "main-server", "description": "容器化百度网盘存储用户服务,提供 OAuth 设备码登录、根目录浏览和 staging 目录上传下载任务。", "repository": { "url": "https://github.com/pikasTech/unidesk", "commitId": "ae462ed9ef8057909fee9eabfadce5ed55e958a2", "dockerfile": "src/components/microservices/baidu-netdisk/Dockerfile", "composeFile": "docker-compose.yml", "composeService": "baidu-netdisk", "containerName": "baidu-netdisk-backend" }, "backend": { "nodeBaseUrl": "http://baidu-netdisk:4244", "nodeBindHost": "baidu-netdisk", "nodePort": 4244, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "DELETE" ], "allowedPathPrefixes": [ "/health", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 120000 }, "development": { "providerId": "main-server", "sshPassthrough": true, "worktreePath": "/root/unidesk" }, "frontend": { "route": "/apps/baidu-netdisk", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "filebrowser", "name": "File Browser D518", "providerId": "D518", "description": "File Browser WebUI 用户服务,部署在 D518 WSL provider Docker 中,挂载 provider host / 到 /srv,包含 /mnt/c 等 Windows 盘符;主 server 不再运行 File Browser 容器以节省资源。", "repository": { "url": "https://github.com/filebrowser/filebrowser", "commitId": "ca5e249e3c0c94159c2136a0cd431a424eb18472", "dockerfile": "docker.io/filebrowser/filebrowser:v2.63.3", "composeFile": "docker run --restart unless-stopped", "composeService": "unidesk-filebrowser-d518", "containerName": "unidesk-filebrowser-d518" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:4251", "nodeBindHost": "0.0.0.0", "nodePort": 4251, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "PUT", "PATCH", "DELETE" ], "allowedPathPrefixes": [ "/" ], "healthPath": "/health", "timeoutMs": 120000 }, "development": { "providerId": "D518", "sshPassthrough": true, "worktreePath": "/" }, "frontend": { "route": "/apps/filebrowser", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "filebrowser-d601", "name": "File Browser D601", "providerId": "D601", "description": "File Browser WebUI 用户服务,部署在 D601 WSL provider Docker 中,挂载 provider host / 到 /srv,包含 /mnt/c 等 Windows 盘符。", "repository": { "url": "https://github.com/filebrowser/filebrowser", "commitId": "ca5e249e3c0c94159c2136a0cd431a424eb18472", "dockerfile": "docker.io/filebrowser/filebrowser:v2.63.3", "composeFile": "docker run --restart unless-stopped", "composeService": "unidesk-filebrowser-d601", "containerName": "unidesk-filebrowser-d601" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:4251", "nodeBindHost": "127.0.0.1", "nodePort": 4251, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "PUT", "PATCH", "DELETE" ], "allowedPathPrefixes": [ "/" ], "healthPath": "/health", "timeoutMs": 120000 }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/" }, "frontend": { "route": "/apps/filebrowser", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "oa-event-flow", "name": "OA Event Flow", "providerId": "main-server", "description": "统一 OA 事件流与统计中心用户服务,为 Code Queue 和 Pipeline 提供事件表、tag 订阅、Trace/STEP stats 投影和事件可见性页面。", "repository": { "url": "https://github.com/pikasTech/unidesk", "commitId": "b36d7f94d7a7db9527ca823a98599106096b3c91", "dockerfile": "src/components/microservices/oa-event-flow/Dockerfile", "composeFile": "docker-compose.yml", "composeService": "oa-event-flow", "containerName": "oa-event-flow-backend" }, "backend": { "nodeBaseUrl": "http://oa-event-flow:4255", "nodeBindHost": "oa-event-flow", "nodePort": 4255, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST" ], "allowedPathPrefixes": [ "/health", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 30000 }, "development": { "providerId": "main-server", "sshPassthrough": true, "worktreePath": "/root/unidesk" }, "frontend": { "route": "/apps/oa-event-flow", "integrated": true }, "deployment": { "mode": "unidesk-direct" } }, { "id": "k3sctl-adapter", "name": "k3s Control Plane", "providerId": "D601", "description": "k3sctl-adapter 是 UniDesk 直管的 k3s 控制平面适配微服务,连接 D601 原生 k3s/k3sctl 控制平面,并通过 k3s 标准服务路由代理 D601/D518 等节点上的代管微服务。", "repository": { "url": "https://github.com/pikasTech/unidesk", "commitId": "local", "dockerfile": "src/components/microservices/k3sctl-adapter/Dockerfile", "composeFile": "src/components/microservices/k3sctl-adapter/docker-compose.d601.yml", "composeService": "k3sctl-adapter", "containerName": "k3sctl-adapter" }, "backend": { "nodeBaseUrl": "http://host.docker.internal:4266", "nodeBindHost": "127.0.0.1", "nodePort": 4266, "proxyMode": "provider-gateway-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "DELETE", "PATCH" ], "allowedPathPrefixes": [ "/health", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 30000 }, "deployment": { "mode": "unidesk-direct" }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/cq-deploy" }, "frontend": { "route": "/apps/k3sctl", "integrated": true } }, { "id": "code-queue", "name": "Code Queue", "providerId": "D601", "description": "Code Queue 是由 D601 k3s 控制平面代管的代码代理队列用户服务,UniDesk 只通过 k3sctl-adapter 访问其标准服务路由;D601/D518 实例由 k3s 管理,provider-gateway 只保留维护用途。", "repository": { "url": "https://github.com/pikasTech/unidesk", "commitId": "75fb6757b2504ba86d61f2587fb34a9c9ed4019a", "dockerfile": "src/components/microservices/code-queue/Dockerfile", "composeFile": "src/components/microservices/k3sctl-adapter/k3s/code-queue.k3s.json", "composeService": "code-queue", "containerName": "k3s:code-queue" }, "backend": { "nodeBaseUrl": "k3s://code-queue", "nodeBindHost": "k3s://unidesk/code-queue", "nodePort": 4222, "proxyMode": "k3sctl-adapter-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "DELETE", "PATCH" ], "allowedPathPrefixes": [ "/health", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 30000 }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/unidesk-code-queue-deploy" }, "frontend": { "route": "/apps/code-queue", "integrated": true }, "deployment": { "mode": "k3sctl-managed", "adapterServiceId": "k3sctl-adapter", "k3sServiceId": "code-queue", "namespace": "unidesk", "expectedNodeIds": [ "D601", "D518" ], "activeNodeId": "D601" } }, { "id": "mdtodo", "name": "MDTODO", "providerId": "D601", "description": "MDTODO 是由 D601 k3s 控制面代管的 Markdown TODO 后端,读取原 F:\\Work\\vscode-mdtodo 工作区,UniDesk frontend 负责统一任务树、编辑和状态展示。", "repository": { "url": "https://github.com/pikasTech/unidesk", "commitId": "local", "dockerfile": "src/components/microservices/mdtodo/Dockerfile", "composeFile": "src/components/microservices/k3sctl-adapter/k3s/mdtodo.k3s.json", "composeService": "mdtodo", "containerName": "k3s:mdtodo" }, "backend": { "nodeBaseUrl": "k3s://mdtodo", "nodeBindHost": "k3s://unidesk/mdtodo", "nodePort": 4267, "proxyMode": "k3sctl-adapter-http", "frontendOnly": true, "public": false, "allowedMethods": [ "GET", "HEAD", "POST", "PUT", "PATCH", "DELETE" ], "allowedPathPrefixes": [ "/health", "/live", "/logs", "/api/" ], "healthPath": "/health", "timeoutMs": 30000 }, "development": { "providerId": "D601", "sshPassthrough": true, "worktreePath": "/home/ubuntu/cq-deploy/src/components/microservices/mdtodo" }, "frontend": { "route": "/apps/mdtodo", "integrated": true }, "deployment": { "mode": "k3sctl-managed", "adapterServiceId": "k3sctl-adapter", "k3sServiceId": "mdtodo", "namespace": "unidesk", "expectedNodeIds": [ "D601" ], "activeNodeId": "D601" } } ], "paths": { "stateDir": ".state", "logsDir": "logs", "docsReferenceDir": "docs/reference" }, "sshForwarding": { "mode": "optional-maintenance-only", "keyDir": "/root/.unidesk/host-ssh", "host": "host.docker.internal", "port": 22, "user": "root" }, "auth": { "username": "admin", "password": "Liang6516.", "sessionSecret": "unidesk-dev-session-secret-change-me", "sessionTtlSeconds": 86400 } }