この記事では、 Vagrantを例として使用して、 runit-manプロジェクトを使用して適切な再現可能な開発環境を作成した方法を説明します。
まず、 VirtualBoxとVagrant自体をインストールする必要があります。 VirtualBoxは、同じバージョンのゲスト拡張機能とともにインストールすることを強くお勧めします。そうしないと、展開が不安定になります。 MacOS X用に開発しているので、VirtualBoxの最新バージョンに対応するゲスト拡張機能がないことが重要でした。 したがって、VirtualBox 4.1.0とVagrant 1.0.1をインストールする必要がありました。
次に、lucid32という名前でUbuntu OSのイメージを使用しました(この段階でどのOSを使用するかは基本的に気にしませんでした)。
vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
その後、彼はrunit-manプロジェクトディレクトリに移動し、vagrant
vagrant init
。
ターゲットシステムで、ソースリポジトリのmasterブランチからrunit-manプロジェクトであるrunitをデプロイし、ポート14500でrunit-manサービスを実行する必要があります。これは、ブラウザーを介した簡単なテストのためにメインオペレーティングシステムのポート14500に転送する必要があります。
Vagrantで使用するために準備されたシステムイメージにはすでにルビーが含まれており、Chef、Puppet、またはその他のツールを使用して展開する準備ができています。
私にとって最も簡単な方法は、Chefサーバーをインストールする必要のないソロモードでChefを使用することでした。
したがって、彼はクックブックフォルダーを作成し、そこでレシピプロビジョニングのコレクションを作成しました。
Vagrantfileは次のフォームを取得しました。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant::Config.run do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "lucid32" # Forward a port from the guest to the host, which allows for outside # computers to access the VM, whereas host only networking does not. config.vm.forward_port 14500, 14500 # Enable provisioning with chef solo, specifying a cookbooks path (relative # to this Vagrantfile), and adding some recipes and/or roles. config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "provisioning" end end
runitをデプロイするために、クックブックディレクトリにrunitレシピのコレクション( GitHubからダウンロード)を配置しました。
したがって、プロビジョニングコレクションがrunitコレクション(cookbooks / provisioning / metadata.rb)に依存することを示す必要があります。
maintainer "Akzhan Abdulin" maintainer_email "akzhan.abdulin@gmail.com" license "MIT License" description "runit-man development VM" version "0.1" depends "runit"
vagrant up
を使用して空のインストールを展開し、SSH(
vagrant ssh
)ですべてをテストした後、プロビジョニング::デフォルトのレシピを段階的に説明し
vagrant ssh
。
これを行うには、Bundlerを介して必要なgemを配信し、Gitをインストールし、リポジトリとrunit-manサービス(クックブック/プロビジョニング/レシピ/ default.rb)をデプロイする必要があります。
package "git-core" gem_package "bundler" git "/home/runit-man" do repository "git://github.com/Undev/runit-man.git" end bash "bundle" do code "cd /home/runit-man && bundle install --without development" end runit_service "runit-man"
runit_serviceの定義は自動的に実行され、提供されたテンプレートを使用してrunit-manサービスが作成されます。
run-script(クックブック/プロビジョニング/テンプレート/デフォルト/ sv-runit-man-run.erb):
#!/bin/bash exec 2>&1 export PATH="$PATH:/opt/ruby/bin" exec ruby /home/runit-man/local-run.rb --rackup 'bundle exec rainbows -c rainbows.conf -p 14500'
log-run-script(クックブック/プロビジョニング/テンプレート/デフォルト/ sv-runit-man-log-run.erb)。
#!/bin/bash mkdir -p /var/log/runit-man exec svlogd -tt /var/log/runit-man
ここで環境の初期展開が完了します(私の場合、さまざまな境界ケースでrunit-manを確認する環境が必要でした。この環境では開発が行われないため、開発用のパッケージはインストールされませんでした)。
これで、
vagrant destroy -f; vagrant up
を実行できます
vagrant destroy -f; vagrant up
vagrant
vagrant destroy -f; vagrant up
して、runit-manサービス(http:// localhost:14500 /)を確認します。
追加のボーナス:レシピコレクションの同じセットを使用して、動作環境を展開することもできます。
参照: