docs(skill): set_application_env for container secrets

This commit is contained in:
Lon
2026-08-02 17:36:09 +08:00
parent 913588a369
commit dcddd3c3f9
2 changed files with 75 additions and 10 deletions

View File

@@ -22,7 +22,7 @@ metadata:
| 调 MCP 工具部署 | 让用户打开 Dokploy 管理面板 | | 调 MCP 工具部署 | 让用户打开 Dokploy 管理面板 |
| 401 → 引导连接中心重拿 Key | 说「权限配置无法通过,去找管理员要 Dokploy 权限」 | | 401 → 引导连接中心重拿 Key | 说「权限配置无法通过,去找管理员要 Dokploy 权限」 |
| 交付 `https://buxi….loncode.site` | 索要 `DOKPLOY_API_KEY` / Gitea Token / 面板账号 | | 交付 `https://buxi….loncode.site` | 索要 `DOKPLOY_API_KEY` / Gitea Token / 面板账号 |
| 环境变量靠 plan`databases[]` 等)或代码默认 | 让用户去 Dokploy 改某个应用的 env | | 业务密钥用 `set_application_env` 写入容器 env | 让用户去 Dokploy 改 env或把 `.env` 推进 Git |
**连接中心** `https://company-deploy-mcp.loncode.site/` = 飞书身份 + MCP 授权,**不是** Dokploy 面板。 **连接中心** `https://company-deploy-mcp.loncode.site/` = 飞书身份 + MCP 授权,**不是** Dokploy 面板。
**Dokploy** 只被控制面服务端调用,**业务用户与业务 Agent 默认不可见、不需要、不引导**。 **Dokploy** 只被控制面服务端调用,**业务用户与业务 Agent 默认不可见、不需要、不引导**。
@@ -147,12 +147,36 @@ list_projects
- ❌「企业部署连接中心不是 Dokploy所以你没法配 env——去找管理员开 Dokploy」 - ❌「企业部署连接中心不是 Dokploy所以你没法配 env——去找管理员开 Dokploy」
- ❌ 凭空编造 Dokploy URL - ❌ 凭空编造 Dokploy URL
若用户要的是 **业务应用自定义密钥**(如第三方 API Key而 plan 又注入不了: ### 3.5 业务环境变量 / 密钥(容器 env
> 当前 MCP 会自动注入数据库连接(`databases[]`)和运行所需基础变量; **正确路径MCP** 写入 Dokploy 应用配置 → **容器进程环境变量**(不是 Git 里的 `.env` 文件)。
> **不提供**业务同学自助打开 Dokploy 改 env。
> 可选:① 非密钥配置进代码/配置文件;② 密钥由平台管理员走运维通道注入(不经过业务 Dokploy 账号);③ 应用支持启动后自助配置页。 ```text
> **我不会让你去申请 Dokploy 面板权限。** # 项目须已 apply 过至少一次(有 mapping
list_application_env_keys({ repo, environment: "default" })
→ 只返回键名,永不返回值
set_application_env({
repo,
environment: "default",
vars: { "FEISHU_APP_ID": "...", "OPENAI_API_KEY": "..." },
# removeKeys: ["OLD_KEY"], # 可选删除
redeploy: true # 建议 true否则运行中容器可能仍用旧 env
})
→ 返回 updatedKeys / keys仅名称**响应永不包含 secret 值**
```
| 规则 | |
|------|--|
| `.env` 文件 | **禁止** push 进企业 Git本地可留但密钥用 `set_application_env` 注入 |
| 数据库连接 | 仍用 plan `databases[]` 自动注入;普通用户 **不能** 覆盖 `DATABASE_URL` 等受保护键 |
| 受保护键(非 admin | `DATABASE_URL``SUDA_DATABASE_URL``SERVER_*``PORT``FORCE_*``COMPANY_DEPLOY_SELF_HOST` |
| Dokploy 面板 | **禁止**引导用户打开改 env |
| 审计 | 控制面记录写入了哪些 **键名**,不记 value |
话术示例:
> 密钥不会进代码仓库。我会用企业部署 MCP 的 `set_application_env` 写到运行环境(容器 env并触发重新部署。请把需要的 KEY 和值发我(或确认本机已配置好后由我读取本地 `.env` **仅用于调用 MCP不 commit**)。
--- ---
@@ -256,6 +280,8 @@ Webcurl -skI "$url"(证书首次可能 13 分钟)
| `apply_deployment_plan` | 真正发布 | | `apply_deployment_plan` | 真正发布 |
| `get_deployment_status` | 轮询 | | `get_deployment_status` | 轮询 |
| `get_sanitized_logs` | 脱敏诊断 | | `get_sanitized_logs` | 脱敏诊断 |
| `list_application_env_keys` | 列出容器 env **键名**(无值) |
| `set_application_env` | 合并/删除业务密钥到容器 env`redeploy:true` 使生效 |
| `reset_project_mapping` | 仅 mapping 脏了且用户/admin 确认(不删 Dokploy/Gitea 实体) | | `reset_project_mapping` | 仅 mapping 脏了且用户/admin 确认(不删 Dokploy/Gitea 实体) |
--- ---
@@ -312,7 +338,8 @@ Webcurl -skI "$url"(证书首次可能 13 分钟)
| 重部署丢数据 | 确认写 `/data`;同 repo+env 卷会复用 | | 重部署丢数据 | 确认写 `/data`;同 repo+env 卷会复用 |
| Swarm 0/1 bind path | 控制面默认 volume见 status/logs | | Swarm 0/1 bind path | 控制面默认 volume见 status/logs |
| 要 PG/MySQL | plan `databases[]`,应用读 `DATABASE_URL` | | 要 PG/MySQL | plan `databases[]`,应用读 `DATABASE_URL` |
| 业务要自定义密钥 | §3.4 末段;**禁止**引导 Dokploy 改 env | | 业务要自定义密钥 / 配环境变量 | **`set_application_env`**§3.5);禁止 `.env` 进 Git、禁止 Dokploy 面板 |
| 密钥写了但应用仍像没配 | `redeploy:true` 或再 apply`list_application_env_keys` 确认键名 |
| 妙搭模板白屏/平台 API | 非主路径;`stack-profiles`;勿堆网关适配 | | 妙搭模板白屏/平台 API | 非主路径;`stack-profiles`;勿堆网关适配 |
| `FORCE_AUTHN_*` 启动失败 | apply 会注入 boot env不等于业务可用 | | `FORCE_AUTHN_*` 启动失败 | apply 会注入 boot env不等于业务可用 |
@@ -327,6 +354,7 @@ Webcurl -skI "$url"(证书首次可能 13 分钟)
| 我的项目 / 链接 | `list_projects` / `get_deployment_status` | | 我的项目 / 链接 | `list_projects` / `get_deployment_status` |
| 配额 | `get_my_quota` | | 配额 | `get_my_quota` |
| 连不上 / 没权限 | **只**走 §2§3连接中心**禁止** Dokploy | | 连不上 / 没权限 | **只**走 §2§3连接中心**禁止** Dokploy |
| 配密钥 / 环境变量 / API Key | §3.5 `set_application_env``redeploy:true` |
| 运维直连 Dokploy | 仅用户**明确**要求且本机有 `.env.deploy` → §8 | | 运维直连 Dokploy | 仅用户**明确**要求且本机有 `.env.deploy` → §8 |
| 妙搭应用 | 先边界说明;优先 `lark-apps`;自托管实验见 stack-profiles | | 妙搭应用 | 先边界说明;优先 `lark-apps`;自托管实验见 stack-profiles |
@@ -354,8 +382,8 @@ Webcurl -skI "$url"(证书首次可能 13 分钟)
| 自管登录与 DB 的 API | **支持** | | 自管登录与 DB 的 API | **支持** |
| 飞书妙搭 / `@lark-apaas/*` | **实验性**;不承诺登录/平台 API`stack-profiles.md` | | 飞书妙搭 / `@lark-apaas/*` | **实验性**;不承诺登录/平台 API`stack-profiles.md` |
主路径承诺Dockerfile + 端口 + `/data` + 可选库 → **HTTPS 链接** 主路径承诺Dockerfile + 端口 + `/data` + 可选库 → **HTTPS 链接**;业务密钥经 `set_application_env` 进容器 env
不承诺:模拟妙搭网关、业务自定义 env 面板、用户进入 Dokploy。 不承诺:模拟妙搭网关、用户进入 Dokploy 面板
--- ---

View File

@@ -8,7 +8,8 @@
| 禁止 | 正确 | | 禁止 | 正确 |
|------|------| |------|------|
| 让用户打开 Dokploy 面板 / 要面板地址 | 业务路径 **永不** 需要 Dokploy UI | | 让用户打开 Dokploy 面板 / 要面板地址 | 业务路径 **永不** 需要 Dokploy UI |
| 要 Dokploy 账号、某应用「环境变量编辑权限」 | 库用 `databases[]`自定义密钥见 SKILL §3.4,不导向 Dokploy | | 要 Dokploy 账号、「环境变量编辑权限」 | 库用 `databases[]`业务密钥用 **`set_application_env`** |
| 把 `.env` 推进企业 Git | 密钥用 `set_application_env` 写容器 env`.gitignore` 排除 `.env` |
| 「权限配置无法通过」却未调用 `whoami` | 先 `whoami`401 才引导 **连接中心** 重拿 `buxi_` | | 「权限配置无法通过」却未调用 `whoami` | 先 `whoami`401 才引导 **连接中心** 重拿 `buxi_` |
| 索要 `DOKPLOY_API_KEY` / Gitea Token / 用户 SSH | 只用 MCP + `ensure_repository.pushUrl` | | 索要 `DOKPLOY_API_KEY` / Gitea Token / 用户 SSH | 只用 MCP + `ensure_repository.pushUrl` |
| 编造 Dokploy URL | 不要猜 | | 编造 Dokploy URL | 不要猜 |
@@ -66,6 +67,8 @@ Agent 配置示例(用户从连接中心复制,**不要**写进业务仓库
| `apply_deployment_plan` | 写 | 挂卷 → PG/MySQL → 域名/HTTPS → deploy | | `apply_deployment_plan` | 写 | 挂卷 → PG/MySQL → 域名/HTTPS → deploy |
| `get_deployment_status` | 读 | 应用与部署摘要(脱敏) | | `get_deployment_status` | 读 | 应用与部署摘要(脱敏) |
| `get_sanitized_logs` | 读 | 脱敏诊断摘要 | | `get_sanitized_logs` | 读 | 脱敏诊断摘要 |
| `list_application_env_keys` | 读 | 容器/应用 env **键名**列表(永不返回值) |
| `set_application_env` | 写 | 合并/删除业务 env → 容器环境变量;可选 `redeploy` |
`repo` 格式: `repo` 格式:
@@ -283,6 +286,40 @@ Agent **不要**再直连 Dokploy 做 `domain.create` / `mounts.create` / 手建
--- ---
## 业务环境变量(容器 env
项目 **至少 apply 成功一次** 后:
```json
// 仅键名
{ "repo": "my-app", "environment": "default" }
// → list_application_env_keys
// 写入 / 覆盖 / 删除
{
"repo": "my-app",
"environment": "default",
"vars": {
"FEISHU_APP_ID": "cli_xxx",
"FEISHU_APP_SECRET": "secret"
},
"removeKeys": [],
"redeploy": true
}
// → set_application_env
```
| 规则 | |
|------|--|
| 落点 | Dokploy 应用 env → **容器进程环境变量** |
| 不进 Git | 禁止 commit `.env` |
| 响应 | 只含 `updatedKeys` / `keys` 等名称;**永不回显 value** |
| 受保护键(非 admin | `DATABASE_URL``SUDA_DATABASE_URL``SERVER_*``PORT``FORCE_*``COMPANY_DEPLOY_SELF_HOST` |
| `redeploy: true` | 建议;否则旧容器可能仍用旧 env |
| 权限 | 项目 owner 或 admin |
---
## 配额与归属 ## 配额与归属
| 概念 | 行为 | | 概念 | 行为 |