From 0719e4fa2d2f2d888c005d48d3dcfccdba1db1d9 Mon Sep 17 00:00:00 2001 From: gitea-robot Date: Fri, 31 Jul 2026 17:24:34 +0800 Subject: [PATCH] docs: push via ensure_repository pushUrl, no user SSH --- dokploy-gitea-deploy/SKILL.md | 27 ++++++++++++++----- dokploy-gitea-deploy/references/mcp-deploy.md | 9 +++++-- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/dokploy-gitea-deploy/SKILL.md b/dokploy-gitea-deploy/SKILL.md index d9ce9b5..5c6ef88 100644 --- a/dokploy-gitea-deploy/SKILL.md +++ b/dokploy-gitea-deploy/SKILL.md @@ -63,8 +63,8 @@ MCP endpoint:`https://company-deploy-mcp.loncode.site/mcp` ```text 用户:「部署 / 上线」 → Agent:Dockerfile + 本地验证 - → Agent:ensure_repository(MCP) - → Agent:git push(企业凭据,用户无感) + → Agent:ensure_repository(MCP)→ 拿到 agentHint.pushUrl(机器人 Token) + → Agent:git push (禁止用用户 SSH;禁止向用户要密钥) → Agent:create_deployment_plan + apply_deployment_plan MCP 内部:挂卷 → PG/MySQL(可选)→ domain(buxi+5位.根域 + LE HTTPS)→ deploy → Agent:get_deployment_status / list_projects 轮询 @@ -72,7 +72,8 @@ MCP endpoint:`https://company-deploy-mcp.loncode.site/mcp` ``` - **飞书**:身份;**buxi_ Key**:调用 MCP -- **Gitea**:源码;**Dokploy**:构建运行(由 MCP 调用,不直暴露给业务) +- **Gitea**:源码(**gitea-robot** 建仓+推送;业务用户**不需要** Gitea 账号或 `~/.ssh`) +- **Dokploy**:构建运行(由 MCP 调用,不直暴露给业务) - **归属 / 配额 / 审计**:控制面 SQLite(`owner_open_id`、运行中数量) --- @@ -97,7 +98,7 @@ MCP endpoint:`https://company-deploy-mcp.loncode.site/mcp` ``` 2. 项目有可构建 **Dockerfile**(进程监听 `spec.port`,状态写 `/data` 等挂载点) -3. Agent 本机可 `git push`(企业 Git 凭据,**不**向用户索要) +3. 本机有 `git` 即可;**推送凭据来自 `ensure_repository` 的 `agentHint.pushUrl`**,**不要**配置用户 SSH、**不要**加 `id_ed25519.pub` 到 Gitea 4. 企业侧已配:`*.DOMAIN_ROOT` DNS → Dokploy;80/443 可达(Let’s Encrypt) 无 Key:引导打开连接中心登录,**不要**继续直连 Dokploy。 @@ -123,14 +124,24 @@ MCP endpoint:`https://company-deploy-mcp.loncode.site/mcp` - 有状态:默认 `/data`;多目录用 `persistence[]` - 需要库:`databases: [{ engine: "postgres"|"mysql", ... }]` -### 2. 仓库 +### 2. 仓库与推送(权限红线) ```text ensure_repository({ repo: "owner/name" 或 "name" }) -→ git remote / commit / push +→ 使用返回的 agentHint.pushUrl(含企业机器人 Token) +→ git add / commit +→ git push --set-upstream "" HEAD: → 记录 commitSha ``` +**硬规则:** + +1. **禁止**要求用户上传/配置 `~/.ssh/id_ed25519.pub` 或任何个人 SSH Key。 +2. **禁止**让用户自己去 Gitea 开权限、建仓、加 Collaborator。 +3. **禁止**用未认证的 `cloneUrl` 去 `git push`(会 403 / Permission denied)。 +4. **必须**用 `agentHint.pushUrl` 做一次推送;**不要**把 `pushUrl` 全文贴进对用户的回复。 +5. 若仍 403:重新 `ensure_repository` 取新 hint,检查本机网络能否访问 `git.loncode.site`——**不要**改去配用户 SSH。 + ### 3. 计划与发布 ```text @@ -238,10 +249,11 @@ Agent **不要**在 MCP 路径下再调 Dokploy `domain.create`(避免双绑/ ## 安全红线 -1. 永不 commit / 回显:`buxi_` Key、`MCP_AUTH_TOKEN`、Dokploy/Gitea Token、数据库密码全文 +1. 永不 commit / 回显:`buxi_` Key、`MCP_AUTH_TOKEN`、Dokploy/Gitea Token、`pushUrl`、数据库密码全文 2. `apply` 返回的 `connectionUrl` 已脱敏则保持;未脱敏则遮罩 3. 普通用户不可查他人项目(控制面会 403) 4. 生产破坏性操作仍受控制面策略约束 +5. **禁止**因 push 失败引导用户配置个人 SSH(那是错误路径) --- @@ -286,6 +298,7 @@ Agent **不要**在 MCP 路径下再调 Dokploy `domain.create`(避免双绑/ | 现象 | 处理 | |------|------| | 401 / 要 Feishu Key | 引导连接中心登录,配置 `buxi_` | +| git push 权限 / Permission denied / 要配 SSH | **错误路径**。改用 `ensure_repository` → `agentHint.pushUrl` 推送;禁止给用户配 SSH | | 运行中项目达上限 | `get_my_quota`;停/删旧应用后再部署 | | Forbidden 看他人项目 | 非管理员;加 `ADMIN_OPEN_IDS` 或只查自己的 | | 有部署无 HTTPS | 等 LE;查 DNS/80;控制面证书配置 | diff --git a/dokploy-gitea-deploy/references/mcp-deploy.md b/dokploy-gitea-deploy/references/mcp-deploy.md index eb809d4..c3ae33d 100644 --- a/dokploy-gitea-deploy/references/mcp-deploy.md +++ b/dokploy-gitea-deploy/references/mcp-deploy.md @@ -54,14 +54,19 @@ Agent 配置示例(用户从连接中心复制,**不要**写进业务仓库 0. whoami / get_my_quota # 可选但推荐;配额满先处理 1. 本地:Dockerfile + 数据写 /data + .gitignore 2. ensure_repository({ repo }) -3. git remote add/set-url + commit + push # Agent 本机企业凭据 + → 响应含 agentHint.pushUrl(oauth2:机器人Token@gitea/...) +3. git commit + git push --set-upstream "" HEAD: + # 禁止:git push origin(若 origin 无 Token) + # 禁止:要求用户配置 ~/.ssh/id_ed25519 4. create_deployment_plan({ repo, commitSha, branch, environment, spec }) 5. apply_deployment_plan({ planId }) 6. get_deployment_status / list_projects 轮询 7. curl 探活 apply 返回的 url(证书可能短暂签发中) ``` -**Push 必须在 Agent 侧做**:MCP 在服务器上读不到用户工作区未提交文件。 +**Push 必须在 Agent 侧做**:MCP 在服务器上读不到用户工作区未提交文件。 +**凭据**:仅用 `ensure_repository` 返回的 `pushUrl`(企业 `gitea-robot`),用户无 Gitea 账号/SSH 也能部署。 ---