私はシェフ環境を設定しており、私はcapistranoを使って自分のアプリケーションを配備することができます。今私は私のシェフcapystranoを処理するために私のアプリを展開したい。どのようにそれを行うことができますか?シェフとカピストラーを配備する方法
答えて
あなたはその食べ物の様子のエピソードを約Application Deploymentと見ることができます。
Capistranoでソースコードをプッシュしながら、設定ファイル(例えば、データベースの資格情報など)をChefのサーバーに入力します。
できません。少なくとも、それはあまり簡単ではありません。
シェフはプルシステムです。クライアントはシェフサーバーから情報を引き出し、それに対処します。
カピストラーノはプッシュシステムです。サーバーにログインしてタスクを実行するように指示します。
あなたがそれらを統合するために私が見るのは、カピストラーノを各マシンでローカルに実行することだけですが、その理由は分かりません。
シェフのデプロイメントリソースは、おそらくカプリストラノを統合する必要なしに、必要なすべてを実行できます。シェフクライアントの実行とは独立してデプロイをサーバーにプッシュしたい場合は、シェフ経由で展開して現在のシステムを維持しないほうがよいでしょう。
継続的に配信したい場合は、CapistranoスクリプトをCIサーバーに接続し、パイプラインの最後に実行します。
@StephenKingによって紹介されたポッドキャストは、この問題に関する素晴らしい情報源です。
私は逆のことをします。私のシェフのレシピをCapistrano経由で配備する。私はそれをお勧めします。
#config/deploy.rb
...
before 'bundle:install', "provision:default", "deploy:config_db_yml_symlink"
...
これは前にバンドル宝石の多くがOSにインストールされたパッケージに依存しているために重要である、インストール後にサーバーのシェフの設定を実行します。
#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']
})
を定義しています。また、EC2セキュリティグループを使用してサーバーを役割にマッピングするためにcapistrano-ec2groupを使用します。
group :myapp_web, :web
group :myapp_web, :app
group :myapp_db, :db, :primary=>true
group :myapp_db_slave, :db_slave
だから、基本的には、1つのレポであなたのシェフのレシピを保つ別のレポでのご使用の環境変数、および他のレポでアプリ - との両方のプロビジョニングサーバにカピストラーノを使用してアプリケーションを配備します。
シェフのレシピをアプリケーションレポに保存することもできますが、プロジェクト間での再利用はできません。重要なのは、変更されたすべてを環境変数に置き、アプリとレシピに別々に保存することです。
これは、あなたは、単にEC2で最大1をスピンする必要がある新しいサーバーを追加するために、正しく設定され、必要なセキュリティグループを適用し、
cap deploy
- 1. 自動VSTS配備の一環としてAzure WebJobを配備する方法
- 2. シェフと一緒にsshキーを配布する方法12
- 3. MVVMアプリケーションを配備する方法は?
- 4. バイナリニューラルネットワークを配備する方法は?
- 5. WebSocketサーバーを配備する方法は?
- 6. アプレットを配備する方法は?
- 7. Silverlight:Silverlightアプリケーションを配備する方法は?
- 8. 角度ユニバーサルを配備する方法
- 9. rubyアプリを配備する方法は?
- 10. WPFアプリケーションを配備する方法は?
- 11. Terraformでアプリケーションを配備および再配備する方法は?
- 12. シェフ:Jenkinsスーパーマーケット調理帳の自動ジョブ配備
- 13. 配備中/配備後にmaven配備URLを取得する
- 14. Blackberry PhoneとWindows Mobileのアプリケーションを配備する方法
- 15. エルムとフェニックスエリンをエルロクに配備する方法は?
- 16. シェフのカスタムリソースをシェフの実行ごとに実行する方法
- 17. シェフの自動化とシェフの配達は同じですか?
- 18. シェフで配列を定義して呼び出す方法は?
- 19. カピストラー順次再起動
- 20. メトロWebService - 設定/配備の方法?
- 21. Jekyll&Wercker - サブディレクトリの配備方法
- 22. シェフにアセットをプリコンパイルする方法は?
- 23. シェフ:古いビルドをクリーンアップする方法
- 24. WIXを使用してWPFアプリケーションを配備する方法
- 25. ニューラルネットワークを含むデスクトップアプリケーションを配備する方法は?
- 26. minaを使用してレールコードを配備する方法
- 27. Azureの配備名に基づいて配備されたすべてのリソースを削除する方法
- 28. .NETアプリケーションの配備とJava Webアプリケーションの配備との比較
- 29. 角度2のプロジェクトを配備する方法は?
- 30. Scala/Akkaアプリケーションを配備する方法は?