docs: push via ensure_repository pushUrl, no user SSH
This commit is contained in:
@@ -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 <pushUrl>(禁止用用户 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 "<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;控制面证书配置 |
|
||||
|
||||
@@ -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 "<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 也能部署。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user