我的个人rails项目使用了一些API,我将API密钥/机密存储在config/environments/production中.yml与发展.yml作为全局变量.我现在想把这个项目推到github上,让其他人使用,但我不想让他们拥有这些敏感数据.我也不想把这个文件放进go .gitignore,因为它是应用程序运行所必需的.我考虑过把它们放在数据库的某个地方,但我希望找到更好的解决方案.
我的个人rails项目使用了一些API,我将API密钥/机密存储在config/environments/production中.yml与发展.yml作为全局变量.我现在想把这个项目推到github上,让其他人使用,但我不想让他们拥有这些敏感数据.我也不想把这个文件放进go .gitignore,因为它是应用程序运行所必需的.我考虑过把它们放在数据库的某个地方,但我希望找到更好的解决方案.
使用环境变量:TLDR!
我认为@Bryce's comment提供了一个答案,我将把它冲洗掉.一种方法似乎是使用环境变量来存储敏感信息(API密钥字符串、数据库密码).所以,判断一下你的代码,看看哪些代码中有敏感数据.然后创建存储sensivite数据值的环境变量(例如在.bashrc文件中).例如,对于您的数据库:
export MYAPP_DEV_DB_DATABASE=myapp_dev
export MYAPP_DEV_DB_USER=username
export MYAPP_DEV_DB_PW=secret
现在,在本地框中,只要在需要敏感数据时引用环境变量即可.例如在数据库中.yml:
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: <%= ENV["MYAPP_DEV_DB_DATABASE"] %>
pool: 5
username: <%= ENV["MYAPP_DEV_DB_USER"] %>
password: <%= ENV["MYAPP_DEV_DB_PW"] %>
socket: /var/run/mysqld/mysqld.sock
我想是数据库.yml只在应用程序初始化或重启时被解析,所以这不会影响性能.因此,这将为您的本地开发和公开存储库提供解决方案.除go 敏感数据,你现在可以像私下一样为公众使用相同的存储库.如果你在VPS上,它也能解决这个问题.只需ssh连接到它,并在生产主机上设置环境变量,就像在开发框中那样.
同时,如果您的生产设置涉及到一个不需要动手的部署,您不能像Heroku那样通过ssh连接到生产服务器,那么您需要了解如何远程设置环境变量.对于Heroku来说,这是用heroku config:add
完成的.因此,根据同一篇文章,如果你将S3集成到你的应用程序中,并且有来自环境变量的敏感数据:
AWS::S3::Base.establish_connection!(
:access_key_id => ENV['S3_KEY'],
:secret_access_key => ENV['S3_SECRET']
)
只需让Heroku为其创建环境变量:
heroku config:add S3_KEY=8N022N81 S3_SECRET=9s83159d3+583493190
这个解决方案的另一个优点是它与语言无关,而不仅仅是Rails.适用于任何应用程序,因为它们都可以获取环境变量.