Skip to content

配置说明

所有配置文件位于 configs/

文件配置内容
application.yaml公共配置,所有进程共享。包含 datasource、redis、sa-token、xss、cors、captcha、mail、sms、social、oss、push、accesslog、traceId、repeatableBody、i18n、apiEncrypt、user.password 等全部业务开关。各进程独有的端口在 <模块>.yaml 中覆盖。
standalone.yaml单体进程独有。server.name=standaloneaddr=":8080"snowflake.workerId=0
auth.yamlauth 模块进程。server.name=authaddr=":8080"snowflake.workerId=1
system.yamlsystem 模块进程。server.name=systemaddr=":8080"snowflake.workerId=2
resource.yamlresource 模块进程。server.name=resourceaddr=":8080"snowflake.workerId=3
monitor.yamlmonitor 模块进程。server.name=monitoraddr=":8080"

workerId 分配

必须互不相同 各进程共用同一数据库,snowflake.workerId 必须互不相同,否则雪花主键撞号。已分配:auth=1

system=2resource=3standalone=0。同模块起多副本时,副本须挂载各自的 yaml 覆盖 workerId

application.yaml 顶层段

Section控制内容
datasourceMySQL 连接:driver/host/port/username/password/dbname/params、连接池 maxIdleConns/maxOpenConns/connMaxLifetime/connMaxIdleTime、logLevel、slowThresholdMs。
redisRedis 连接:host/port/password/db/clientName(便于 CLIENT LIST 排查)、poolSize/minIdleConns/超时。
satokensa-token-go 鉴权:tokenName(读 token 的请求头名)、isConcurrent(多端在线)、isShare(多端是否共享同一 token)、jwtSecretKey。
user.password密码错误重试:maxRetryCount(达到即锁定)、lockTime(锁定时长分钟)。
cors跨域:allowCredentials、allowedOriginPatterns(支持 * 通配)、allowedMethods/allowedHeaders、exposedHeaders(X-Request-Id / Content-Disposition / download-filename)、maxAgeSeconds。
xssXSS 清洗:excludeUrls(Ant 风格路径排除,如富文本公告 /system/notice)、skipMethods(GET/DELETE 不携带落库内容)。
accesslog请求日志:maxParamLength(参数日志最大字符数 rune)、skipPaths(不打日志的路径)。
traceId链路 id:header(X-Request-Id)、trustInbound(是否沿用上游 nginx/网关生成的 id;进程直接暴露公网时应关掉)。
repeatableBody可重读请求体:contentTypes(需缓存的前缀,勿加 multipart/form-data 否则上传文件读进内存)、maxBodySize(超出直接拒绝不截断)。
i18n国际化:header(content-language)、default(zh-cn)。
apiEncrypt接口加密:enabled、headerFlag(encrypt-key)、publicKey(响应加密)、privateKey(请求解密)。
captcha验证码:enable、type(math 算术 / char 字符)、numberLength、charLength。
push消息推送:enabled、transport(sse / websocket,非法回落 sse)、path(相对部分 /message)、sseTimeoutSeconds、heartbeatSeconds、sendBuffer。跨域统一由 cors 管。
mail邮件(/resource/email/code):enabled、host、port(465 配 ssl=true,587 配 ssl=false STARTTLS)、ssl、from、user、password(QQ/163 填「授权码」)。enabled=false 时接口返回提示而非报错。
sms短信(阿里云,/resource/sms/code):enabled、accessKeyId、accessKeySecret、signName、templateCode(模板变量名须为 code)、endpoint、regionId。换厂商实现 pkg/sms 的 Sender 接口即可。
social三方登录:type 下 gitee/github/maxkey/topiam;未填 clientId/clientSecret 的平台一律视为未启用,/auth/binding/{source} 返回「xx平台账号暂不支持」。redirectUri 指向前端回调页,须与平台控制台登记地址一致。

sa-token-go replace 指令

go.mod 末尾的 replace 块:

// sa-token-go 是多 module 仓库,goproxy 未缓存、github 直连受限,
// 故以本地检出版本 replace。
replace (
	github.com/sa-tokens/sa-token-go/core => E:/WorkSpace/sa-token-go-main/core
	github.com/sa-tokens/sa-token-go/integrations/gin => E:/WorkSpace/sa-token-go-main/integrations/gin
	github.com/sa-tokens/sa-token-go/storage/memory => E:/WorkSpace/sa-token-go-main/storage/memory
	github.com/sa-tokens/sa-token-go/storage/redis => E:/WorkSpace/sa-token-go-main/storage/redis
	github.com/sa-tokens/sa-token-go/stputil => E:/WorkSpace/sa-token-go-main/stputil
)

上线 / 换机时若可直连 proxy,删掉 replace 块并 go get 即可。require 版本统一 v0.2.4

配置加载机制

pkg/config 用 viper 读取多份 yaml, 后者覆盖前者Load 先用 DefaultXxx().setDefaults(v) 注入默认值再读 yaml,故缺失字段有兜底;validate() 串联校验所有子配置,任一失败即 panic(启动期 fail-fast)。Get() 取包级实例,未 Load 也 panic。

环境变量改不了配置

pkg/config 没开 viper.AutomaticEnv,改配置只能改 yaml(或容器部署时挂载覆盖)。

详见 pkg 参考 / config · database · redis · cache

基于 MIT 协议开源