如何在capistrano中存储秘密变量

我正在编写一个使用Capistrano自动部署的Rails应用程序。 在deploy.rb脚本中,我有:

set :deploy_to, '/my/deploy/path/'

在production.rb我有:

server 'example.com', user: 'secret_user_name', roles: %w{web app db}

目前该应用程序是私有的。 但假设我想要一个像这样的开源应用程序。 然后我不希望secret_user_name/my/deploy/path存储在repo中。 在Rails项目中,如果我遇到这样的问题,我会将秘密值存储在secrets.yml并从那里访问它们。 但是我无法访问Capistrano的secrets.yml。 所以我可以手动加载秘密文件,但我确信有更好的方法来做到这一点。

所以我的问题是:如何在不使用Capistrano暴露服务器信息的情况下实现自动部署流程? 是否有推荐的方法来存储Rails中的秘密?

如果您的目的是维护自己的部署环境(您保密)但开源应用程序本身的代码,那么我只需将Capistrano相关文件移动到单独的私有存储库。 然后你可以开源应用程序本身,但保持Capistrano配置私密。

Capistrano的deploy.rb等不需要与正在部署的应用程序存在于同一目录结构中,甚至不需要存储在同一个存储库中。 毕竟,Capistrano基于:repo_url部署,它可以是任何东西。 它不必匹配保存Capistrano文件的repo。

如果你想给其他人(即分叉/克隆应用程序的那些人)部署到他们自己的基础设施的能力,也许最简单的解决方案就是编写一个wiki页面,解释他们如何设置自己的Capistrano配置。 部署环境可能差异很大,因此可能不是简单地使用环境变量或加密机密。

在任何情况下,请确保在必要时审核并重写您的Git历史记录,以确保在您公开回购时不会泄漏任何敏感配置。

环境变量可能对您有帮助。 你可以把export SSH_PROD_USER=secret_user_name; 在您首选的shell配置文件中。 例如,如果你使用bash,那么它将是~.bash_profile 。 然后在production.rb使用它,如下所示:

server 'example.com', user: ENV['SSH_PROD_USER'], roles: %w{web app db}

所以基本上ruby会有你所有的环境变量

使用像Figaro gem这样的东西: https : //github.com/laserlemon/figaro

并且不要向你的repo推送你的application.yml

或者使用带有凭据的加密仓库。