环境配置与密钥
十二要素配置、环境变量与 Docker 密钥
环境配置与密钥 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
12-factor 应用配置
12-factor 应用方法建议将配置存储在环境变量中,而不是代码或配置文件中。这样无需修改代码,应用便可在开发、预发布和生产环境之间移植。
os.Getenv
使用 os.Getenv 读取环境变量(未设置时返回 ""),或使用 os.LookupEnv(返回值和表示是否存在的布尔值):
port := os.Getenv("PORT")
if port == "" { port = "8080" }
dsn, ok := os.LookupEnv("DATABASE_URL")
if !ok { log.Fatal("DATABASE_URL not set") }加载 .env 文件
在开发环境中使用 github.com/joho/godotenv 加载 .env 文件。在生产环境中,通过平台(Docker、Kubernetes、云平台)注入环境变量。
godotenv.Load() // loads .env if present; ignores error in prod使用 envconfig 的结构化配置
github.com/kelseyhightower/envconfig 可将环境变量映射到结构体字段,并进行类型转换和验证:
type Config struct {
Port int `envconfig:"PORT" default:"8080"`
DBUrl string `envconfig:"DB_URL" required:"true"`
LogLevel string `envconfig:"LOG_LEVEL" default:"info"`
}
var cfg Config
envconfig.MustProcess("", &cfg)机密信息管理
切勿在生产环境的环境变量中存储机密信息(密码、接口密钥、TLS 证书)——它们会出现在进程列表和日志中。请使用机密信息管理器:AWS Secrets Manager、HashiCorp Vault,或将 Kubernetes Secrets 挂载为文件。
从文件读取机密信息
将机密信息挂载为文件,并在启动时读取:
secret, err := os.ReadFile("/run/secrets/db_password")
if err != nil { log.Fatal(err) }
dsn := fmt.Sprintf("postgres://user:%s@host/db", strings.TrimSpace(string(secret)))Kubernetes 机密信息
在 Kubernetes 中,将 Secret 值作为环境变量或卷中的文件进行挂载。由于文件挂载无需重启 Pod 即可轮换,因此更为推荐。
功能开关
对于简单的开启/关闭切换,请将功能开关名称存储在环境变量中。对于复杂的开关规则(按百分比分批发布、定向投放),请使用专用的功能开关服务。
启动时验证配置
在启动时验证所有必需的配置,如果缺少任何内容或存在无效值,就立即失败。与其在第一个请求到达时才失败,不如立即崩溃。
if cfg.DBUrl == "" { log.Fatal("DB_URL required") }不可变配置
将配置视为启动后不可变的。如果需要实时更新配置,请使用功能开关服务或带监听机制的配置存储,而不要热加载环境变量。
测试中的配置
使用 t.Setenv 在测试期间设置环境变量。对于 Go 1.17 及更高版本中的并行测试,这样做是安全的。
t.Setenv("PORT", "9090")
// test code here...快速检查
为什么不应在生产环境的环境变量中存储机密信息?
回顾:环境配置与机密信息
要点:
- 将配置存储在环境变量中;使用 godotenv 处理本地开发中的 .env 文件
- 使用 envconfig 按类型填充结构体,并提供默认值
- 将机密信息挂载为文件;在生产环境中使用 Vault 或 Secrets Manager
- 在启动时验证所有配置;缺少任何内容时立即失败
常见问题解答
「环境配置与密钥」课时是免费的吗?
是的 — 「环境配置与密钥」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「环境配置与密钥」这节课中我会学到什么?
十二要素配置、环境变量与 Docker 密钥 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「环境配置与密钥」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。