自建网关 · 部署指南

推理走你自己的后端。

Enterprise Gateway 是跑在客户服务器上的组织推理入口:成员目录、嵌套额度与用量台账都在你自己的数据库里,每条模型路由显式指定端点与凭证,绝不回落到厂商的 key。

●接入前,请准备可用的服务器、企业许可证,以及你计划使用的模型端点与凭证。下方说明部署、成员接入与数据边界。

定位:不 fork 的企业层

Enterprise Gateway 是什么?

开源 agent_gateway 的私有企业版。它不 fork、不改上游一行代码:import 开源网关,向其 extension hooks 注册组织能力,再原样转发同一个 Flask app(sentry/getsentry 式拆分)。上游安全修复只需重新构建即可到达所有部署;开源网关始终不知道这个私有包的存在。

它在开源版之上补了什么?

开源网关只服务个人账户:一个扁平用户列表,每人一个余额。企业层补上组织真正需要的东西——成员/团队/令牌目录、可嵌套额度、留在客户自己数据库里的用量台账、共享技能与流程资产、签名组织策略,以及控制台 /api/org/* 接口。全部跑在客户的服务器上。

自带模型后端

可以用自己部署的大模型服务吗?

可以,而且这是默认姿态。每条路由都是显式的 chat_url + 凭证,由管理员在控制台配置:公司自己的 Azure OpenAI、DeepSeek 合同、Volcano Ark 租户,或者机房内网里自建的 vLLM/SGLang(代码注释明确支持 LAN endpoint)。端点需兼容 OpenAI chat/completions 协议。

没有匹配的路由时会怎样?

请求被拒绝,错误信息指明去控制台哪里配置——绝不回落到 Laintas 自己的 provider key。回落意味着把客户的提示词发往他们没选过的端点、把 token 计到 Laintas 账上。历史的 is_managed 标志不再创建托管推理路由,API 会拒绝这种用法。

多个后端如何路由?

model_pattern 通配匹配模型名(如 gpt-*、deepseek-*、* 兜底),按 priority 升序取第一个命中的启用路由;调用方显式指定 provider_id 时精确直连,不存在或已禁用则报错。凭证以 AES-256-GCM 信封加密存库,解密密钥只存在于部署环境变量、永不入库,且与组织绑定——拖走数据库备份拿不到明文 key。

控制台的“测试”按钮为什么拦内网地址?

SSRF 防护只作用于控制台里的主动测试请求:默认拒绝解析到内网/环回地址的目标,防止从控制台探测内网服务。推理路由本身不受此限;确有内网端点需要测试时,用 ENTERPRISE_ALLOW_LAN_PROVIDER_TESTS 显式放开。

部署产物与成员接入

部署完成后得到什么?

一个 URL 加一组令牌。install.sh 用 docker compose 起 db + gateway + nginx 三个容器,全部只绑回环地址;客户在自己的反向代理上终止 TLS 后,对外就是 https://<your-host>。控制台与推理 API 同源(浏览器无需 CORS),本地端口为 console 8090、gateway 2913,代理超时对齐 1200 秒长推理。

首个 owner 如何产生?

刻意不走 HTTP:bootstrap 是一次性本地命令(docker compose exec gateway python -m laintas_enterprise.bootstrap --email …),校验许可证后在库里建组织与 owner,并只打印一次令牌。在第一个令牌存在之前开放“首个请求者即管理员”,等于把管理员交给公网。已有活跃 owner 时它会拒绝运行。

令牌长什么样、存在哪?

lem_ 前缀 + 43 字符 URL-safe 随机串(256 位)。owner 令牌由 bootstrap 打印一次,成员令牌由控制台签发。数据库只存 SHA-256 摘要——拖库既不能重放也不能冒充。成员侧存于 ~/.laintas/enterprise/issuer.json,CI 可用 LAINTAS_ORG_TOKEN 环境变量覆盖;控制台与 CLI 复用同一凭证,离职吊销一处即全站失效。

成员怎样接入?

成员不换程序,还是原来那个 laintas-cli,三条命令接入:/v enterprise 安装组织层,/org connect https://<your-host> --token lem_… 连接网关,/backend https://<your-host> 把推理也指过来。之后 /org sync 拉取共享技能与签名策略,/org status 查看当前 issuer、剩余额度与策略版本。

.env 里哪些值必须备份?

两个:LAINTAS_LICENCE_TOKEN(laintas.com 签发的许可证,绑定组织 UUID,决定谁可以运行这套软件)和 ENTERPRISE_KEY_ENCRYPTION_KEY(信封加密主密钥——丢失它,库里的 provider API key 就永远无法解开,install.sh 结尾会专门警告)。

数据边界与失效行为

哪些数据在哪一边?

laintas.com 只保存组织身份、席位与许可证。成员、角色、团队、额度、用量明细、提示词、代码、文件与审计记录全部留在客户自己的服务器。需要说明的是:CLI 扩展软件本身仍从 enterprise.laintas.com 分发——"谁能运行软件"和"工作在哪发生"是两个独立的问题。

组件故障时会放行请求吗?

不会,处处 fail closed:目录故障返回 503 而不是匿名放行;额度检查故障返回 503 而不是免费推理;身份钩子只裁决不降级——持 Laintas 登录也进不来私有网关。额度取交集不取并集:组织限 10 万次、团队被授予 50 万次,团队实际拿到 10 万次,预算控制不会被下一层 undo。

还有哪些容易被忽略的隐私细节?

STUN 默认关闭:客户部署不会向 Laintas 的 STUN 服务器泄露成员公网地址,跨网 P2P 需要自建 coturn(RTC_STUN_URLS)。请求日志的保留天数(ENTERPRISE_REQUEST_LOG_DAYS)与是否记录来源 IP(ENTERPRISE_REQUEST_LOG_IPS)是两个独立开关,都可整体关闭——不想留"谁从哪台机器调用"的记录,可以干脆不留。