配置指南
概述
AxonHub 使用灵活的配置系统,支持 YAML 配置文件和环境变量。本指南涵盖了所有可用的配置选项以及针对不同部署场景的最佳实践。
配置方法
配置优先级
AxonHub 使用 Viper 进行配置管理,它可以从多个配置源读取并将其合并为一组配置键值对。Viper 使用以下优先级进行合并(从高到低):
- 环境变量 - 系统环境变量
- 配置文件 - YAML 配置文件
- 外部键/值存储 - 外部配置存储
- 默认值 - 内置默认值
这意味着环境变量将覆盖配置文件中的值,而命令行标志将覆盖环境变量。
1. YAML 配置文件
创建一个 config.yml 文件:
# config.yml
server:
port: 8090
name: "AxonHub"
db:
dialect: "sqlite3"
dsn: "file:axonhub.db?cache=shared&_fk=1"
log:
level: "info"
encoding: "json"
2. 环境变量
所有配置选项都可以通过环境变量设置:
export AXONHUB_SERVER_PORT=8090
export AXONHUB_DB_DIALECT="sqlite3"
export AXONHUB_DB_DSN="file:axonhub.db?cache=shared&_fk=1"
export AXONHUB_LOG_LEVEL="info"
3. 混合配置
环境变量会覆盖 YAML 配置值。
配置参考
服务器配置
server:
port: 8090 # 服务器端口
name: "AxonHub" # 服务器名称
base_path: "" # API 路由的基础路径
request_timeout: "30s" # 请求超时时间
llm_request_timeout: "600s" # LLM 请求超时时间
trace:
thread_header: "AH-Thread-Id" # 线程 ID 请求头名称
trace_header: "AH-Trace-Id" # 追踪 ID 请求头名称
extra_trace_headers: [] # 额外的追踪请求头
claude_code_trace_enabled: false # 启用 Claude Code 追踪提取
codex_trace_enabled: false # 启用 Codex 追踪提取
debug: false # 启用调试模式
环境变量:
AXONHUB_SERVER_PORTAXONHUB_SERVER_NAMEAXONHUB_SERVER_BASE_PATHAXONHUB_SERVER_REQUEST_TIMEOUTAXONHUB_SERVER_LLM_REQUEST_TIMEOUTAXONHUB_SERVER_TRACE_THREAD_HEADERAXONHUB_SERVER_TRACE_TRACE_HEADERAXONHUB_SERVER_TRACE_EXTRA_TRACE_HEADERSAXONHUB_SERVER_TRACE_CLAUDE_CODE_TRACE_ENABLEDAXONHUB_SERVER_TRACE_CODEX_TRACE_ENABLEDAXONHUB_SERVER_DEBUG
数据库配置
db:
dialect: "sqlite3" # sqlite3, postgres, mysql, tidb
dsn: "file:axonhub.db?cache=shared&_fk=1" # 连接字符串
debug: false # 启用数据库调试日志
支持的数据库:
- SQLite:
sqlite3(开发环境) - PostgreSQL:
postgres(生产环境) - MySQL:
mysql(生产环境) - TiDB:
tidb(生产环境/云端)
环境变量:
AXONHUB_DB_DIALECTAXONHUB_DB_DSNAXONHUB_DB_DEBUG
缓存配置
cache:
mode: "memory" # memory, redis, two-level
# 内存缓存配置
memory:
expiration: "5s" # 内存缓存 TTL
cleanup_interval: "10m" # 内存缓存清理间隔
# Redis 缓存配置
redis:
url: "" # Redis 连接 URL (redis:// 或 rediss://)
addr: "" # Redis 地址: 127.0.0.1:6379
username: "" # 如果设置,将覆盖 URL 中的用户名
password: "" # 如果设置,将覆盖 URL 中的密码
db: 0 # 如果设置,将覆盖 URL 路径中的数据库编号 (/0)
tls: false # 启用 TLS (rediss:// 也会自动启用)
tls_insecure_skip_verify: false # 跳过 TLS 证书验证 (自签名证书)
expiration: "30m" # Redis 缓存 TTL
环境变量:
AXONHUB_CACHE_MODEAXONHUB_CACHE_MEMORY_EXPIRATIONAXONHUB_CACHE_MEMORY_CLEANUP_INTERVALAXONHUB_CACHE_REDIS_URLAXONHUB_CACHE_REDIS_ADDRAXONHUB_CACHE_REDIS_USERNAMEAXONHUB_CACHE_REDIS_PASSWORDAXONHUB_CACHE_REDIS_DBAXONHUB_CACHE_REDIS_TLSAXONHUB_CACHE_REDIS_TLS_INSECURE_SKIP_VERIFYAXONHUB_CACHE_REDIS_EXPIRATION
日志配置
log:
name: "axonhub" # 日志器名称
debug: false # 启用调试日志
level: "info" # debug, info, warn, error, panic, fatal
level_key: "level" # 日志级别字段的键名
time_key: "time" # 时间戳字段的键名
caller_key: "label" # 调用者信息字段的键名
function_key: "" # 函数名字段的键名
name_key: "logger" # 日志器名称字段的键名
encoding: "json" # json, console, console_json
includes: [] # 包含的日志器名称
excludes: [] # 排除的日志器名称
output: "stdio" # file 或 stdio
file: # 基于文件的日志配置
path: "logs/axonhub.log" # 日志文件路径
max_size: 100 # 轮转前的最大大小 (MB)
max_age: 30 # 保留的最大天数
max_backups: 10 # 旧日志文件的最大数量
local_time: true # 轮转文件使用本地时间
环境变量:
AXONHUB_LOG_NAMEAXONHUB_LOG_DEBUGAXONHUB_LOG_LEVELAXONHUB_LOG_LEVEL_KEYAXONHUB_LOG_TIME_KEYAXONHUB_LOG_CALLER_KEYAXONHUB_LOG_FUNCTION_KEYAXONHUB_LOG_NAME_KEYAXONHUB_LOG_ENCODINGAXONHUB_LOG_INCLUDESAXONHUB_LOG_EXCLUDESAXONHUB_LOG_OUTPUTAXONHUB_LOG_FILE_PATHAXONHUB_LOG_FILE_MAX_SIZEAXONHUB_LOG_FILE_MAX_AGEAXONHUB_LOG_FILE_MAX_BACKUPSAXONHUB_LOG_FILE_LOCAL_TIME
指标配置
metrics:
enabled: false # 启用指标收集
exporter:
type: "oltphttp" # prometheus, console
endpoint: "localhost:8080" # 指标导出器端点
insecure: true # 启用不安全连接
环境变量:
AXONHUB_METRICS_ENABLEDAXONHUB_METRICS_EXPORTER_TYPEAXONHUB_METRICS_EXPORTER_ENDPOINTAXONHUB_METRICS_EXPORTER_INSECURE
垃圾回收配置
gc:
cron: "0 2 * * *" # GC 执行的 Cron 表达式
环境变量:
AXONHUB_GC_CRON
配置示例
开发环境配置
server:
port: 8090
name: "AxonHub Dev"
debug: true
db:
dialect: "sqlite3"
dsn: "file:axonhub.db?cache=shared&_fk=1"
debug: true
log:
level: "debug"
encoding: "console"
output: "stdio"
生产环境配置
server:
port: 8090
name: "AxonHub Production"
debug: false
request_timeout: "30s"
llm_request_timeout: "600s"
db:
dialect: "postgres"
dsn: "postgres://axonhub:password@localhost:5432/axonhub?sslmode=disable"
debug: false
cache:
mode: "redis"
redis:
addr: "redis:6379"
password: "redis-password"
expiration: "30m"
log:
level: "warn"
encoding: "json"
output: "file"
file:
path: "/var/log/axonhub/axonhub.log"
max_size: 200
max_age: 14
max_backups: 7
数据库连接字符串
SQLite
file:axonhub.db?cache=shared&_fk=1
PostgreSQL
postgres://username:password@host:5432/database?sslmode=disable
MySQL
username:password@tcp(host:3306)/database?parseTime=True&multiStatements=true&charset=utf8mb4
TiDB
username.root:password@tcp(host:4000)/database?tls=true&parseTime=true&multiStatements=true&charset=utf8mb4
最佳实践
安全
对敏感信息使用环境变量
export AXONHUB_DB_DSN="postgres://axonhub:$(cat /run/secrets/db-password)@localhost:5432/axonhub"为数据库连接启用 TLS
dsn: "postgres://user:pass@host:5432/axonhub?sslmode=verify-full"在生产环境中使用基于文件的日志
log: output: "file" file: path: "/var/log/axonhub/axonhub.log"
性能
在生产环境中使用 Redis 进行缓存
cache: mode: "redis" redis: addr: "redis:6379" expiration: "30m"配置适当的超时时间
server: request_timeout: "30s" llm_request_timeout: "600s"启用指标进行监控
metrics: enabled: true exporter: type: "prometheus"
故障排除
在开发环境中启用调试模式
server: debug: true log: level: "debug"启用数据转储进行错误分析
dumper: enabled: true dump_path: "./dumps"
验证
验证您的配置:
./axonhub config check
此命令将验证您的配置文件并报告任何错误。