Architecture Decision Record

Active theme: Light

← 决策记录例子

环境变量配置

目录:

摘要

问题

阿拉想让阿拉个应用除了制品/二进制文件/源代码之外也可以配置,让同一次构建可以根据部署环境表现勿同。

  • 为了做到迭点,阿拉想用环境变量配置。

  • 阿拉想用可以做版本控制个文件来管理配置。

  • 阿拉想提供一眼开发者体验上个便利,比方晓得啥可以配置,还有相关个默认值。

决策

决定用 .env 文件,加上相关个默认值文件搭模式文件。

状态

已决定。对出现个新能力保持开放,愿意考虑。

详情

假设

阿拉倾向于拿应用代码搭环境代码分开。阿拉假设应用辣勿同个环境里需要有勿同个表现,比方开发环境、测试环境、演示环境、生产环境等等。

阿拉倾向于“12 factor app”迭个行业实践,更加倾向于相关个“15 factor app”实践。

阿拉以前许多项目用过 .env 文件或者类似 .env 目录个约定。典型个做法是拿伊拉放辣版本控制之外,而是用其他办法来部署、做版本搭管理伊拉。

限制

阿拉想拿机密放辣源代码管理(SCM)个版本控制系统(VCS)之外。

阿拉想尽量兼容流行个软件框架搭库。比方,Node 有一个模块“dotenv”,用来读取环境变量配置。

立场

阿拉考虑过几种办法:

  • 拿配置存辣应用里,比方放辣一个 config.js 文件里。

  • 拿配置存辣环境里,比方放辣一个 .env 文件里。

  • 从一个已知个位置取配置,比方许可证服务器。

论据

阿拉选了 .env 文件个办法,因为:

  • 伊流行,包括辣专家当中。

  • 伊遵循 .env 文件个模式,阿拉个团队辣许多项目里成功用过许多趟。

  • 伊简单。值得注意个是,阿拉现在可以接受所看到个重大取舍,比方搭许可证服务器个办法比起来缺少审计能力。

影响

阿拉需要想出一种办法,拿公开个环境变量配置搭任何机密管理分开。

相关

相关决策

阿拉预期所有个应用侪用迭个办法。

阿拉会计划升级用能力较弱个办法个任何应用,比方硬编码辣二进制文件或者源代码里。

对用能力较强个办法(比方许可证服务器)个任何应用,阿拉保持原样。

相关需求

阿拉会为迭眼文件增加 devops 能力,包括钩子、测试搭持续集成。

阿拉需要就迭个决策培训所有开发者队友。

相关工件

阿拉部署个每个区域,侪需要自家个 .env 文件搭相关文件。

相关原则

容易撤销。

备注

.env 文件例子:

NAME=Alice Anderson
EMAIL=alice@example.com

.env.defaults 文件例子:

NAME=Joe Doe
EMAIL=joe@example.com

只有键个 .env.schema 文件例子:

NAME
EMAIL