部署拓扑与 License
本文说明 ApiGo 的生产部署结构和 License 授权机制。涉及地址、账号、密钥的内容一律通过环境变量或外置配置文件注入,文档不记录任何真实值。
部署拓扑
组件清单
| 组件 | 是否必需 | 说明 |
|---|---|---|
| MySQL 8.4+ | 必需 | 平台元数据;未启用 ES 时也存储调用日志 |
| Redis 7+ | 必需 | 运行态配置中枢、Pub/Sub 变更通知、分布式锁、响应缓存 |
| 注册中心(Nacos 2.3+ 或 Eureka) | 集群部署必需 | 服务发现、集群节点数探测;单机直连可省略 |
| Elasticsearch 7+ | 可选 | 调用日志检索;启用后日志不再落 MySQL |
| apigo-admin | 必需 | 管理端 API 与配置下发 |
| apigo-api | 必需 | 接口执行引擎 |
| apigo-gateway | 必需 | 统一入口与治理 |
| apigo-web | 必需 | 前端门户静态资源 |
启动顺序
- MySQL、Redis、注册中心(及可选的 Elasticsearch)
apigo-adminapigo-apiapigo-gatewayapigo-web
管理端启动时会加载数据源、把运行态配置写入 Redis;网关依赖这些数据构建路由。顺序颠倒时网关可能短暂无路由,等待下一次对账后自愈,但首次部署仍建议按序启动。
端口约定
| 服务 | 默认端口 |
|---|---|
| apigo-admin | 9377 |
| apigo-api | 9366 |
| apigo-gateway | 9600 |
| apigo-web | Nginx 80(容器映射 8080);开发模式 Vite 默认 7000 |
开放接口统一从网关 9600 进入,不直接暴露 apigo-api。
配置安全
以下配置必须外置,不得写入代码仓库或文档:
- 数据库地址、账号、密码
- Redis 地址与密码
- AI 模型 API Key
- SMTP / 短信 / Webhook 凭证
- License 文件与私钥
建议通过环境变量、配置中心或挂载的 application-*.yml 注入,并限制文件权限。数据源密码在平台内使用 RSA/SM2 加密存储,但这不替代对配置文件的访问控制。
License 机制
保护范围
apigo-admin、apigo-api、apigo-gateway 均依赖 apigo-license 模块。三个服务启动时都会校验授权;任一服务校验失败都不能启动 。
校验流水线
- 验签:使用发布包 jar 内置的公钥(信任锚)验证签名,防止伪造与篡改;开发构建可通过
apigo.license.public-key指定。 - 时间窗口:当前时间必须落在
notBefore与notAfter之间。 - 服务白名单:
serviceIds非空时,当前服务的spring.application.name必须在列表内,防止一份 License 通用于所有服务。 - 类型化校验:按授权类型检查 MAC 或集群节点数。
- 时钟回拨:与状态文件记录的时间水位比较;回拨超过容差判定为篡改。
三种授权类型
| 类型 | 校验内容 | 适用场景 |
|---|---|---|
SIMPLE | 仅时间窗口 | 演示、PoC、全动态环境 |
STANDARD | 时间 + 服务器 MAC 绑定 | 单机、物理机、固定集群 |
CLUSTER | 时间 + 集群节点数上下限(不校验 MAC) | Kubernetes、Swarm 等容器动态环境 |
CLUSTER 的节点数取 max(注册中心实例数, 配置下限)。配置值只能声明下限,无法下调真实探测值,避免通过改配置绕过节点上限。