docs(skill): set_application_env for container secrets
This commit is contained in:
@@ -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 @@ Web:curl -skI "$url"(证书首次可能 1–3 分钟)
|
|||||||
| `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 @@ Web:curl -skI "$url"(证书首次可能 1–3 分钟)
|
|||||||
| 重部署丢数据 | 确认写 `/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 @@ Web:curl -skI "$url"(证书首次可能 1–3 分钟)
|
|||||||
| 我的项目 / 链接 | `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 @@ Web:curl -skI "$url"(证书首次可能 1–3 分钟)
|
|||||||
| 自管登录与 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 面板。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 配额与归属
|
## 配额与归属
|
||||||
|
|
||||||
| 概念 | 行为 |
|
| 概念 | 行为 |
|
||||||
|
|||||||
Reference in New Issue
Block a user