我配置了廚師環境,我可以使用capistrano部署我的應用程序。現在我想讓我的廚師處理capistrano來部署我的應用程序。如何做呢 ?如何鏈接廚師與卡皮斯特拉諾部署
回答
你可以觀看那個Foodfightshow插曲約Application Deployment。
你可以例如將配置文件(例如數據庫憑證)與Chef一起放到服務器上,同時用Capistrano推送源代碼。
你不能。或者至少它不會很直接。
廚師是一個拉動系統 - 客戶從廚師服務器提取信息,並採取行動。
Capistrano是一個推送系統 - 您告訴它登錄到服務器並在那裏執行任務。
我看到你整合它們的唯一方法就是在每臺機器上本地運行Capistrano,但我沒有看到原因。
廚師的部署資源可能會做你需要的一切,而無需Capistrano整合。如果您仍然希望將部署推向獨立於主廚客戶端運行的服務器,則最好不要通過Chef部署並保留當前的系統。
如果您想持續交付,請將Capistrano腳本連接到您的CI服務器,並在管道末端運行它們。
@StephenKing引用的播客是關於此問題的重要信息來源。
我做的是相反的,即。通過Capistrano部署我的廚師食譜。我推薦它。
#config/deploy.rb
...
before 'bundle:install', "provision:default", "deploy:config_db_yml_symlink"
...
這之後執行的廚師爲配置服務器之前捆綁安裝,因爲很多寶石的依賴包安裝的操作系統是非常重要的。
#config/deploy/provision.rb
Capistrano::Configuration.instance(:must_exist).load do
namespace :provision do
task :default do
provision.setup
provision.web
provision.db
provision.db_slave
end
task :setup, once: true do
provision.get_environment_variables
provision.update_cookbooks
end
task :db, :roles => :db do
next if find_servers_for_task(current_task).empty?
if rails_env == 'staging'
run %{cd #{release_path}/provision; sudo chef-solo -c solo.rb -j db.json -l debug}
else
run %{cd #{release_path}/provision; sudo chef-solo -c solo.rb -j db_master.json -l debug}
end
end
task :db_slave, :roles => :db_slave do
next if find_servers_for_task(current_task).empty?
run %{cd #{release_path}/provision; sudo chef-solo -c solo.rb -j db_slave.json -l debug}
end
task :web, :roles => :web do
next if find_servers_for_task(current_task).empty?
run %{cd #{release_path}/provision; sudo chef-solo -c solo.rb -j web.json -l debug}
end
task :get_environment_variables do
run "if [ -d ~/.config ]; then " +
"cd ~/.config && git fetch && git reset origin/master --hard; " +
"else git clone [email protected]:mycompany/config.git .config; fi"
run "sudo cp ~/.config/secureshare/#{rails_env}/environment /etc/environment"
end
task :update_cookbooks do
run "if [ -d /u/chef ]; then " +
"cd /u/chef && git fetch && git reset origin/master --hard; " +
"else git clone [email protected]:mycompany/chef.git /u/chef; fi"
end
end
namespace :deploy do
task :setup, :except => { :no_release => true } do
dirs = [deploy_to, releases_path, shared_path]
dirs += shared_children.map { |d| File.join(shared_path, d.split('/').last) }
dirs += [File.join(shared_path, 'sockets')]
run "#{try_sudo} mkdir -p #{dirs.join(' ')}"
run "#{try_sudo} chmod g+w #{dirs.join(' ')}" if fetch(:group_writable, true)
run "#{try_sudo} chown -R ubuntu:ubuntu #{dirs.join(' ')}" if fetch(:group_writable, true)
end
task :config_db_yml_symlink do
run "ln -s #{shared_path}/database.yml #{release_path}/config/database.yml"
end
end
end
我有一個文件夾在我的項目命名的規定,處理廚師角色的定義,雖然食譜是不同的版本庫。
#provision/solo.rb
root = File.absolute_path(File.dirname(__FILE__))
cookbook_path '/u/chef'
role_path root + "/roles"
log_level :debug
log_location STDOUT
的節點項目中定義
#provision/db_slave.json
{
"run_list": ["role[db_slave]"]
}
和角色
#provision/roles/db_slave.rb
name "db_slave"
description 'A postgresql slave.'
run_list(["recipe[base]", "recipe[postgresql::slave]", "recipe[rails]","recipe[papertrail]", "recipe[fail2ban]"])
override_attributes(
'kernel' => {
'shmmax' => ENV['KERNEL_SHMMAX'],
'shmall' => ENV['KERNEL_SHMALL'],
'msgmax' => ENV['KERNEL_MSGMAX'],
'msgmnb' => ENV['KERNEL_MSGMNB']
},
'postgresql' => {
'user' => ENV['PG_USER'],
'password' => ENV['PG_PASSWORD'],
'database' => ENV['PG_DATABASE'],
'master_host' => ENV['PG_HOST']
},
'app_dir' => ENV['APP_DIR'],
'papertrail' => {
'port' => ENV['PAPERTRAIL_PORT'],
'log_files' => [
"#{ENV['APP_DIR']}/shared/log/*.log",
"/var/log/*.log",
"/var/log/syslog",
"/var/log/upstart/*.log",
"/var/log/postgresql/*.log"
]
},
'new_relic' => {
'key' => ENV['NEW_RELIC_LICENSE_KEY']
})
所有未保留的應用程序內的任何敏感信息。我還使用capistrano-ec2group爲了將服務器映射到使用EC2安全組的角色。
group :myapp_web, :web
group :myapp_web, :app
group :myapp_db, :db, :primary=>true
group :myapp_db_slave, :db_slave
所以基本上你保持一個回購你的廚師的食譜,在另一個回購你的環境變量,而在另一個回購您的應用程序 - 並使用Capistrano的雙方提供服務器和部署應用程序。
您也可以將您的廚師食譜保存在您的應用程序回購中,但是這會抑制項目之間的重複使用。關鍵是將所有變化的內容放入環境變量中,並將它們分開存儲到應用程序和配方中。
如果正確配置,增加你只需要一個旋轉向上的EC2新服務器,應用所需的安全組,然後
cap deploy
- 1. 卡皮斯特拉諾部署失敗
- 2. javan-每當不寫cisttab與卡皮斯特拉諾部署
- 3. 卡皮斯特拉諾部署後自動加載頁面
- 4. 卡皮斯特拉諾3部署被打破
- 5. 卡皮斯特拉諾 - 部署後重命名
- 6. 卡皮斯特拉諾獲取塊
- 7. 卡皮斯特拉諾日誌級別
- 8. 卡皮斯特拉諾很慢
- 9. 卡皮斯特拉諾的失敗
- 10. 什麼應該與卡皮斯特拉諾部署後的網址
- 11. 卡皮斯特拉諾如何與Rake相關?
- 12. 自動部署使用卡皮斯特拉諾沒有保留舊版本
- 13. dotenv和linked_files與卡皮斯特拉諾3
- 14. 仍然沒有找到與卡皮斯特拉諾的寶石
- 15. 廚師部署?
- 16. 斯卡拉和廚師 - 最近的斯卡拉包
- 17. 我怎樣才能縮短卡皮斯特拉諾的說法
- 18. Ruby on Rails卡皮斯特拉諾更新版本
- 19. 卡皮斯特拉諾 - 清理舊版本問題
- 20. 卡皮斯特拉諾使用sudo即使使用「set:use_sudo,false」
- 21. 卡皮斯特拉諾沒有越過'角色(:應用)'?
- 22. 卡皮斯特拉諾不包括食譜書
- 23. 爲什麼卡皮斯特拉諾這樣表演?
- 24. 卡皮斯特拉諾乘客與混帳錯誤「sh:2:master:not found」
- 25. Rails應用程序與乘客和卡皮斯特拉諾採摘錯誤gemset
- 26. 廚師部署建議/ scenerio
- 27. 鏈接與andThen PartialFunctions在斯卡拉
- 28. 如何使用廚師的部署資源部署更改?
- 29. 斯卡拉鍊接列表
- 30. 卡皮斯特拉諾將-b標誌傳遞給git-clone會導致錯誤