跳转到主要内容
hs-sql-agent
2.0.2
文档 2.0.2
文档 运维

配置参考

hs-sql-agent 2.0.2 基于源码的环境变量与运行时配置参考。

单实例 从 .env.example 开始,在确实需要共享状态之前保留进程内 provider。
分布式 使用 Postgres 控制平面,以及 Redis-backed cache、限流、策略同步、投递同步和 SQL 并发协调。
嵌入式 .NET 新集成配置 capability-specific options;HsSqlAgentServiceOptions 只作为旧聚合 API 的兼容入口保留。

仓库中的 v2.0.2 .env.example 是默认 Compose 部署面向运维的环境变量清单。本页的环境变量名称以该文件为准;如果示例注释与运行时代码校验不一致,则以 v2.0.2 可执行代码为准。

应用与控制平面

变量.env.example 示例/默认值用途
ASPNETCORE_URLShttp://+:8080主 ASP.NET Core listener
ALLOWED_HOSTS*ASP.NET Core host filtering
ADMIN_DATABASE_PROVIDERSqliteAdmin/control-plane database provider
ADMIN_DATABASE_CONNECTION_STRINGData Source=/app/data/hsqlagent.db保存账号、角色、密钥、审计记录、策略及其他控制平面状态
HMAC_KEYplaceholder用于保护/验证已签发 MCP 密钥的 HMAC secret;≥32 字节
MCP_PUBLIC_ENDPOINThttp://localhost:8080/mcp写入生成 MCP 客户端配置的绝对 endpoint

MCP_PUBLIC_ENDPOINT 必须是绝对 HTTP 或 HTTPS URL。生产环境应填写客户端真正能访问的地址并包含 /mcp,而不是容器内部地址。

Admin database 拓扑

单实例示例使用 SQLite,分布式示例使用 PostgreSQL:

ADMIN_DATABASE_PROVIDER=Postgres
ADMIN_DATABASE_CONNECTION_STRING=Host=postgres;Port=5432;Database=hsqlagent;Username=postgres;Password=...

当多个 hs-sql-agent 实例需要看到同一套身份、密钥、策略和审计/控制平面记录时,应使用共享 Admin database。

Cache

变量单实例示例分布式示例用途
CACHE_PROVIDERMemoryRedis运行时 cache provider
CACHE_CONNECTION_STRINGredis:6379选择 Redis 时的连接
CACHE_KEY_PREFIXhsqlagent:cache:同上cache key namespace

只有不需要在应用实例之间共享 cache state 时,进程内 Memory 才合适。

Bootstrap / 自动预配

变量示例用途
BOOTSTRAP_ENABLEDfalse启用启动时 provisioning/synchronization
BOOTSTRAP_DB_IDdefault-db初始数据库的稳定 bootstrap identity
BOOTSTRAP_DB_NAMEDefault DB管理界面显示的数据库名称
BOOTSTRAP_DB_PROVIDER要预配的 provider
BOOTSTRAP_DB_HOSTlocalhost数据库 host
BOOTSTRAP_DB_PORT5432数据库 port
BOOTSTRAP_DB_DATABASEmydbdatabase/catalog/file 值
BOOTSTRAP_DB_USERNAMEmyuser数据库用户名
BOOTSTRAP_DB_PASSWORDmypassword数据库密码
BOOTSTRAP_DB_EXTRA_SETTINGSprovider-specific connection settings
BOOTSTRAP_MCP_KEY_IDdefault-key初始 MCP 密钥的稳定 bootstrap identity
BOOTSTRAP_MCP_KEY_NAMEDefault MCP Key管理界面显示的密钥名称
BOOTSTRAP_MCP_KEYplaceholder初始 raw key value
BOOTSTRAP_MCP_ALLOWED_TOOLSbootstrap 密钥的工具限制

Bootstrap 管理的 MCP 密钥刻意不能通过普通密钥生命周期编辑、轮换或撤销。需要变更时,应修改其源配置。

Admin 身份验证

变量示例用途
JWT_KEYplaceholderJWT signing secret;≥32 字节
JWT_ISSHS-AgentJWT issuer
JWT_AUDHS-Agent-UsersJWT audience
JWT_ACCESS_TOKEN_EXPIRATION_MINUTES10access-token 生命周期
JWT_REFRESH_TOKEN_EXPIRATION_DAYS1refresh-token 生命周期
AUTH_LOCKOUT_THRESHOLD5临时锁定前允许的失败登录次数;小于 1 的值按 1 处理
AUTH_LOCKOUT_MINUTES15临时锁定时长

