いまはやりのローカルに開発環境をつくる方法です。
一度作ってしまえば環境をコピーするのは簡単そうなのですが、いろいろ覚えないといけないことがあって意外と大変でした。
Vagrant、Chef、BerkShelfがそれぞれ何ものなのかは、、、
他のサイトで確認してみてください(^^;)
タイトルでLAMPといいつつも今回はPostgreSQLをインストールしてます。
Vagrantのインストール
ここはそんなに問題ないです。
当たり前の話なのですが、、、Boxは本番環境に合わせてちゃんと選びましょう。
例えばCentOSにしたい場合は
http://www.vagrantbox.es/
ここからCentOSのURLを選びます。
$ vagrant box add centos http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box
$ vagrant init
$ vagrant up
これであっという間に仮想環境のできあがり!
vagrant init
を実行するとカレントディレクトリにVagrantfileが作成されてます。各種設定はこのVagrantfileに記述します。
仮想環境に入るには
vagrant ssh
を実行します。
BerkShelfのインストール
下記コマンドを実行します。
$ gem i berkshelf
これだけ!
またBerksfileというファイルが必要になるので、Vagrantfileと同ディレクトリに作成しましょう。中身は
site :opscode
とします。
このBerksfileファイルにインストールするアプリケーションをcookbookとして指定します。
cookbookは自分で作成することもできますが、既に公開されているcookbookがあるのでそちらを使っていく方が楽。
このcookbookを公開しているコミュニティとしてopscodeというのがあって、そこのcookbookを使いますよーという宣言になります。
こうしたサードパーティのcookbookを使用するにはGoogleを駆使して調べて見た結果、Berkshelfを使うのが楽そうな感じしました。
http://github.com/opscode-cookbooks/
今回はphp、apache、postgresqlなので、、、
site :opscode
cookbook "postgresql"
cookbook "php"
cookbook "apache2"
cookbook "git"
cookbook "vim"
こんな感じのファイルになります。
postgresqlではなくてmysqlを使う場合は
cookbook "mysql"
となります。
gitとvimも必要になるので、いれておきました。apacheはapache2となるので注意。
Vagrantfileの編集
ここまで設定できたら次にVagrantfileを触ります。
とその前に必要なpluginをインストールしておきます。
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-berkshelf
実際にBerkshelfで指定したアプリケーションのインストールや設定をするには仮想環境上でChefが動いてごにょごにょします。
なのでChefを仮想環境に入れる必要があるので、vagrant-omnibusプラグインをインストールしてVagrantfileに
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#...
#...
#...
config.omnibus.chef_version = :latest
end
を追記します。
これはchefがなければインストールしてね、という設定です。
インストールするものの設定とかは
config.vm.provision :chef_solo do |chef|
#
#この中に書きます
#
end
最終的なVagrantfileはこちら!!(`・ω・´)
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos"
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
config.vm.provision :shell,path:"bootstrap.sh"
config.vm.provision :chef_solo do |chef|
chef.log_level = :debug
chef.run_list = [
"recipe[postgresql::server]",
"recipe[postgresql::client]",
"recipe[php]",
"recipe[apache2]",
"recipe[apache2::mod_ssl]",
"recipe[apache2::mod_rewrite]",
"recipe[git]",
"recipe[vim]",
]
chef.json = {
:postgresql => {
:version => "9.2",
:enable_pgdg_yum => 'false',
:pgdg => {
:repo_rpm_url => {
"9.2" => {
:centos => {
"6" => {
:x86_64 => "http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-5.noarch.rpm"
}
}
}
}
}
},
:php => {
:version => "5.3",
:directives => {
:display_errors => 'On'
},
:packages => ["php-mbstring", "php-pgsql"]
},
:apache2 => {
:version => "2.2"
}
}
end
config.omnibus.chef_version = :latest
config.berkshelf.enabled = true
end
・・・・・・
設定内容をみれば、なんとなくやってることが掴めるかと、、、
PostgreSQLは9.2がyumからだとインストールできないようだったので、yumを使わないようにして、リポジトリを指定してます。
Vagrantfile上で仮想環境のIPアドレスが指定できるので、このIPアドレス宛にsshをすればvagrant sshをしなくても仮想環境に入れます。
この際鍵を指定しないといけないのですが、
vagrant ssh-config
をすると使用している鍵がわかるので、ssh実行時に指定してあげればOK。
あれ、そういえばポートは2222なのに特に指定しなくてもいけたな、、、
実際にはもう少し細かい設定ができるので、そこまでしておきたいなーと思ってます。
例えばapacheのドキュメントルートやpostgresqlでのデータを保存するディレクトリのパスなどの設定等です。
まだはっきり理解しきれてないところとかあるので、もう少しいろいろいじって簡単に開発環境をつくれるようにしたい!