Hyperswitch Decision Engine 配置指南:Toml 配置项全解与生产环境调优实践
【免费下载链接】hyperswitchOpen source, composable payments platform | PCI compliant | SaaS and Self-host options | Enables connectivity to multiple payment, payout, fraud, vault and tokenization providers | Uplifts authorization with intelligent routing and revenue recovery | Reduce payment processing costs with cost observability | Reduces payment ops with reconciliation项目地址: https://gitcode.com/GitHub_Trending/hy/hyperswitch
本文聚焦 Hyperswitch 仓库中 Decision Engine(智能路由决策引擎)的部署配置体系:完整讲解官方配置指南(configuration.md)覆盖的 Server、日志、限流、多租户、鉴权、Analytics 与 Secrets 管理等全部配置段,并结合 本地部署文档 中的 Compose Profile 矩阵说明每个配置项在实际运行时的作用与取值建议,帮助你在本地、Docker 与 K8s 环境下正确、安全地配置并调优 Decision Engine。
需要先说明一个适用前提:Hyperswitch 仓库中的 api-reference/decision-engine-api-reference/ 目录存放的是 Decision Engine 组件的完整 API 参考文档(含 OpenAPI 规范 decision_engine_openapi-specs.json),而 Decision Engine 本身是一个独立运行的决策引擎服务(据 安装文档,其源码仓库为 juspay/decision-engine)。因此下文中提到的config/development.toml、config/docker-configuration.toml、helm-charts/config/development.toml等路径均指Decision Engine 项目内的配置文件,而非本仓库根目录下的同名 router 配置。
一、主配置文件:按运行环境选对文件
Decision Engine 提供三份预置了全部必需配置段的配置文件,分别对应三种运行方式:
| 配置文件 | 适用场景 |
|---|---|
config/development.toml | 从源码运行(host/source runs) |
config/docker-configuration.toml | Docker / Docker Compose 运行 |
helm-charts/config/development.toml | Kubernetes Helm Chart 模板配置 |
官方配置指南给出的关键建议是:直接编辑与你运行时匹配的那份文件,而不是从config.example.toml复制——示例配置是不完整的(incomplete),缺段会导致启动失败或行为异常。
结合 本地部署文档,Docker 方式启动时必须显式传入 Compose Profile(没有无 Profile 的默认启动),常用组合包括:
# 最小 API 栈(PostgreSQL) docker compose --profile postgres-ghcr up -d # API + Dashboard + 文档站 docker compose --profile dashboard-postgres-ghcr up -d # 附加监控栈(Prometheus + Grafana) docker compose --profile monitoring up -d也就是说,选择哪份配置文件与选择哪个 Compose Profile 是配套关系:源码运行读development.toml,Compose 运行读docker-configuration.toml,且 Compose 文件中已通过服务名(service name)预接线了各依赖。
二、基础服务配置段
[server] 监听地址
[server] host = "0.0.0.0" port = 8080host是绑定地址:Docker/部署环境用0.0.0.0(对外可达),仅本机调试用127.0.0.1。安装文档的 Quick Start 以curl http://localhost:8080/health验证服务存活,预期返回{"message": "Health is good"},即默认端口为 8080。
[log.console] 日志
[log.console] enabled = true level = "DEBUG" log_format = "default"log_format取"default"(人类可读)或"json"(结构化)。生产环境建议使用json格式,便于日志采集管道(如 Loki/Vector 类组件)按字段解析。
[metrics] Prometheus 指标
[metrics] host = "0.0.0.0" port = 9094Prometheus 指标暴露在host:port/metrics路径上。该配置与 本地部署文档 中的monitoringProfile 直接对应:Prometheus 抓取 9094 端口的/metrics,Grafana 面板运行在 3000 端口。若你启用了--profile monitoring,请务必保证此段配置与 Prometheus scrape 目标一致,否则监控栈会空转。
[limit] 删除类 API 限流
[limit] request_count = 1 duration = 60该段专门控制删除类(delete)API 的速率:request_count个请求 /duration秒。默认值 1 请求/60 秒是非常保守的保护性设置,意在防止批量误删(如批量删除商户、路由规则、成本数据等破坏性操作),属于删除接口的"熔断阀"而非全局 QPS 限制。
[cache_config] Redis 缓存键配置
[cache_config] service_config_redis_prefix = "DE_service_config_" service_config_ttl = 300 # Redis TTL for service config entries, in seconds控制服务配置条目写入 Redis 的键前缀与存活时间(TTL,单位秒)。前缀避免与其他组件的缓存键冲突;TTL 决定了配置变更在缓存层的最大传播延迟(默认 300 秒内生效)。
[redis] 连接
[redis] host = "127.0.0.1" port = 6379Redis 是 Decision Engine 的必需依赖——它用于缓存路由配置(routing config)与服务配置(service config),不是可选优化项。Docker 运行时应将host改为 Compose 中的服务名(而非 127.0.0.1),因为容器网络中回环地址无法跨容器访问。
三、数据库配置:MySQL 与 PostgreSQL 双后端
Decision Engine 支持 MySQL 和 PostgreSQL 两种可互换的数据库后端,二者使用互相独立的配置段:
MySQL 后端:
[database] username = "db_user" password = "db_pass" host = "localhost" port = 3306 dbname = "decision_engine_db"PostgreSQL 后端:
[pg_database] pg_username = "db_user" pg_password = "db_pass" pg_host = "localhost" pg_port = 5432 pg_dbname = "decision_engine_db"注意两个段的键名风格不同:MySQL 段使用无缀键(username/host),PostgreSQL 段使用pg_前缀键(pg_username/pg_host),混写会导致解析不到连接参数。
Docker Compose 运行时,config/docker-configuration.toml已经通过服务名预接线了两者(pre-wired via service names)。从 本地部署文档 的 Profile 矩阵可以看到,核心 Profile(postgres-ghcr、mysql-ghcr等)都已包含对应数据库的迁移(migrations)任务,因此换库时 Profile 与配置文件要同步切换,避免"配置文件指向 MySQL、Profile 拉起 PostgreSQL 迁移"的不一致。
四、多租户 Schema 与 x-tenant-id 头
[tenant_secrets] public = { schema = "public" }tenant_secrets段把租户标识符映射到数据库 schema,实现租户级数据隔离。随仓库分发的配置文件(config/development.toml、config/docker-configuration.toml)只定义了public一个租户——如果要支持额外租户,需要自行在此段增加条目。
配置指南特别强调了一个容易踩坑的运行时行为:部分路由不是从已认证商户推导租户,而是直接解析请求头x-tenant-id,缺失时直接拒绝请求并返回TE_03错误码。以下路由必须携带x-tenant-id: public:
GET /health/diagnostics- 所有
GET /analytics/*路由 POST /gateway-score/reset
这一行为在 API 参考文档 的环境设置章节有对应说明。配置多租户后调用上述接口时,务必在 curl 示例中加入-H "x-tenant-id: public",否则会被TE_03拦截。
五、鉴权相关配置段
Decision Engine 的鉴权体系由三个配置段/标志位共同决定,理解它们之间的组合语义比逐个记住参数更重要:
[user_auth] JWT 配置
[user_auth] jwt_secret = "change_me_in_production_use_32chars!!" jwt_expiry_seconds = 86400 email_verification_enabled = falsejwt_secret:签名密钥,生产环境必须替换为强随机值,官方建议 32 字符以上;jwt_expiry_seconds:JWT 有效期(默认 86400 秒 = 1 天);email_verification_enabled:仅在接入了邮件服务商后才可置true。
[admin_secret] 管理员引导密钥
[admin_secret] secret = "test_admin"用于认证POST /merchant-account/create端点(管理员引导/bootstrap 入口,见 createMerchant API 文档)。生产环境必须更换此默认值。
api_key_auth_enabled 顶层标志——最易被误解的一项
api_key_auth_enabled = true这是一个顶层配置项(不属于任何段)。官方指南对它做了强烈的风险提示,语义是非对称的:
true:受保护路由在 JWT Bearer Token 之外,额外接受x-api-key请求头;false:鉴权中间件会放行所有请求,不做任何认证——即等价于对所有受保护路由关闭鉴权。
因此该标志的真实含义是"是否启用 API Key 通道",而不是"关闭 API Key 就只走 JWT"。任何需要强制鉴权的环境(包括内网测试环境)都不应将其设为false。
六、Analytics 链路:Kafka + ClickHouse
分析功能的数据流为:决策结果 → Kafka 发布 → 消费写入 ClickHouse,供分析与审计看板使用。两段配置都必须显式enabled = true——即使连接详情配置齐全,缺少enabled = true时 Analytics 整体仍是禁用状态:
[analytics.kafka] enabled = true brokers = "localhost:9092" api_topic = "api" domain_topic = "domain" [analytics.clickhouse] enabled = true url = "http://localhost:8123" user = "decision_engine" password = "decision_engine"api_topic与domain_topic是 Kafka 上两个主题,分别承载 API 层与领域层的分析事件。Docker 运行时这些连接在 Compose 中已预配置并启用(对应analytics-clickhouse等 Profile)。若你本地调用了GET /analytics/*却拿不到数据,排查顺序应为:两个enabled开关 → Kafka brokers 可达性 → ClickHouse URL/凭据 → 请求头x-tenant-id。
七、TLS 与出站 API 客户端
[tls] 应用层 TLS
[tls] certificate = "cert.pem" private_key = "key.pem"PEM 格式证书与私钥的路径。仅在你在应用层(而非反向代理层)终结 TLS 时才需要配置;若前置 Nginx/Envoy 已处理 TLS,此段可留空。
[api_client] 出站 HTTP 客户端
[api_client] client_idle_timeout = 90 pool_max_idle_per_host = 10 identity = ""控制 Decision Engine 发起上游调用(upstream calls)所用的出站 HTTP 客户端:空闲超时 90 秒、每主机最大空闲连接 10。identity默认为空字符串,如需与上游做 mTLS(双向 TLS),将其设为身份证书 PEM 路径。
八、Secrets Management:从明文到 KMS/Vault
默认情况下,配置中的密钥以明文存储在配置文件中。生产部署官方支持两种后端,分别由 Cargo feature 开关控制编译能力:
AWS KMS(需kms-awsfeature,包含在releasefeature 集合中)
[secrets_management] secrets_manager = "aws_kms" [secrets_management.aws_kms] key_id = "your-kms-key-id" region = "us-east-1"HashiCorp Vault(需kms-hashicorp-vaultfeature)
[secrets_management] secrets_manager = "hashi_corp_vault" [secrets_management.hashi_corp_vault] url = "http://127.0.0.1:8200" token = "hvs.your_token"配置了 Secrets Manager 后,database.password、user_auth.jwt_secret等敏感字段将从 Vault 解析而非读取配置文件明文——配置文件中只保留指向 Vault 的参数。选型建议:AWS 环境优先 KMS(随releasefeature 开箱即用),自建/混合云环境用 Vault。
九、环境变量覆盖与延伸阅读
配置指南指出:选定值可以在运行时通过环境变量覆盖,这在 Helm 部署中通过extraEnvVars注入尤其有用(避免把敏感值固化进 ConfigMap)。完整的环境变量到配置项的映射以 Decision Engine 项目中的src/config.rs为准(该源码文件位于 decision-engine 仓库,不在本 Hyperswitch 仓库内)。
配置完成后的验证与下一步:
- 健康检查:
curl http://localhost:8080/health,预期{"message": "Health is good"}; - 诊断端点(注意携带租户头):
curl -H "x-tenant-id: public" http://localhost:8080/health/diagnostics; - 完整部署矩阵(Compose Profile、源码构建、Helm)见 Local Setup 指南;
- 数据库专项的 make 目标与验证步骤见 PostgreSQL 设置 与 MySQL 设置;
- 可复制的 curl 示例见 API 指南 与 API Reference 索引。
生产配置自检清单:jwt_secret已随机化;admin_secret已更换;api_key_auth_enabled = true未被误置为false;日志为json格式;敏感连接串走 KMS/Vault 而非明文;[limit]段保留删除接口限流;多租户路由调用携带x-tenant-id。逐项核对后,配置层面的安全基线即已达到官方指南的要求。
【免费下载链接】hyperswitchOpen source, composable payments platform | PCI compliant | SaaS and Self-host options | Enables connectivity to multiple payment, payout, fraud, vault and tokenization providers | Uplifts authorization with intelligent routing and revenue recovery | Reduce payment processing costs with cost observability | Reduces payment ops with reconciliation项目地址: https://gitcode.com/GitHub_Trending/hy/hyperswitch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考