2014-11-02 64 views
1

我想監視上帝的ruby腳本並將AWS憑據作爲環境變量傳遞,建議如何執行此操作?GOD和環境變量:如何管理憑證?

我目前的做法:

我想犯了源代碼的github神的配置文件,所以我不能設置憑據作爲神config文件中明文。我試圖將它們設置爲系統環境變量,而不是:

我在god conf文件中設置了用戶和組,以便該進程作爲此特定用戶啓動,我將access_key和api_secret設置爲此用戶的環境變量。

當我以這個用戶身份登錄並回顯環境變量時,它們被正確設置。上帝是由新貴開始的。

當上帝啓動腳本時,它無法在環境變量中找到憑據,我不明白爲什麼?

這裏是我的conf文件:

script.god.rb

rails_env = ENV['RAILS_ENV'] || "production" 
rails_root = ENV['RAILS_ROOT'] || "/srv/www/photo-api/current" 

God.watch do |w| 
    w.name   = "zipper-done" 
    w.group   = 'zipper' 
    w.interval  = 30.seconds 
    w.dir   = rails_root 
    w.env   = { 'RAILS_ENV' => rails_env } 
    w.start   = "bundle exec rake zip:listen" 
    w.uid   = 'deploy' 
    w.gid   = 'deploy' 
    w.start_grace = 10.seconds 
    w.log   = File.join(rails_root, 'log', 'zipper-done.log') 

/home/deploy/.bashrc

export AWS_ACCESS_KEY_ID=AKI...KQ 
export AWS_SECRET_ACCESS_KEY=Cg...pVb 

/家庭/部署/ .bash_profile

source ~/.bashrc 

當我把ENV['AWS_ACCESS_KEY_ID']ENV['AWS_SECRET_ACCESS_KEY'],他們沒有設置。我究竟做錯了什麼 ?

回答

3

由於您無論如何都將這些文件存儲在文件中(例如,不是使用Puppet,Chef,heroku config等設置它們),您可以使用dotenv。它添加到您的Gemfile:

gem 'dotenv-deployment' 

您的變量添加到.env文件(或.env.production文件,如果ENV['RACK_ENV']設置),在項目的根目錄:

AWS_ACCESS_KEY_ID=... 
AWS_SECRET_ACCESS_KEY=... 

他們將作爲ENV['AWS_ACCESS_KEY_ID']ENV['AWS_SECRET_ACCESS_KEY']

別忘了在您的.gitignore中包含.env文件。出於文檔目的,您可以將您的.env複製到具有空值的未登錄.env.example

有關Rails和Capistrano的具體說明,請參閱gem page

+0

由於這些憑據是專門針對項目的,所以你說得很對,它會更簡單。 – vdaubry 2014-11-08 09:12:51

1

因爲腳本實際上並未以該用戶身份登錄,所以它不會採購.bashrc.bash_profile並將值添加到環境中。您需要在上帝運行的環境中提供環境變量/值。

+0

上帝是通過暴發戶啓動的,我試圖通過在/ etc/profile中運行的腳本來設置證書。d沒有成功,你知道我還能嘗試什麼嗎? – vdaubry 2014-11-08 09:12:07

+1

嘗試在上帝的腳本中設置它。以下是關於[如何爲暴發戶腳本設置環境變量]的文檔(http://upstart.ubuntu.com/cookbook/#environment-variables) – 2014-11-10 00:03:25