質問
Vagrantを使用してDjangoアプリケーションを開発することを考えていますが、私は少し混乱しており、やりたいことが可能かどうかはわかりません。
Lucid32ボックスを正常にインストールし、VagrantFile、共有ディレクトリ、転送されたポートを使用して、Vagrantの新しい「インスタンス」を作成しました。
最初の問題は、チームで働く際にこれが私にとって最良の選択ではないように思えないことです。どのようにして(私と他の10人の開発者、たとえば)ボックスを共有して、それへのすべての変更を共有できますか?たとえば、6か月でpostgreSQLが必要な場合は、PostgreSQLを11回インストールすることなく動作させる必要があります。
また、ボックスが起動したときに起動するために、どのように物事を作ることができますか?私はそれをsshして手動で始めなければならないとは思わない
n
すべての時間n
毎回必要なもの。そして最後に、人形やシェフのようなものが手動のインストールを完全に置き換えることを意図しているかどうかはよくわかりません(たとえば、PIPやApt-Getを介して)。そうですか?
ありがとうございました。
そして、私は英語が悪いことをお詫びします。 :-)
解決
あなたの選択の選択はすでにあなたが探しているものの良いスタートだったと思いますが、今ではシェフや人形のいずれかをもう少し掘り下げて、プロビジョニングプロセスをさらに自動化する必要があります。
あなたのシーンライオでの良い選択は、最初にプロジェクトの一部としてバージョン制御下にあるVagrantFileと対応する人形マニフェストの両方を置くことだと思います。さらに、このマシンに関するすべての構成もバージョン制御に入れたり、ある種のアーティファクトリポジトリを通じて利用できるようにする必要があります。
第二に、他のチームメンバーの準備ができていると見なされる場合は、環境に変更する(少なくともこれらはより長く生き続けるべきである)チームにルールを確立する必要があります。
あなたの2番目の質問と私のオープニングに戻ってくる:人形(私が好きな)またはシェフはあなたの選択のツールであり、あなたとあなたの同僚を将来多くの仕事を救うことができます。シェフがあまりにもよくわからないので、ここで人形に固執します。
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"]
}
これがすることは、まず、ボックス内のOSのパッケージメカニズム(例の名前は最近のubuntuを想定)をチェックします。それ。 「要求」属性を介して、2番目のディレクティブは最初のディレクティブ(および機能した場合にのみ)を実行し、MySQL構成をチェックインおよび/またはどこかに到達できる場所に変更します( VagrantFileと同じフォルダーに入れて、Vagrant /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
このような環境に作られた「試行試行」のもの以外のすべての変更により、すべてのチームメバーは、同じセットアップを簡単に、すぐに再現できることが保証されています。
私は個人的に手作業で箱に載るのが好きです。適切なセットアップと構成を見つけたら、後で使用してチームメンバーと共有する準備ができている場合は、人形マニフェストに翻訳します。
人形(およびシェフ)が必要なほとんどすべてを管理できるため(ユーザー、クロンジョブ、パッケージ、サービス、ファイルなど)、まさにそのような問題に適しています。選択した場合、ステージングまたはテスト環境を後でプロビジョニングする構成。それらは人形のはるかに多くの選択肢であり、読み通し 言語ガイド あなたがそれでこれ以上何ができるかをあなたに良いアイデアを与えるべきです。
私が助けることができることを願っています:)