開発環境の迅速な展開

開発段階に近い開発およびテスト環境の展開にかかる高コストを回避するために(開発段階と本番段階のパリティ )、環境の仮想化はますます一般的になっています。



この記事では、 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 /)を確認します。



追加のボーナス:レシピコレクションの同じセットを使用して、動作環境を展開することもできます。



参照:




All Articles