From 7fa060351966536f588f58be59987fc42c8d2ffb Mon Sep 17 00:00:00 2001 From: Mengyu <97984755+Amengyu@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:10:04 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20ModelGate=20=E5=AE=9D?= =?UTF-8?q?=E5=A1=94=20Docker=20=E5=BA=94=E7=94=A8=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 ModelGate 宝塔 Docker 应用模板 本次新增 ModelGate 宝塔 Docker 应用模板,支持通过宝塔 Docker 应用一键部署 ModelGate。 应用支持两个版本: - latest:完整版 - lite:精简版 镜像来源: - docker.cnb.cool/bring/tools/modelgate:latest - docker.cnb.cool/bring/tools/modelgate:lite 已适配宝塔 Docker 外部应用结构,包含 app.json、icon.png、latest/lite 版本目录、.env 与 docker-compose.yml。 测试情况: 已在宝塔 Docker 外部应用中导入并安装测试,容器可正常启动,Web 控制台可正常访问。 --- apps/modelgate/app.json | 250 +++++++++++++++++++++++ apps/modelgate/icon.png | Bin 0 -> 72552 bytes apps/modelgate/latest/docker-compose.yml | 36 ++++ apps/modelgate/lite/docker-compose.yml | 36 ++++ 4 files changed, 322 insertions(+) create mode 100644 apps/modelgate/app.json create mode 100644 apps/modelgate/icon.png create mode 100644 apps/modelgate/latest/docker-compose.yml create mode 100644 apps/modelgate/lite/docker-compose.yml diff --git a/apps/modelgate/app.json b/apps/modelgate/app.json new file mode 100644 index 00000000..e86603ce --- /dev/null +++ b/apps/modelgate/app.json @@ -0,0 +1,250 @@ +{ + "appid": -1, + "appname": "modelgate", + "apptitle": "ModelGate", + "apptype": "AI", + "appTypeCN": "AI/大模型", + "appversion": [ + { + "m_version": "latest", + "s_version": [] + }, + { + "m_version": "lite", + "s_version": [] + } + ], + "appdesc": "多租户 LLM 网关 + 管理控制台。支持 OpenAI / Anthropic / Ollama / Responses 多协议自动转换,多渠道路由加权负载均衡与熔断,用户组级限流与配额,OIDC 单点登录,API Key 管理,请求日志与用量统计。Next.js + SQLite 单文件部署,Docker 一键启动,提供完整版与精简版两种构建制品。", + "appstatus": 1, + "icon": "", + "sort": 1, + "home": "https://cnb.cool/Bring/Project/Series/ModelGate", + "help": "https://cnb.cool/Bring/Project/Series/ModelGate", + "cpu": 0, + "mem": 0, + "disk": 10240, + "updateat": 1783333620, + "installed": false, + "reuse": true, + "depend": null, + "field": [ + { + "attr": "modelgate_edition", + "name": "版本说明", + "type": "text", + "default": "上方选择:latest 完整版 / lite 精简版", + "suffix": "仅说明,无需改动", + "unit": "" + }, + { + "attr": "domain", + "name": "域名", + "type": "textarea", + "default": "", + "suffix": "选填,可使用绑定域名访问 Web 控制台", + "unit": "" + }, + { + "attr": "allow_access", + "name": "允许外部访问", + "type": "checkbox", + "default": true, + "suffix": "允许 IP:端口 直接访问", + "unit": "" + }, + { + "attr": "modelgate_http_port", + "name": "WEB端口", + "type": "number", + "default": 3000, + "suffix": "控制台访问端口", + "unit": "" + }, + { + "attr": "jwt_access_secret", + "name": "Access 登录密钥", + "type": "password", + "default": "", + "suffix": "", + "unit": "" + }, + { + "attr": "jwt_refresh_secret", + "name": "Refresh 续期密钥", + "type": "password", + "default": "", + "suffix": "", + "unit": "" + }, + { + "attr": "jwt_access_expires_seconds", + "name": "Access 有效期", + "type": "number", + "default": 900, + "suffix": "短期登录有效期,默认 900 秒", + "unit": "秒" + }, + { + "attr": "jwt_refresh_expires_seconds", + "name": "Refresh 有效期", + "type": "number", + "default": 604800, + "suffix": "保持登录有效期,默认 7 天", + "unit": "秒" + }, + { + "attr": "auth_disabled", + "name": "免认证模式", + "type": "text", + "default": "0", + "suffix": "默认 0 为保持登录认证;1 为免认证", + "unit": "" + }, + { + "attr": "modelgate_trusted_ip_headers", + "name": "客户端 IP 头", + "type": "text", + "default": "", + "suffix": "反代信任IP头,多值逗号分隔,如:X-Forwarded-For", + "unit": "" + }, + { + "attr": "modelgate_gateway_debug", + "name": "网关调试", + "type": "text", + "default": "0", + "suffix": "默认 0 为关闭;1 为开启排障日志", + "unit": "" + }, + { + "attr": "modelgate_jsonl_log_enabled", + "name": "JSONL 日志", + "type": "text", + "default": "0", + "suffix": "默认 0 为关闭;1 为开启请求日志", + "unit": "" + }, + { + "attr": "modelgate_jsonl_log_path", + "name": "JSONL 路径", + "type": "text", + "default": "/app/data/request-logs.jsonl", + "suffix": "默认请求日志文件路径", + "unit": "" + }, + { + "attr": "cpus", + "name": "CPU核心数限制", + "type": "number", + "default": 0, + "suffix": "0 为不限制,最大可用核心数:", + "unit": "" + }, + { + "attr": "memory_limit", + "name": "内存限制", + "type": "number", + "default": 0, + "suffix": "0 为不限制,最大可用内存:", + "unit": "MB" + } + ], + "env": [ + { + "key": "version", + "type": "string", + "default": null, + "desc": "版本号" + }, + { + "key": "modelgate_http_port", + "type": "port", + "default": null, + "desc": "WEB端口" + }, + { + "key": "jwt_access_secret", + "type": "password", + "default": null, + "desc": "JWT Access Token 密钥" + }, + { + "key": "jwt_refresh_secret", + "type": "password", + "default": null, + "desc": "JWT Refresh Token 密钥" + }, + { + "key": "jwt_access_expires_seconds", + "type": "string", + "default": null, + "desc": "Access Token 有效期" + }, + { + "key": "jwt_refresh_expires_seconds", + "type": "string", + "default": null, + "desc": "Refresh Token 有效期" + }, + { + "key": "auth_disabled", + "type": "string", + "default": null, + "desc": "关闭认证模式" + }, + { + "key": "modelgate_trusted_ip_headers", + "type": "string", + "default": null, + "desc": "反代真实 IP 头" + }, + { + "key": "modelgate_gateway_debug", + "type": "string", + "default": null, + "desc": "网关调试日志" + }, + { + "key": "modelgate_jsonl_log_enabled", + "type": "string", + "default": null, + "desc": "JSONL 请求日志" + }, + { + "key": "modelgate_jsonl_log_path", + "type": "string", + "default": null, + "desc": "JSONL 日志路径" + }, + { + "key": "app_path", + "type": "path", + "default": null, + "desc": "应用数据目录" + }, + { + "key": "host_ip", + "type": "string", + "default": null, + "desc": "主机IP" + }, + { + "key": "cpus", + "type": "number", + "default": null, + "desc": "CPU核心数限制" + }, + { + "key": "memory_limit", + "type": "number", + "default": null, + "desc": "内存限制" + } + ], + "volumes": { + "data": { + "type": "path", + "desc": "ModelGate 数据目录,SQLite gateway.db 写入此目录" + } + } +} \ No newline at end of file diff --git a/apps/modelgate/icon.png b/apps/modelgate/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2e466825c6d5dcc9212287f79c36a89201f20fe6 GIT binary patch literal 72552 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 Q2LJ#707*qoM6N<$f(Ve#od5s; literal 0 HcmV?d00001 diff --git a/apps/modelgate/latest/docker-compose.yml b/apps/modelgate/latest/docker-compose.yml new file mode 100644 index 00000000..cc6cd3ad --- /dev/null +++ b/apps/modelgate/latest/docker-compose.yml @@ -0,0 +1,36 @@ +services: + BT_SERVICE_NAME6: + image: docker.cnb.cool/bring/tools/modelgate:${VERSION} + deploy: + resources: + limits: + cpus: ${CPUS} + memory: ${MEMORY_LIMIT} + restart: unless-stopped + ports: + - ${HOST_IP}:${MODELGATE_HTTP_PORT}:3000 + environment: + - HOST=0.0.0.0 + - PORT=3000 + - MODELGATE_DATA_DIR=/app/data + - MODELGATE_EDITION=${MODELGATE_EDITION} + - JWT_ACCESS_SECRET=${JWT_ACCESS_SECRET} + - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET} + - JWT_ACCESS_EXPIRES_SECONDS=${JWT_ACCESS_EXPIRES_SECONDS} + - JWT_REFRESH_EXPIRES_SECONDS=${JWT_REFRESH_EXPIRES_SECONDS} + - AUTH_DISABLED=${AUTH_DISABLED} + - MODELGATE_TRUSTED_IP_HEADERS=${MODELGATE_TRUSTED_IP_HEADERS} + - MODELGATE_GATEWAY_DEBUG=${MODELGATE_GATEWAY_DEBUG} + - MODELGATE_JSONL_LOG_ENABLED=${MODELGATE_JSONL_LOG_ENABLED} + - MODELGATE_JSONL_LOG_PATH=${MODELGATE_JSONL_LOG_PATH} + volumes: + - ${APP_PATH}/data:/app/data + - /etc/localtime:/etc/localtime:ro + labels: + createdBy: "bt_apps" + networks: + - baota_net + +networks: + baota_net: + external: true diff --git a/apps/modelgate/lite/docker-compose.yml b/apps/modelgate/lite/docker-compose.yml new file mode 100644 index 00000000..cc6cd3ad --- /dev/null +++ b/apps/modelgate/lite/docker-compose.yml @@ -0,0 +1,36 @@ +services: + BT_SERVICE_NAME6: + image: docker.cnb.cool/bring/tools/modelgate:${VERSION} + deploy: + resources: + limits: + cpus: ${CPUS} + memory: ${MEMORY_LIMIT} + restart: unless-stopped + ports: + - ${HOST_IP}:${MODELGATE_HTTP_PORT}:3000 + environment: + - HOST=0.0.0.0 + - PORT=3000 + - MODELGATE_DATA_DIR=/app/data + - MODELGATE_EDITION=${MODELGATE_EDITION} + - JWT_ACCESS_SECRET=${JWT_ACCESS_SECRET} + - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET} + - JWT_ACCESS_EXPIRES_SECONDS=${JWT_ACCESS_EXPIRES_SECONDS} + - JWT_REFRESH_EXPIRES_SECONDS=${JWT_REFRESH_EXPIRES_SECONDS} + - AUTH_DISABLED=${AUTH_DISABLED} + - MODELGATE_TRUSTED_IP_HEADERS=${MODELGATE_TRUSTED_IP_HEADERS} + - MODELGATE_GATEWAY_DEBUG=${MODELGATE_GATEWAY_DEBUG} + - MODELGATE_JSONL_LOG_ENABLED=${MODELGATE_JSONL_LOG_ENABLED} + - MODELGATE_JSONL_LOG_PATH=${MODELGATE_JSONL_LOG_PATH} + volumes: + - ${APP_PATH}/data:/app/data + - /etc/localtime:/etc/localtime:ro + labels: + createdBy: "bt_apps" + networks: + - baota_net + +networks: + baota_net: + external: true From c9b88f1a2725462a5563c62f25351b35bd46318a Mon Sep 17 00:00:00 2001 From: Mengyu <97984755+Amengyu@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:31:44 +0800 Subject: [PATCH 2/5] Add .env configuration file for modelgate lite --- apps/modelgate/lite/.env | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/modelgate/lite/.env diff --git a/apps/modelgate/lite/.env b/apps/modelgate/lite/.env new file mode 100644 index 00000000..5041e50f --- /dev/null +++ b/apps/modelgate/lite/.env @@ -0,0 +1,16 @@ +VERSION=lite +MODELGATE_EDITION=lite +MODELGATE_HTTP_PORT=3000 +JWT_ACCESS_SECRET= +JWT_REFRESH_SECRET= +JWT_ACCESS_EXPIRES_SECONDS=900 +JWT_REFRESH_EXPIRES_SECONDS=604800 +AUTH_DISABLED=0 +MODELGATE_TRUSTED_IP_HEADERS= +MODELGATE_GATEWAY_DEBUG=0 +MODELGATE_JSONL_LOG_ENABLED=0 +MODELGATE_JSONL_LOG_PATH=/app/data/request-logs.jsonl +HOST_IP=127.0.0.1 +CPUS=0 +MEMORY_LIMIT=0MB +APP_PATH=/www/dk_project/dk_app/modelgate From f202c3c9df650e70ef345dda584420bba2066856 Mon Sep 17 00:00:00 2001 From: Mengyu <97984755+Amengyu@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:32:32 +0800 Subject: [PATCH 3/5] Add .env file with configuration variables --- apps/modelgate/latest/.env | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/modelgate/latest/.env diff --git a/apps/modelgate/latest/.env b/apps/modelgate/latest/.env new file mode 100644 index 00000000..4e31c6fa --- /dev/null +++ b/apps/modelgate/latest/.env @@ -0,0 +1,16 @@ +VERSION=latest +MODELGATE_EDITION=full +MODELGATE_HTTP_PORT=3000 +JWT_ACCESS_SECRET= +JWT_REFRESH_SECRET= +JWT_ACCESS_EXPIRES_SECONDS=900 +JWT_REFRESH_EXPIRES_SECONDS=604800 +AUTH_DISABLED=0 +MODELGATE_TRUSTED_IP_HEADERS= +MODELGATE_GATEWAY_DEBUG=0 +MODELGATE_JSONL_LOG_ENABLED=0 +MODELGATE_JSONL_LOG_PATH=/app/data/request-logs.jsonl +HOST_IP=127.0.0.1 +CPUS=0 +MEMORY_LIMIT=0MB +APP_PATH=/www/dk_project/dk_app/modelgate From e7f4c2e82c6edb5888ffcdb88701e6f3b42a877f Mon Sep 17 00:00:00 2001 From: Mengyu <97984755+Amengyu@users.noreply.github.com> Date: Mon, 6 Jul 2026 22:03:02 +0800 Subject: [PATCH 4/5] Update app.json --- apps/modelgate/app.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/modelgate/app.json b/apps/modelgate/app.json index e86603ce..9dd7ea47 100644 --- a/apps/modelgate/app.json +++ b/apps/modelgate/app.json @@ -1,5 +1,5 @@ { - "appid": -1, + "appid": 301, "appname": "modelgate", "apptitle": "ModelGate", "apptype": "AI", @@ -247,4 +247,4 @@ "desc": "ModelGate 数据目录,SQLite gateway.db 写入此目录" } } -} \ No newline at end of file +} From 65c18829ee283fb58bb4be5d1ab8ebf1a653277e Mon Sep 17 00:00:00 2001 From: Mengyu <97984755+Amengyu@users.noreply.github.com> Date: Mon, 6 Jul 2026 22:03:49 +0800 Subject: [PATCH 5/5] Rename icon.png to ico-dkapp_modelgate.png --- .../modelgate/{icon.png => ico-dkapp_modelgate.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/modelgate/{icon.png => ico-dkapp_modelgate.png} (100%) diff --git a/apps/modelgate/icon.png b/apps/modelgate/ico-dkapp_modelgate.png similarity index 100% rename from apps/modelgate/icon.png rename to apps/modelgate/ico-dkapp_modelgate.png