如何使用git自动部署一个configuration文件的网站?

我有一个用NodeJS编写的应用程序。 每次我推我的代码与我的主分支上的git,代码自动部署在我的服务器上。 一切工作正常。

但是我的config文件有问题,这与我的本地服务器和远程服务器不同。
要解决这个问题,我已经排除了git我的config文件并将其复制到_config 。 在_config文件中,我把所有的configuration服务器,当代码部署到服务器,我做了自动$ cp _config config为了采取良好的configuration值。
此解决scheme工作,但我想知道如果这是最好的解决scheme来部署我的config文件,如果它是安全的Bitbucket上。
例如,如果我想与我分享我的存储库,我不能,因为他会看到我的configuration。 有没有另一种解决scheme呢?

如果您有任何build议,请提前致谢。

你的解决scheme可以正常工作,尽pipe对你而言似乎有点粗糙。

configuration一般由两种数据组成:

  • 敏感数据(例如密码,令牌,凭证)
  • 其他一切(如常量,path,位置,URL)

这两种types的configurationvariables在开发机器上与生产机器相比可能不同(开发API URL与产品API URL;开发API密码与产品API密码)。

第二种types的configuration数据可以在你的git仓库中提交,如果你这样做可能是最简单的。 您可以为dev和1生成1个文件,例如基于环境variables加载正确的文件。

第一种types – 密码 – 不应该提交给git。 即使你有一个私人存储库。 这太危险了 相反,例如,您可以使用您描述的机制,也可以将密码放置在您在生产环境中设置的环境variables中。

HRM,可能不是一个完整的解决scheme,但结帐过程的环境variables。

我通常有一个私人的,我添加到gitignore然后我推送示例环境var文件

在我的项目中我用三个configuration文件解决了这个问题。

  1. 默认configuration:这个configuration文件包含默认configuration。 这样的configuration应该是安全的,适用于大多数安装。 这可能是真正的configuration文件或一部分源代码的默认值。 这个文件被提交到Git仓库。

  2. 示例configuration文件:该文件看起来像第三个文件,但不被应用程序使用。 我通常给它.example后缀。 这个文件是致力于Git仓库,但不包含敏感数据。

  3. 本地configuration文件:带本地修改的例子拷贝,如数据库密码或启用debugging模式。 这个文件没有提交到Git仓库,它包含敏感数据。 它应该被列在你的.gitignore文件中。

当加载这样的configuration时,我将默认文件与本地文件合并,所以本地文件的内容会覆盖默认文件,但是如果本地文件中缺less某些内容,则会使用默认值。 这样我可以拥有最小的本地文件,大部分configuration都受到开发者提交的影响。

当使用框架并将应用程序安装到许多客户时,您可能需要更多的configuration文件。 那么你可能有框架configuration文件,应用程序configuration文件,每个客户的configuration文件和本地configuration文件。 所有的文件按照这个顺序合并在一起,只有最后一个文件,即本地configuration没有被提交。 当然这涉及到更多的仓库,git子模块或类似的东西。