如何在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
或者使用带有凭据的加密仓库。
- 如何告诉Bundler使用全系统安装的gems(生产部署)?
- 在此上下文中不允许使用Capistrano映射进行部署时出现psych.rb错误
- 切换到Capistrano后,Passenger上的Rails应用程序上的Bundler :: GemfileError
- Capistrano 3资产:预编译需要数小时。 停在css文件
- 有没有办法使用capistrano(或类似)远程与rails控制台交互
- 生产中的will_paginate错误NoMethodError(的未定义方法`page’:ActiveRecord :: Relation):
- 如何在Capistrano部署中将我的产品图像符号链接到生产中?
- capistrano回滚是否会撤消迁移?
- 如何避免共享捆绑文件夹下的多个gem