docs: push via ensure_repository pushUrl, no user SSH

This commit is contained in:
gitea-robot
2026-07-31 17:24:34 +08:00
parent a4ede5c895
commit 0719e4fa2d
2 changed files with 27 additions and 9 deletions

View File

@@ -63,8 +63,8 @@ MCP endpoint`https://company-deploy-mcp.loncode.site/mcp`
```text
用户:「部署 / 上线」
→ AgentDockerfile + 本地验证
→ Agentensure_repositoryMCP
→ Agentgit push(企业凭据,用户无感
→ Agentensure_repositoryMCP→ 拿到 agentHint.pushUrl机器人 Token
→ Agentgit push <pushUrl>(禁止用用户 SSH禁止向用户要密钥
→ Agentcreate_deployment_plan + apply_deployment_plan
MCP 内部:挂卷 → PG/MySQL可选→ domainbuxi+5位.根域 + LE HTTPS→ deploy
→ Agentget_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 → Dokploy80/443 可达Lets 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 "<pushUrl>" HEAD:<defaultBranch>
→ 记录 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控制面证书配置 |

View File

@@ -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.pushUrloauth2:机器人Token@gitea/...
3. git commit
git push --set-upstream "<pushUrl>" HEAD:<defaultBranch>
# 禁止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 也能部署。
---