6

Vagrant を使用して Django アプリケーションを開発することを考えていますが、少し混乱しており、やりたいことが可能かどうかさえわかりません。

lucid32ボックスを正常にインストールし、Vagrantfile、いくつかの共有ディレクトリ、および転送されたポートを使用して、vagrantの新しい「インスタンス」を作成しました。

  • 最初の問題は、チームで作業する場合、これが最善の選択ではないように思われることです。ボックスへのすべての変更が共有されるように、どうすれば (たとえば、私と他の 10 人の開発者が) ボックスを共有できるでしょうか? たとえば、6 か月後に postgresql が必要な場合、postgresql を 11 回インストールしなくても動作するようにする必要があります。

  • また、ボックスの起動時に何か (postgresql、django、this-service など) を起動するにはどうすればよいですか? 私はそれをsshして、毎回必要なものnすべてを手動で開始する必要はないと思います。n

  • そして最後に: puppet やchef のようなものが (たとえば pip や apt-get を介して) 手動インストールを完全に置き換えることを意図しているかどうかはよくわかりません。そうですか?

ありがとうございました。
そして下手な英語でごめんなさい。:-)

4

1 に答える 1

13

あなたが Vagrant を選択したことは、あなたが探しているものへの良い出発点であると言えますが、プロビジョニング プロセスをさらに自動化するには、Chef または Puppet のいずれかをもう少し深く掘り下げる必要があります。

あなたのシーンでは、最初に Vagrantfile と対応する Puppet マニフェストの両方をプロジェクトの一部としてバージョン管理下に置くことをお勧めします。さらに、このマシンに関するすべての構成もバージョン管理に入れるか、なんらかのアーティファクト リポジトリを通じて利用できるようにする必要があります。

2 つ目は、他のチーム メンバーの準備ができていると見なされた場合に、環境に変更を加える (少なくとも長く存続させる必要があるものは) チェックインする必要があるというルールをチーム内に確立します。

2 番目の質問について、冒頭に戻ります。Puppet (私は好きです) または Chef は、あなたが選択するツールであり、あなたとあなたの同僚の将来の多くの作業を節約することができます。私は Chef があまり得意ではないので、ここでは Puppet に固執します。

puppet を使用すると、パッケージのインストール、構成の変更、特定のサービスが実行されていることの確認、または一般的にシステムが希望する状態になっていることなど、必要なものすべてを管理できます。さらに良いことに、あなたまたは別のチームメンバーが自分のボックスに悪意のある変更を加えた場合、Vagrantfile/Puppet マニフェストの変更をロールバックするだけで、次のように入力できます。

vagrant destroy && vagrant up

また、ボックスは簡単に最新バージョンの状態に戻すことができます。

たとえば、次のマニフェスト ファイルを使用します。

package { "mysql-server-5.1":
  ensure => present
}

file { "/etc/mysql/my.cnf":
  owner => "root",
  content => "http://myrepository.local/myProject/configurations/mysql/my.cnf",
  require => Package["mysql-server-5.1"]
}

service { "mysql":
  ensure => running,
  subscribe => File["/etc/mysql/my.cnf"],
  require => File["/etc/mysql/my.cnf"]
}

これが行うことは、パッケージ「mysql-server-5.1」がインストールされている場合、最初にボックス内のOSのパッケージメカニズムをチェックし(例の名前は最近のUbuntuを想定しています)、インストールされていない場合はインストールしますそれ。「require」属性を介して、最初のディレクティブの後に 2 番目のディレクティブが実行され (それが機能した場合のみ)、MySQL 構成を、チェックインおよび/または到達可能な場所に公開したものに変更します (これは、 Vagrantfile と同じフォルダーに配置すると、/vagrant の下のボックスで使用できるようになります)。構成の変更が機能した場合にのみ実行される最後のステップは、「mysql」サービスが稼働中であること、または構成が変更されたときに既に実行されていた場合は再起動されていることを確認します。

これで、このマニフェストを Vagrantfile に接続できます。

Vagrant::Config.run do |config|

  config.vm.box = "lucid32"
  config.vm.box_url = "http://files.vagrantup.com/lucid32.box"

  config.vm.define "node1" do |cfg|
    cfg.vm.network "10.23.5.11"
    cfg.vm.provision :puppet do |puppet|
      puppet.manifests_path = "manifests"
      puppet.manifest_file = "node1.pp"
    end
  end
end

このように環境に加えられた「試行錯誤」以外のすべての変更により、すべてのチームメンバーは同じ設定を簡単に再現できることが保証されます。

私は個人的に、ボックスにあるものを手作業で試すのが好きです。適切なセットアップと構成が見つかったら、それを Puppet マニフェストに変換して、後で使用したりチーム メンバーと共有したりできるようにします。

Puppet (および Chef も) は、必要なほぼすべて (ユーザー、cron ジョブ、パッケージ、サービス、ファイルなど) を管理できるため、まさにそのような問題に適しています。必要に応じて、後でステージング環境またはテスト環境をプロビジョニングするための構成。Puppet にはさらに多くのオプションがあり、言語ガイドを読むと、Puppet でさらに何ができるかがわかります。

私が助けてくれることを願っています:)

于 2012-01-20T23:48:07.473 に答える