my tool for web application
TRANSCRIPT
My tool for Web Application
@koudaiii at 2015/1/27
Profile
id: koudaiii fullname: Kodai Sakabe
Attention• 個人が読んできたor読み中の書籍を紹介
• 私個人が2年ほど利用して、外せない設定
• ProvisioningToolを作成する上で個人的に気をつけている部分
• ベストプラクティスというわけではなく、こういう使い方をしていますというお話
• むしろ、ここをこうすると良い!等ありましたら教えて下さい><
Agenda1. Vagrant
2. Vagrant plugins
3. Chef-solo
4. Continuous Integration
5. Serverspec
6. Vagrantの利用手順
7. Tips:ThorfileでCommandをCode化
8. 気をつけている点
9. Reference
Vagrantfileの詳細な設定、Vagrantの裏側、pluginの作り方まで
Vagrant• Virtualboxのホストオンリーアダプター設定
• Virtualboxの「環境設定」->「ネットワーク」->「ホストオンリーネットワーク」->「追加」
• PrivateIPで開発サーバーにアクセスする感覚でできる
• Port Forwardで繋がるが、より本番に近い形(80,22等)
• vagrant ssh-config >> ~/.ssh/configでsshを楽に
• vagrant sshやssh vagrant@XXXXが手間
• configのHostをwebappにすると「ssh webapp」でアクセス可能
Vagrant plugins• vagrant plugin install ~~で拡張。Vagrantfileで記述
• vagrant-sahara(serverのある地点をsnapshotを取る)
• vagrant-digitalocean(DigitalOcean利用)
• vagrant-omnibus(Chefをインストール)
• vagrant-berkshelf(Chefのcookbook管理)
• 結局使っているのはvagrant-digitalocen(CI用)とvagrant-sharaのみ
※vagrant-berkshelfはchef-dkを入れたりと依存関係が多い点。 常に自分のMachineで使えるかわからない。けど自分のチーム(developer)であればrubyは入っている
WebApplicationの構築まで含めた実践入門
Chef-solo• CookbookとRepositoryは1:1
• ApplicationのCookbookを作りたい時は、上で作ったCookbookを元に独自のParameterを渡す
• CFEngine/pupet/Ansible/Itamaeは?⇒chef-soloは比較的新しく書籍として一番まとめられているので初めてProvisioningToolを利用するにはオススメ。
テスト駆動インフラでwerckerを使ったCI
3.Test
2.Provisioning
Ops
4.Notification
1.Webhook
Serverspecの使い方はもちろん、背景・設計思想
例:Serverspec
$ cat spec/default/matsuri_spec.rb require 'spec_helper'
describe package('nginx') do it { should be_installed }end
describe service('nginx') do it { should be_enabled } it { should be_running }end
wercker Continuous Integration テストが終わったらSlackへ通知する
Vagrantの利用手順
(初めて触るMiddlewareのインストール)1.vagrant sandbox onでまずはsnapshotを取得
2.virtualbox上で実際にコマンド作業
3.confファイル等はlocal上にマウントしている/vagrant/へコピー
4.chefのrecipeを書く
5.specを書く(serverspec)
6.vagrant sandbox rollbackで元に戻す
7.prvisioning(bundle exec knife solo cook webapp)
8.bundle exec thor dockerで他OSでもテストが通ることを確認
Tips:コマンドをCode化 Thorfileにコマンドを記述$ bundle exec thor -Tdocker------thor docker:berkshelf # berks vendorthor docker:build # build docker image provisioned by chefthor docker:default # build image and run specthor docker:roles # build Directory in rolesthor docker:spec # run spec
気をつけている点• Vagrantfileにいろいろ設定せず出来る限りOSインストール済みの初期サーバーと同じアクセス方法
• チームで共有できるように極力シンプル
• 自分以外がテストしやすいように(Pullrequestを送りやすいように)ThorfileでコマンドをCode化する
まとめ• 書籍より今ご紹介した内容はすべて実現可能
• チームで使いやすいようにシンプルさを保つ。(極力pluginを使わない。Vagrantfileを複雑に設定しない)
• 自分以外がカスタマイズしやすいようにThorfile等でCommandをCode化しておく(bundle exec thor
dockerで統合テストが通ればOK)
Reference• 実践Vagrant
• http://www.oreilly.co.jp/books/9784873116655/
• Chef 実践
• http://www.amazon.co.jp/Chef%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-~%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E6%88%90%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96-WEB-PRESS-plus/dp/477416500X
• Serverspec
• http://www.oreilly.co.jp/books/9784873117096/