这些设置控制 Admin 身份验证,不控制 MCP 密钥身份验证。

密码重置与 SMTP

SMTP host 或 sender 为空时,密码重置邮件实际上处于禁用状态。

变量示例用途
PASSWORD_RESET_BASE_URLhttp://localhost:3000/reset-password外部可访问的 reset page;server 会追加 ?token=...
PASSWORD_RESET_EXPIRATION_MINUTES30一次性 reset token 生命周期
SMTP_HOSTsmtp.example.comSMTP host
SMTP_PORT587SMTP port
SMTP_ENABLE_SSLtrue邮件发送器使用的 SSL/STARTTLS 行为
SMTP_USERNAMEexampleSMTP 凭据
SMTP_PASSWORDexampleSMTP 凭据
SMTP_FROMno-reply@example.comSMTP provider 接受的发件地址

OIDC / SSO 与 MFA

变量示例用途
OIDC_ENABLEDfalse启用 OIDC 身份验证
OIDC_AUTHORITYidentity-provider authority
OIDC_CLIENT_IDOIDC client ID
OIDC_CLIENT_SECRETOIDC client secret
OIDC_REQUIRE_HTTPS_METADATAtrue要求 HTTPS discovery metadata
OIDC_EMAIL_CLAIMemailemail claim 名
OIDC_NAME_CLAIMnamedisplay-name claim
OIDC_ROLE_CLAIMrolesrole claim
OIDC_EMAIL_VERIFIED_CLAIMemail_verifiedverified-email claim
OIDC_REQUIRE_VERIFIED_EMAILtrue根据配置 claim 拒绝邮箱未验证的身份
OIDC_SCOPE_0..2openid, profile, email默认 scope
OIDC_ROLE_MAPPING_SQL_ADMINSSuperUser外部角色 → 本地角色映射示例
OIDC_AUTO_PROVISIONtrue外部身份解析成功后自动预配用户
OIDC_FRONTEND_CALLBACK_URL/sso-callbackfrontend completion route
OIDC_LOGIN_CODE_EXPIRATION_MINUTES2短期 login code 生命周期
OIDC_TOTP_ISSUERHS SQL AgentTOTP issuer label
DATA_PROTECTION_KEY_PATH/app/data/data-protection-keys持久化 ASP.NET Core data-protection key 的目录

详见 OIDC SSO 与 TOTP MFA

健康、慢查询、投递与审计保留

变量示例用途
HEALTH_PROBE_ENABLEDfalse启用后台 DB 健康探测
HEALTH_PROBE_INTERVAL_SECONDS60探测频率
HEALTH_PROBE_TIMEOUT_SECONDS10单次探测超时
HEALTH_PROBE_MAX_CONCURRENCY4并发探测任务上限
SLOW_QUERY_THRESHOLD_MS1000达到/超过该耗时的 Query 记为慢查询
ALERT_WEBHOOK_URL可选签名告警目标
ALERT_WEBHOOK_SECRETHMAC/signing secret;启用 URL 时 ≥32 字节
SIEM_WEBHOOK_URL可选签名 SIEM 目标
SIEM_WEBHOOK_SECRETHMAC/signing secret;启用 URL 时 ≥32 字节
DELIVERY_MAX_ATTEMPTS6出站投递重试次数上限
DELIVERY_MAX_CONCURRENCY4并发出站投递上限
AUDIT_RETENTION_DAYS90保留天数;0 禁用自动保留
AUDIT_RETENTION_MODEArchive运行时有效值:ArchivePurge
AUDIT_ARCHIVE_PATH/app/data/audit-archiveArchive 模式归档目标
AUDIT_FALLBACK_PATH/app/data/audit-fallback.jsonl审计 fallback 路径;启动校验要求存在
AUDIT_RETENTION_RUN_HOUR_UTC2计划执行的 UTC 小时;运行时限制在 0–23

Archive 会先把过期审计行写入 JSONL 归档,再从 Admin 数据库删除。Purge 则不创建归档,直接删除匹配的过期记录。

全局与每密钥限流

