公司的研发流程是代码 push 到代码库,经过评审合入,再用来上线。我自己平时用 GitHub托管代码也是类似的操作。这样就碰到一个尴尬的问题:代码里配置文件通常包含了一些 token、数据库密码之类的敏感信息,无论是公司内部开源还是自己的代码放 GitHub 上都不合适。下面介绍一下我自己处理这种情况的几种方式。

1. 只提交配置示例文件

假如配置文件叫 conf.json,先把它写到 .gitignore 中避免提交,再新建一个对应的 conf.sample.json 示例文件,数据留空,提交。这样线上部署时,可以复制示例文件,再修改里面的值生效。这种方式可能需要编写上线脚本来填充配置文件。

2. 使用环境变量

在代码中读取环境变量来获取参数值,这样线上、线下配置不同的环境变量就达到了目的。这种方式不需要上线时操作文件,但要配置环境变量。

3. 分 branch 放置配置文件

区分开发分支和发布分支,在两个分支中分别管理配置,日常在开发分支开发、提交,发布时合并到发布分支,再打包发布分支。这种方式适合通过上传压缩包上线的方式。

4. 使用 Blackbox

Blackbox 是一个命令行工具,支持多种 VCS 的文件 GPG 加密。通过添加本地秘钥和服务器秘钥的方式,使得 VCS 中的文件只能在本地和服务器上可以被解密。

上述四种方式,无论是避免把配置文件提交到代码库,还是把配置加密后再提交,都是防止配置被泄露的方法。