データベース徹底攻略とWebアプリエンジニア養成読本
データベース徹底攻略 (WEB+DB PRESS plus)
- 作者: 松信嘉範,羽生章洋,ミック,奥野幹也,松下雅和,桑野章弘,青木峰郎,ひろせまさあき,小林篤,島田慶樹,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/15
- メディア: 大型本
- この商品を含むブログを見る
Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)
- 作者: 和田裕介,石田絢一(uzulla),すがわらまさのり,斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/11
- メディア: 大型本
- この商品を含むブログ (3件) を見る
Ruby on Railsチュートリアルの写経を始めました
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
Vagrant+Chefで環境構築する方法がなんとなく理解できてきましたが、ただ環境を作るだけじゃもったいないのでRailsチュートリアルの写経を始めてみようと思います。環境は以下の通りです。
OS | Windows7 x64 |
---|---|
VirtualBox | VirtualBox 4.3.8 for Windows hosts |
Ruby | ruby 1.9.3p484 (2013-11-22) [i386-mingw32] |
Vagrant | Vagrant 1.5.1 |
chef | chef (11.10.4 x86-mingw32) |
knife | knife-solo (0.4.1) |
berkshelf | berkshelf (2.0.14) |
VagrantとChefの導入についてはVagrant + Chefの導入 vol.1 - m-namikiの日記とVagrant + Chefの導入 vol.2 - m-namikiの日記で行ってますが、vagrant用のプラグインとberkshelfのインストールをしてなかったのでしておきます。
saharaのインストール
saharaは仮想サーバのスナップショットのようなものを作ることができるvagrant用プラグインです。環境のロールバック、コミットが可能なので何かあった場合に簡単に変更を取り消すことができます。インストール方法は以下の通りです。
vagrant plugin install sahara
vagrant-omnibusのインストール
vagrant-omnibusは仮想サーバ起動時にChefがインストールされているかどうかをチェックして、インストールされていない場合は自動でインストールしてくれるvagrant用プラグインです。環境構築を自動化したいのにそのために手動でChefをインストールするのは本末転倒なので非常にありがたいですね。インストール方法は以下の通りです。
vagrant plugin install vagrant-omnibus
Berkshelfのインストール
BerkshelfはChefのはcookbookの依存関係を管理するツール(らしい)です。まだhttp://community.opscode.com/からcookbookをダウンロードするのが楽になるくらいしか分かっていませんが、インストールしておきます。gemとして提供されているので以下の通りにインストールします。
gem install berkshelf --no-ri --no-rdoc
仮想サーバの作成
ここから仮想サーバの作成を行っていきます。
cd C:\Users\m-namiki\Documents\20_vagrant mkdir rails3_tutorial cd rails3_tutorial vagrant init chef/centos-6.5
chef-repoの作成
Vagrantfileがある場所にchef用のリポジトリを作成します。
knife solo init chef-repo cd chef-repo knife cookbook create ruby_env -o site-cookbooks
Berksfileの編集
Berkshelfがインストールしてあるとknife cookbook
時にBerksfileが作成されるので編集します。
// chef-repo/Berksfile site :opscode cookbook 'yum' cookbook 'ruby_build' cookbook 'rbenv' cookbook 'nodejs'
rubyのインストールはrbenv+ruby_buildで行います。nodejsについては、rails server
を実行したときにJavaScriptランタイムがインストールされていないと言われたのでインストールします。で、Berkshelfの実行。
berks install --path cookbooks
これでcookbooks/以下にyumやruby_build、rbenv、その他それらと依存関係があるcookbookがインストールされました。
site-cookbooks/ruby_env/recipes/default.rbの編集
続いてレシピの編集です。
# for install Ruby include_recipe "rbenv::default" include_recipe "rbenv::ruby_build" include_recipe "rbenv::rbenv_vars" service "iptables" do action [:disable, :stop] end log "done iptables stop." # add the EPEL repo yum_repository 'epel' do description 'Extra Packages for Enterprise Linux' mirrorlist 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch' fastestmirror_enabled true gpgkey 'http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6' action :create end # add the Remi repo yum_repository 'remi' do description 'Les RPM de Remi - Repository' baseurl 'http://rpms.famillecollet.com/enterprise/6/remi/x86_64/' gpgkey 'http://rpms.famillecollet.com/RPM-GPG-KEY-remi' fastestmirror_enabled true action :create end %w{sqlite-devel}.each do |p| package p do action :install end end log "done package install." rbenv_ruby "1.9.3-p545" do ruby_version "1.9.3-p545" global true end log "done ruby install." gem_package "rbenv-rehash" do action :install end log "done rehash install." gem_package "rails" do action :install version '3.2.14' end log "done rails3 install."
rbenvでrubyをインストールした場合、gem install
後に必ずrbenv rehash
をしなければならないそうなので、それを回避するためにrbenv-rehashを一緒にインストールしておきます。
Vagrantfileを編集
最後にVagrantfileを編集します。以下は変更部分です。
# Railsのサーバ用ポート config.vm.network "forwarded_port", guest: 3000, host: 3333 config.vm.network "private_network", ip: "192.168.33.10" config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", "1024"] end config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["./chef-repo/cookbooks", "./chef-repo/site-cookbooks"] chef.add_recipe "yum" chef.add_recipe "rbenv" chef.add_recipe "ruby_env" chef.add_recipe "nodejs" end # この行追加 config.omnibus.chef_version = :latest
forwarded_portについては、rails server
実行時にhttp://localhost:3000にアクセスしろと言われますが、そのままではアクセスできなかったので3333に変更しました。
起動
準備が整ったのでvagrant up
で起動します。自分の環境だとrubyとnodejsのインストールにそれぞれ10分くらい掛かりましたが、無事インストールが完了して起動しました。
[vagrant@localhost ~]$ ruby -v ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux] [vagrant@localhost ~]$ rails -v Rails 3.2.14 [vagrant@localhost ~]$ node -v v0.10.15
で、ここまでの状態を一旦コミットしておきます。
vagrant sandbox on vagrant sandbox commit
これで何か変更を加えてもすぐに元に戻せるので安心です。
作成したVagrantfileやchef-repoを以下で公開してみました。
m-namiki/rails3-tutorial_environment · GitHub
写経したものはこっちに公開していきます。
m-namiki/rails3-projects · GitHub
実はこれをやってみたかった:)
GitHub実践入門
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Vagrant + Chefの導入 vol.2
入門Chef Solo - Infrastructure as Code
- 作者: 伊藤直也
- 出版社/メーカー: 伊藤直也
- 発売日: 2013/03/11
- メディア: Kindle版
- 購入: 16人 クリック: 1,027回
- この商品を含むブログ (17件) を見る
Rubyのインストール
ChefはRubyで動作するプログラムなので、Rubyをインストールしておく必要があります。Windows環境へのインストール方法はこちらを参照してください。バージョンについては、自分は1.9.3-p484を使っていますが、最新は1.9.3-p545なのでそちらの方が良いかと思います。
また、DevKitというものも必要となりますので、そちらもインストールしておきます。インストール方法はこちらを参照してください。
Chefのインストール
続いてはChefのインストールですが、まずは周辺プロダクトを整理してみます。
プロダクト名 | 概要 |
---|---|
chef-solo | chefに同梱されている単体で動作するプロビジョニングツール*1 |
knife-solo | chefのcookbookを作るためのツール |
Berkshelf | chefで使うcookbookを管理するgem |
Chefはクライアント・サーバによる集中管理方式でサーバの構成管理を行えますが、スタンドアロン方式も可能です。chef-soloはそのスタンドアロン方式用のツールです。次にknife-soloはknifeのプラグインでchef-soloで利用するレシピの雛形を作成したり、リモートでレシピを実行できるようにするためのサブコマンドが使えるようになります。Berkshelfはcookbookの依存関係を管理するツールらしいですが、ちょっとピンときません。ここは追々調べてみようと思います。
コマンドプロンプトで以下のコマンドを実行します。
gem install chef gem install knife-solo
cookbookの作成
インストールが完了したら、vagrant initしたディレクトリに移動してknife soloを実行します。前回の記事の例だとC:\Users\m-namiki\Documents\20_vagrant\10_sandboxになります。
cd C:\Users\m-namiki\Documents\20_vagrant\10_sandbox knife solo init chef-repo
実行が完了するとchef-repoというディレクトリが作成され、その下の階層は以下のようになります。
C:\Users\m-namiki\Documents\20_vagrant\10_sandbox>tree chef-repo C:\USERS\M-NAMIKI\DOCUMENTS\20_VAGRANT\10_SANDBOX\CHEF-REPO ├─.chef ├─cookbooks ├─data_bags ├─environments ├─nodes ├─roles └─site-cookbooks
次に簡単なレシピを書いてみます。chef-repoに移動して、knife cookbookを実行します。
cd chef-repo knife cookbook create sandbox -o site-cookbooks
実行が完了するとsite-cookbooks以下にsandboxというディレクトリが作成され、その中にも色々なディレクトリやファイルが作成されます。
C:\Users\m-namiki\Documents\20_vagrant\10_sandbox\chef-repo>tree site-cookbooks C:\USERS\M-NAMIKI\DOCUMENTS\20_VAGRANT\10_sandbox\CHEF-REPO\SITE-COOKBOOKS └─sandbox ├─attributes ├─definitions ├─files │ └─default ├─libraries ├─providers ├─recipes ├─resources └─templates └─default
recipes\default.rbというファイルがインストールするパッケージなどを記述するファイルです。まずは簡単にiptablesを停止・無効化するレシピを書いてみます。
# # Cookbook Name:: sandbox # Recipe:: default # # Copyright 2014, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # service "iptables" do action [:disable, :stop] end log "done iptables stop."
レシピの書き方等については伊藤直也さん(@naoya)の入門Chef Solo - Infrastructure as Codeを筆頭に、ググればたくさん出てくるのでここでは割愛します。そしてようやく次は実行ですが、残念、m-namikiは力尽きてしまった!ので、続きはまた今度。
*1:サーバー構築・管理を自動化するツール
Vagrant + Chefの導入 vol.1
今更ながらローカルで色々試せる環境が欲しいと思ったのでVagrantを導入してみようと思います。詳細な手順についてはググれば色々な方が書いた記事があるので、自分の作業メモとして残しておきます。
VirtualBoxのダウンロード&インストール
https://www.virtualbox.org/wiki/Downloads
上記URLからVirtualBox 4.3.8 for Windows hostsをダウンロードして、インストーラを実行。
Vagrantのダウンロード&インストール
http://www.vagrantup.com/downloads.html
上記URLからWindows版をダウンロードして、インストーラを実行。ファイル名はvagrant_1.5.1.msiです。
OSイメージのダウンロード&追加
https://vagrantcloud.com/discover/featured
Vagrantでは仮想環境で動作させるOSイメージをboxと呼んでいるようです。公式に用意されているboxファイルは上記URLから確認することができます。今回はchef/centos-6.5を利用します。以下のコマンドを実行。
vagrant box add chef/centos-6.5
途中でvirtualboxとvmwareのどちらを使うかを聞かれるのでvirtualboxを選択します。後はダウンロードしてくるのを待つのみ。実行結果はこんな感じになります。
C:\Users\m-namiki\Documents\20_vagrant>vagrant box add chef/centos-6.5 ==> box: Loading metadata for box 'chef/centos-6.5' box: URL: https://vagrantcloud.com/chef/centos-6.5 This box can work with multiple providers! The providers that it can work with are listed below. Please review the list and choose the provider you will be working with. 1) virtualbox 2) vmware_desktop Enter your choice: 1 ==> box: Adding box 'chef/centos-6.5' (v1.0.0) for provider: virtualbox box: Downloading: https://vagrantcloud.com/chef/centos-6.5/version/1/provider/virtualbox.box box: Progress: 100% (Rate: 1735k/s, Estimated time remaining: --:--:--) ==> box: Successfully added box 'chef/centos-6.5' (v1.0.0) for 'virtualbox'!
また、自分が利用したいboxが上記にない場合は、下記URLから探すことができます。
http://www.vagrantbox.es/
上記URLから利用したいOSを選択してダウンロードします。インストールしながらダウンロードも可能ですが、かなり時間が掛かるので先にダウンロードしておくと良いです。例えばCentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.16, Chef 11.6.0, Puppet 3.2.3)を利用したい場合、下記のURLにアクセスします。
http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box
次にダウンロードしたboxファイルを追加します。上記でダウンロードしたboxファイルを任意のディレクトリに置いて、以下のコマンドを実行します。centos64はbox名です。
C:\vagrant>vagrant box add centos64 CentOS-6.4-x86_64-v20130731.box
Vagrant1.4.Xから1.5.1へアップグレートした場合の注意点
こちらの公式ドキュメントにはアップグレードは上書きするだけとありましたが、自分の環境では上手くいきませんでした。vagrant initするとこんなメッセージが。
C:\Users\m-namiki\Documents\20_vagrant\22_sandbox>vagrant box add chef/centos-6.5 ruby: No such file or directory -- C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.4.0/lib/vagrant/pre-rubygems.rb (LoadError)
どうやらC:\HashiCorp\Vagrant\embedded\gems\gemsに「vagrant-X.X.X」というディレクトリが複数あると、先に読み込んだ方を使うようなので上記のディレクトリにvagrant-1.4.Xというディレクトリが残っている場合は削除した方が良さそうです。
初期化と起動
上記で追加したboxを使用して仮想環境を作成します。
cd C:\Users\m-namiki\Documents\20_vagrant\10_sandbox vagrant init chef/centos-6.5
実行後Vagrantfileが作成されます。次に仮想サーバを起動します。
vagrant up
vagrantで起動した仮想サーバにはSSHで接続する必要があるので、SSHに対応しているターミナルから以下の接続情報で接続します。
username | vagrant |
---|---|
password | vagrant |
private_key | C:\Users\${username}\.vagrant.d\insecure_private_key |
port | 2222 |
これで仮想サーバを手に入れることができたので、次回からはChefによる環境構築をやってみようと思います。
VirtualBoxが起動しない場合
これは自宅PCの話なんですが、vagrant upしてもVirtualBoxが0x80070005というエラーを吐いて起動しないことがありました。どうやらWindowsのコンポーネントサービスというのが影響しているようで、下記のURLを参考に設定したら正常に動くようになりました。エラーメッセージなんかもほぼ同じだったので、もし起動しないことがあったら参照してみると良いかもしれないです。
http://yyfor.blog.fc2.com/blog-entry-4.html
実践 VagrantとHTTPの教科書
- 作者: Mitchell Hashimoto,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/02/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
- 作者: 上野宣
- 出版社/メーカー: 翔泳社
- 発売日: 2013/05/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
メタルギア ソリッド V グラウンド・ゼロズ
- 出版社/メーカー: コナミデジタルエンタテインメント
- 発売日: 2014/03/20
- メディア: Video Game
- この商品を含むブログ (15件) を見る