变量单实例分布式用途
RATE_LIMITING_PERMIT_LIMIT00全局 IP permit limit;limit 和 window 都为 0 时表示无限制
RATE_LIMITING_WINDOW_SECONDS00全局 IP window
RATE_LIMITER_PROVIDERMemoryRedisshared limiter implementation
RATE_LIMITER_CONNECTION_STRINGredis:6379Redis connection
RATE_LIMITER_FAILURE_MODEFailClosedFailCloseddistributed limiter 不可用时的行为
RATE_LIMITER_KEY_PREFIXhsqlagent:ratelimit:同上Redis key namespace

MCP 密钥还可以继承、覆盖或禁用自己的每密钥限制。详见 MCP 密钥

运行时策略同步

变量单实例分布式用途
SECURITY_POLICY_SYNC_PROVIDERMemoryRedisruntime policy synchronization provider
SECURITY_POLICY_SYNC_CONNECTION_STRINGredis:6379Redis connection
SECURITY_POLICY_SYNC_KEY_PREFIXhsqlagent:security-policy:同上key namespace
SECURITY_POLICY_SYNC_REFRESH_INTERVAL_SECONDS3030refresh interval

需要让策略变更传播到多个 hs-sql-agent 实例时,请选择 Redis。

出站投递同步

变量单实例分布式用途
OUTBOUND_DELIVERY_SYNC_PROVIDERMemoryRedisdelivery signal coordination
OUTBOUND_DELIVERY_SYNC_CONNECTION_STRINGredis:6379Redis connection
OUTBOUND_DELIVERY_SYNC_KEY_PREFIXhsqlagent:outbound-delivery:同上key namespace

SQL 并发协调

变量单实例分布式用途
SQL_CONCURRENCY_PROVIDERMemoryRedisSQL concurrency limiter provider
SQL_CONCURRENCY_CONNECTION_STRINGredis:6379Redis connection
SQL_CONCURRENCY_FAILURE_MODEFailClosedFailCloseddistributed coordination 失败时的行为
SQL_CONCURRENCY_KEYhsqlagent:sql-concurrency同上shared coordination key
SQL_CONCURRENCY_LEASE_SECONDS3030lease 时长

metadata discovery、Query、DML planning/execution 以及健康相关 SQL 工作都走受限运行时路径。如果并发上限必须在整个集群范围内生效,而不是每个进程各算一份,请使用分布式 SQL concurrency。

可观测性

变量示例用途
PROMETHEUS_ENABLEDfalse启用 Prometheus HTTP listener
PROMETHEUS_HOST0.0.0.0metrics listener 绑定 host
PROMETHEUS_PORT9000独立 metrics listener 端口;启用时校验 1–65535
OTLP_ENDPOINT绝对 HTTP(S) OTLP collector endpoint
OTEL_SERVICE_NAMEhs-sql-agentOpenTelemetry service name;不能为空

Prometheus 刻意运行在与 Admin/MCP 应用端口独立的 listener上。配置 OTLP_ENDPOINT 后,v2.0.2 会导出包括 SQL compile-evidence tracing/log integration 在内的遥测。

详见 可观测性与审计运维

Logging

变量示例
LOGGING_EFCORE_COMMAND_LOGLEVELWarning
LOGGING_DEFAULT_LOGLEVELInformation
LOGGING_ASPNETCORE_LOGLEVELWarning

把常规 EF Core command logging 保持在 Warning,可以降低生产运行中的大量 SQL command trace 噪音。

Docker 环境与嵌入式 .NET capability options

Docker/ToolBox 环境变量是一套完整独立服务器配置面。新 NuGet 集成不同:AddHsSqlAgentCore() 本身不接收 options,每个被选中的 capability 只负责自己的配置。

例如:

  • HsSqlAgentAdminStoreOptions:Admin database provider 和 connection string;
  • HsSqlAgentRuntimeOptions:cache、rate limiting、synchronization、SQL concurrency、DML approval storage、bootstrap、operability;
  • HsSqlAgentBuiltInAuthOptions:JWT、password reset/SMTP、enterprise identity/OIDC;
  • McpOptions:public MCP endpoint 和 HMAC secret;
  • TelemetryOptions:Prometheus 和 OTLP settings。

HsSqlAgentServiceOptions 仅作为旧 aggregate compatibility DTO 保留。未选择的 capability 不会分配或验证其 options,因此使用 AddHsSqlAgentHostAuthorization(...) 的嵌入宿主无需配置 HsSqlAgent JWT、SMTP、密码重置或 OIDC。

模块化 API 保留现有代码默认值。.env.example 是 standalone ToolBox 路径的部署示例,并不意味着每个嵌入式宿主都必须配置所有 capability。

详见 ASP.NET Core 集成