0Pricing
Go Academy · 课时

环境配置与密钥

十二要素配置、环境变量与 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Go 的多阶段 Docker 构建
  2. 环境配置与密钥
  3. 用于本地开发的 Docker Compose
  4. 健康检查与生产环境调优
← 返回 Go Academy