はじめに
今までの流れ
この記事は以下の2つの記事の内容の続きです。
今回やること
Chef-Solo + Berkshelf による自動環境構築 で
自動環境構築の Hello, World! 的なことをやったので、
今度はもう少し実用的なものをインストールしてみる。
具体的には Vagrant で Ruby on Rails 4 の環境構築 で作った環境を
Chef-Solo + Berkshelf を使って構築してみる。
インストール先 (Node)
Chef-Solo + Berkshelf による自動環境構築 で Emacs をインストールした環境をそのまま流用する。
各種設定
仮想環境の設定
Chef-Solo + Berkshelf による自動環境構築 の Vagrantfile の内容に、
config.vm.network :"forwarded_port", guest: 3000, host: 3000
を追記。Rails で使用するポートにローカルからアクセスできるようにする。
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos6.5"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"
config.vm.network :"forwarded_port", guest: 3000, host: 3000
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "4096"]
end
end
上記設定で新規作成 or 既存の仮想マシンを起動。
$ cd ~/vagrant/hoge_machine # 仮想マシンの設定保存先
$ vagrant up
既に仮想マシンが起動中の場合は以下のコマンドをで設定ファイルを再読み込み。
$ cd ~/vagrant/hoge_machine # 仮想マシンの設定保存先
$ vagrant reload
Berkshelf の設定
Berksfile を下記のように書き換える。
source "https://api.berkshelf.com"
cookbook 'emacs'
cookbook 'rvm', '~> 0.9.2'
cookbook 'sqlite', '~> 1.1.0'
cookbook 'mysql', '~> 5.3.6'
cookbook 'git'
cookbook 'build-essential'
cookbook 'nginx', '~> 2.7.4'
cookbook 'openssl', '~> 2.0.0'
これで以下のCookbookを取得できる。
- Ruby 関係
- RVM
- DB 関係
- SQLite
- MySQL
- Webサーバー関係
- Nginx
- build-essential
- openssl
- その他開発関係
- Git
- Emacs
※ CentOS 6.5 の場合、mysql の部分に '~> 5.3.6' と指定してやらないと、インストール時にコケた。
Node の json ファイル設定
下記のように使用する Cookbook を指定する。
また、RVM と MySQL の初期設定も記述する。
これで Ruby 2.1.x がデフォルトのRubyとしてインストールされ、
MySQL 5.6 がポート 3306、root パスワードが vagrant の設定でインストールされる。
{
"run_list": [
"recipe[emacs]",
"recipe[rvm::system]",
"recipe[sqlite]",
"recipe[mysql::server]",
"recipe[mysql::client]",
"recipe[git]",
"recipe[build-essential]",
"recipe[openssl]",
"recipe[nginx]"
],
"automatic": {
"ipaddress": "192.168.33.10"
},
"rvm": {
"user": "root",
"default_ruby": "ruby-2.1",
"user_default_ruby": "ruby-2.1",
"rubies": ["ruby-2.1"]
},
"mysql":{
"version":"5.6",
"port":"3306",
"server_root_password":"vagrant",
"remove_anonymous_users":true
}
}
設定反映
下記のコマンドを実行。
$ bundle exec berks vendor cookbooks
$ bundle exec knife solo prepare vagrant@192.168.33.10 -i ~/.vagrant.d/insecure_private_key
$ bundle exec knife solo cook vagrant@192.168.33.10 -i ~/.vagrant.d/insecure_private_key
確認
試しに Rails のプロジェクトを作ってみる。
仮想環境に vagrant ssh
でログイン後に下記コマンドを実行。
$ mkdir ~/projects
$ mkdir ~/projects/sample_rails_project
$ cd ~/projects/sample_rails_project
$ bundle init
作成された Gemfile を以下のように編集。
# A sample Gemfile
source "https://rubygems.org"
gem "rails"
下記コマンドを実行。
$ bundle install --path vendor/bundle
$ bundle exec rails new .
...
conflict Gemfile
Overwrite /home/vagrant/projects/sample_rails_project/Gemfile? (enter "h" for help) [Ynaqdh] Y
...
上書きされたGemfileを開き、下記行のコメントアウトを解除。
gem 'therubyracer', platforms: :ruby
その後下記コマンドを実行
$ bundle install --path vendor/bundle
$ bundle exec rails server -b 0.0.0.0
ローカルマシンのブラウザから http://192.168.33.10:3000 にアクセス。
以下のような画面が見えれば成功。
おわりに
- Berkshelf のおかげで自分で Cookbook を書くことなく楽に環境構築できた。
- ポートフォワーディングの設定をしたが、ローカルから http://192.168.33.10:3000 でアクセスするならVagrantfileのこの部分の設定いらなかったかも。
- 実験用環境作る際には、 Chef-Solo + Berkshelf + Vagrant で構築手順作っといて、Github 等に必要なファイル一式上げとくと、将来的楽できそう。