如何在不泄露应用程序的密钥和凭据的情况下打开我的Rails应用程序源代码

bal*_*ame 24 git open-source ruby-on-rails github gitignore

我在GitHub上托管了许多Rails应用程序.它们目前都是私有的,我经常会从它们的GitHub存储库中部署它们.我希望能够将它们中的一些开源,就像你可以在http://opensourcerails.com上找到的那样.

我的问题是:如何在不泄露超级秘密凭证的情况下公开这些存储库?

例如,我可以查看/config/initializers/cookie_verification_secret.rb并查看几乎每一个的cookie秘密.我不明白这是怎么接受的.这些用户是否都在某种程度上在部署环境中更改这些值?

有些用户甚至暴露他们的AWS秘密和密钥!其他人会将他们的AWS秘密设置为:

ENV['aws-secret']
Run Code Online (Sandbox Code Playgroud)

虽然我不确定他们在什么时候设定了这个价值.

那么,在不影响应用程序安全性的情况下,开源Rails应用程序的最佳实践是什么?

Rob*_*her 16

我最近使用自己的一个应用程序进行了此操作.我的解决方案是将任何秘密存储在git-ignored YAML配置文件中,然后使用initializers目录中的简单类访问该文件.配置文件存储在Capistrano部署的"shared"文件夹中,并在每次部署时复制到config.

配置商店:http://github.com/tsigo/jugglf/blob/master/config/initializers/juggernaut.rb

用法示例:https://github.com/tsigo/jugglf/blob/6b91baae72fbe4b1f7efa2759bb472541546f7cf/config/initializers/session_store.rb

您可能还希望从源代码管理中删除使用这些秘密值的文件的所有历史记录.以下是我在Git中使用的指南:http://help.github.com/removing-sensitive-data/


crf*_*ftr 10

如果您正在使用工头,请将.env文件放在应用程序的根目录中.(工头博士)

.env 会的

AWS_SECRET=xxx
AWS_ACCESS=yyy
Run Code Online (Sandbox Code Playgroud)

然后当您需要使用密钥时,插入:

ENV['AWS_SECRET']
ENV['AWS_ACCESS']
Run Code Online (Sandbox Code Playgroud)

虽然重要的是不要将其提交.env给版本控制.所以,如果你正在使用git,请添加.env到你的.gitignore.


奖金回合! - Heroku

如果部署到Heroku,则需要在Heroku环境中配置这些环境变量.有两种选择:

  1. 通过heroku config:add命令手动添加密钥
  2. 使用heroku-config gem来同步本地环境变量.