bianningtao/dify-admin
Side-car platform admin for Dify CE (cross-workspace plugin/credential mgmt, zero Dify source modification)
Dify Admin
独立的 Dify 平台管理后台(side-car,零侵入 Dify 主项目)。
为多租户 Dify 部署补齐缺失的「跨 workspace 平台管理员」能力:
- 插件目录(catalog)+ 跨空间分配(assignment)
- 凭据集中管理(HYBRID 加密 + 单字段掩码 + daemon 实时校验)
- 模型/工具凭据分发到 Dify
providers/tool_oauth_*等真表 - 平台审计、租户配额、插件用量看板
- WebApp 发布访问权限(四档:公开/全体成员/指定成员/登录可访问)— 侧车扮演企业版 API,无需改 Dify 源码
- 企业版功能开关 + 控制台品牌 — 把 CE 里被 env 关掉的企业能力收敛到 admin 统一管理
架构
┌─────────────────────┐ ┌────────────────────────┐
│ admin-web │ ──HTTP─►│ admin-api │
│ Next.js 16 │ │ Flask + SQLAlchemy │
│ basePath=/admin │ │ 独立 JWT / Alembic │
└─────────────────────┘ └─────────┬──────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Dify 同 Postgres Dify plugin_daemon Dify tenants
(platform_* 表) (HTTP API) (RSA 公钥)
严格红线:不动 Dify api/ web/ packages/ docker/ 任何文件。所有交互走 Dify 公开 DB schema + HTTP API。
企业能力(WebApp 访问权限 / 功能开关 / 品牌)依赖 Dify 侧若干标准环境变量(
ENTERPRISE_ENABLED等)。这些通过本地docker/docker-compose.override.yaml注入 Dify 容器、不修改也不提交 Dify 源码,配置说明见ADMIN_SYSTEM.md。
快速启动
前置:已有运行中的 Dify Community Edition 1.13.x;知道其 PG 密码、SECRET_KEY、PLUGIN_DAEMON_KEY、docker network 名。
路径 A:直接拉阿里云预构建镜像(最快)
cd dify-admin
cp .env.example .env
vim .env # 填 DB_PASSWORD / DIFY_SECRET_KEY / PLUGIN_DAEMON_KEY / ADMIN_JWT_SECRET / DIFY_NETWORK_NAME
docker compose -f docker-compose.from-aliyun.yml up -d
镜像位置:
crpi-cllk66uycyv0h2wb.cn-shanghai.personal.cr.aliyuncs.com/abian_project/dify:admin-api-latest
crpi-cllk66uycyv0h2wb.cn-shanghai.personal.cr.aliyuncs.com/abian_project/dify:admin-web-latest
路径 B:本地源码 build
cd dify-admin
cp .env.example .env && vim .env
docker compose build
docker compose up -d
访问 http://localhost:3001/admin 走初始化向导(5 步:测 DB / 测 daemon / commit 配置 / 创建首位 super admin / 完成)。
如果 Dify 跑在 host network 模式(admin 无法加入其 docker network):
docker compose -f docker-compose.yml -f docker-compose.with-fwd.yml up -d
兼容矩阵
| Admin | Dify CE |
|---|---|
| 0.3.0 | 1.13.0 ~ 1.14.x(在 1.13.3 验证) |
admin-api/compat.json 列详细 supported / tested / incompatible_below 矩阵。admin 启动时调 DIFY_CONSOLE_URL/console/api/version 探活并比对,失败仅 warn 不阻断。
关键功能
| 模块 | 端点前缀 |
|---|---|
| 认证 | /platform/auth/* |
| 租户管理 | /platform/tenants/* |
| 账户管理 | /platform/accounts/* |
| 平台 admin | /platform/admins/* |
| 插件目录(catalog) | /platform/plugin-manage/catalog/* |
| 凭据 | /platform/credentials/* |
| WebApp 访问权限 | /platform/webapp-access/*(+ 扮演企业 API 的 /inner/api/*) |
| 企业功能开关 | /platform/feature-flags/* |
| 控制台品牌 | /platform/branding |
| 审计日志 | /platform/audit/* |
| 初始化向导 | /platform/setup/* |
| 兼容性 | /platform/compat |
WebApp 访问权限 / 功能开关 / 品牌 三项需开 Dify 侧
ENTERPRISE_ENABLED(侧车实现/inner/api/*企业契约)。详见ADMIN_SYSTEM.md。
安全模型
- admin 自己的 JWT(与 Dify session 完全独立)
- 跨服务凭据加密:RSA-OAEP + AES-EAX hybrid(
b"HYBRID:"前缀)—— Dify 端用同 SECRET_KEY 派生的私钥可解密 - admin 自有数据 AES-256-GCM + HKDF-SHA256
- 凭据明文永不出 API 表面(list/detail 返回掩码
sk-***xy) - 创建/编辑凭据触发 daemon
validate_*_credentials真实校验(失败 400 + 上游错误原文) - 接管 Dify 原生 WebApp 访问控制弹窗时,校验 Dify console JWT(用同一
SECRET_KEY)+ CSRF 双提交 + workspace 成员归属
目录
admin-api/ Python 3.12 Flask 后端,独立 alembic chain(platform_* 表)
admin-web/ Next.js 16 前端,inline styles + Apple Liquid Glass 风格
dify-admin/ docker-compose 部署模板
License
Apache 2.0