Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
54
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

Chef-Solo + Berkshelf で Rails 4 の開発環境を構築

はじめに

今までの流れ

この記事は以下の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 で使用するポートにローカルからアクセスできるようにする。

Vagrantfile
# -*- 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 を下記のように書き換える。

chef_repo/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 の設定でインストールされる。

chef_repo/nodes/192.168.33.10.json
{
  "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 を以下のように編集。

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を開き、下記行のコメントアウトを解除。

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 にアクセス。

以下のような画面が見えれば成功。

50bd0f15-797f-d591-29a4-bde835968abf.png

おわりに

  • Berkshelf のおかげで自分で Cookbook を書くことなく楽に環境構築できた。
  • ポートフォワーディングの設定をしたが、ローカルから http://192.168.33.10:3000 でアクセスするならVagrantfileのこの部分の設定いらなかったかも。
  • 実験用環境作る際には、 Chef-Solo + Berkshelf + Vagrant で構築手順作っといて、Github 等に必要なファイル一式上げとくと、将来的楽できそう。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
54
Help us understand the problem. What are the problem?