モダン開発環境@atty303
今日の内容• 開発環境にまつわる問題• スマートな開発環境とは?• Vagrantによる仮想マシンの管理• Chefによる構成管理
LAMP開発に絞ります
開発環境にまつわる憂鬱
• プロジェクトに参画したとき、アプリを手元で動かすのに○時間掛かった……• 数年前のアプリのメンテナンスを依頼されたが、環境を用意できなくて開発に取り掛かることすらできない……憂鬱
問題• 構築手順が明文化されていない• 構築作業が自動化されていない
憂鬱• 開発環境では動いている機能が、本番環境で動かない……• Aさんの環境では動くけど、自分の環境では動かない……
問題• 環境に差異がある• 構成管理が不足している
• メンバーが1つの開発開発を共有して使っており、他人が開発中のコードが自分に影響して開発が進められない……• バグが混入したバージョンを特定したいけど、環境を使っている他人に影響するので戻せない……憂鬱
問題• 環境構築に手間が掛かるので、個人ごとに環境を用意できていない• 物理マシンを使っているので、環境を増やすのにコストが掛かる
もっとスマートにしよう!
必要なこと• 一人ごとに独立していること• 構築作業が容易であること• 同一構成の再現が可能であること• 構成をバージョン管理できること
独立性の確保• 物理マシン• クラウドサーバ• 仮想マシン
Virtual Machine(VM)
OS (Linux)WebサーバアプリケーションDBサーバ物理マシン
OS (Mac,Windows)WebサーバアプリケーションDBサーバ物理マシン(ホスト)ハイパーバイザー (VMWare,VirtualBox, Hyper-V)OS (Linux)仮想マシン(ゲスト)WebサーバアプリケーションDBサーバO...
VMのメリット• コストがほぼゼロ• 構成を簡単に変更可能• スナップショット
VMのデメリット• 性能が落ちる• ホストに十分なパワーが必要• 汎用パーツしか使えない
VM=ハードウェアのソフトウェア化
VMハイパーバイザー製品名 価格 Windows MacOracleVirtualBox Free Yes YesMicrosoftVirtualPC Free YesMicrosoft Hyper-V 高い YesVMWare Worksta...
VMWare Fusionデモ
容易性の確保• 仮想マシン管理の自動化• ミドルウェア構成の自動化
Vagrant
• VMの管理ツール• テキストファイルにVMの設定を書く• コマンド一発でVM作成と起動
• OSの構成管理ツール• テキストファイルに構成を書く• コマンド一発で構築
OS (Mac,Windows)WebサーバアプリケーションDBサーバ物理マシン(ホスト)ハイパーバイザー (VirtualBox)OS (Linux)仮想マシン(ゲスト)ChefVagrant
詳細は後で
再現性の確保• Vagrantによる仮想マシン構成の決定• ChefによるOS内環境の決定
構成のバージョニング• ただのテキストファイル• ソースコードと同様• Gitでバージョン管理が可能Vagrantfile Cookbook
まとめ
必要なこと• 一人ごとに独立していること→ 仮想マシンを利用• 構築作業が容易であること→Vagrant + Chef で自動化• 同一構成の再現が可能であること→Vagrant + Chef で構成管理• 構成をバージョン管理できること→Va...
Vagrant
対応VM-HV• VirtualBox• VMWare Fusion• VMWare Workstation• ...and Amazon EC2
インストールhttp://downloads.vagrantup.com/
ゼロからVMを作ってみる
初期設定$ vagrant box add ubuntu1204 https://s3.amazonaws.com/gsc-vagrant-boxes/ubuntu-12.04.2-i386-chef-11-omnibus.box$ vagra...
プロジェクトディレクトリを作る$ cd ~/work$ mkdir hello_vagrant$ cd hello_vagrant
Vagrantfileを作成$ vagrant init ubuntu1204
VM起動$ vagrant up$ vagrant up --provider=vmware_fusionVirtualBoxVMWare Fusion
VMにログイン$ vagrant ssh
ファイル共有$ touch README.md$ lsREADME.md Vagrantfile$ vagrant sshubuntu1204$ ls /vagrantREADME.md Vagrantfile
VMを落とす$ vagrant halt
VMを削除$ du -sh .vagrant/1.6G! .vagrant/$ vagrant destroy$ du -sh .vagrant/0B! .vagrant/
Boxes
ubuntu1204Boxescentos63 centos54プロジェクトAubuntu1204プロジェクトB プロジェクトCubuntu1204 centos54
構築済みBoxeshttp://www.vagrantbox.es/
Vagrantfile
# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”endRubyで記述
複数VM
Vagrant.configure(“2”) do |config|config.vm.define :web do |web|web.vm.box = “ubuntu1204”web.vm.network :private_network, ...
• up, haltなどのコマンドは全てのVMを対象として実行される• コマンドの後にVM名を追加すると、特定VMだけを操作できる$ vagrant ssh web
• VMの管理をコマンドで簡単にできる• 1ファイルで構成を管理• 複数VM構成も大丈夫まとめ
作成したVMは初期状態だけど、Webサーバなどのインストールや設定はどうするの?
Provisioning
シェルスクリプトVagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”config.vm.provision :shell, :inline => <<EOTapt-get ...
• up 時に自動実行• up 後にも任意で実行できる• halt → up を手軽に実行$ vagrant provision$ vagrant reload
• シェルスクリプトで事足りることもある• 何も覚えることがないので楽ではある• より堅牢に管理するために……
ChefVagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”config.vm.provision :chef_solo do |chef|chef.add_recipe ...
Chef
まだ慣れていないのでさわりだけです……
インストール• Vagrant + Chef のセットで使う場合は、Boxにインストール済みのChefを使うのが簡単
インストール(chef + knife-solo)$ gem install knife-solo$ git clone git://github.com/matschaffer/knife-solo.git$ cd knife-solo$ b...
最初の一歩
Cookbook作成vm$ cd /vagrantvm$ knife cookbook create myrecipe -o cookbooksvm$ ls -F cookbooks/myrecipe/vm$ ls -F cookbooks/m...
Vagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”config.vm.provision :chef_solo do |chef|chef.cookbooks_path ...
$ vagrant reload...[default] Running provisioner: chef_solo...Generating chef JSON and uploading...Running chef-solo...[20...
とりあえず動きました
gitを入れてみる
Recipe編集package “git” doaction :installendcookbooks/myrecipe/recipes/default.rb
$ vagrant provision...[default] Running provisioner: chef_solo...Generating chef JSON and uploading...Running chef-solo......
• destory → up しても再現される
Apache + PHP を動かしてみる
[“apache2-mpm-prefork”, “libapache2-mod-php5”].each do |pkg|package pkg doaction :installendendservice "apache2" dosupport...
<VirtualHost *:80>DocumentRoot <%= node[apache2][document_root] %>EnableMMAP offEnableSendfile off</VirtualHost>cookbooks/...
config.vm.provision :chef_solo do |chef|chef.cookbooks_path = "cookbooks"chef.add_recipe "myrecipe"chef.json = {"apache2" ...
デモ
• サーバの管理は必ずChef経由で行う• あるべき状態を定義するまとめ
• ロール• コミュニティのCookbook• Chef Server• VagrantなしでChefを使う(本番サーバ)他にも
http://tatsu-zine.com/books/chef-solo
勉強中です
モダン開発環境• 一人ごとに独立していること• 構築作業が容易であること• 同一構成の再現が可能であること• 構成をバージョン管理できること
ご静聴ありがとうございました
時間が余っていたらみなさんもやってみましょう!
モダン開発環境
Upcoming SlideShare
Loading in …5
×

モダン開発環境

1,920 views

Published on

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,920
On SlideShare
0
From Embeds
0
Number of Embeds
65
Actions
Shares
0
Downloads
17
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

モダン開発環境

  1. 1. モダン開発環境@atty303
  2. 2. 今日の内容• 開発環境にまつわる問題• スマートな開発環境とは?• Vagrantによる仮想マシンの管理• Chefによる構成管理
  3. 3. LAMP開発に絞ります
  4. 4. 開発環境にまつわる憂鬱
  5. 5. • プロジェクトに参画したとき、アプリを手元で動かすのに○時間掛かった……• 数年前のアプリのメンテナンスを依頼されたが、環境を用意できなくて開発に取り掛かることすらできない……憂鬱
  6. 6. 問題• 構築手順が明文化されていない• 構築作業が自動化されていない
  7. 7. 憂鬱• 開発環境では動いている機能が、本番環境で動かない……• Aさんの環境では動くけど、自分の環境では動かない……
  8. 8. 問題• 環境に差異がある• 構成管理が不足している
  9. 9. • メンバーが1つの開発開発を共有して使っており、他人が開発中のコードが自分に影響して開発が進められない……• バグが混入したバージョンを特定したいけど、環境を使っている他人に影響するので戻せない……憂鬱
  10. 10. 問題• 環境構築に手間が掛かるので、個人ごとに環境を用意できていない• 物理マシンを使っているので、環境を増やすのにコストが掛かる
  11. 11. もっとスマートにしよう!
  12. 12. 必要なこと• 一人ごとに独立していること• 構築作業が容易であること• 同一構成の再現が可能であること• 構成をバージョン管理できること
  13. 13. 独立性の確保• 物理マシン• クラウドサーバ• 仮想マシン
  14. 14. Virtual Machine(VM)
  15. 15. OS (Linux)WebサーバアプリケーションDBサーバ物理マシン
  16. 16. OS (Mac,Windows)WebサーバアプリケーションDBサーバ物理マシン(ホスト)ハイパーバイザー (VMWare,VirtualBox, Hyper-V)OS (Linux)仮想マシン(ゲスト)WebサーバアプリケーションDBサーバOS (Linux)仮想マシン(ゲスト)
  17. 17. VMのメリット• コストがほぼゼロ• 構成を簡単に変更可能• スナップショット
  18. 18. VMのデメリット• 性能が落ちる• ホストに十分なパワーが必要• 汎用パーツしか使えない
  19. 19. VM=ハードウェアのソフトウェア化
  20. 20. VMハイパーバイザー製品名 価格 Windows MacOracleVirtualBox Free Yes YesMicrosoftVirtualPC Free YesMicrosoft Hyper-V 高い YesVMWare Workstation ¥30,000 YesVMWare Fusion ¥5,000 YesParallels Desktop ¥8,000 YesVMWare vSphere 高い
  21. 21. VMWare Fusionデモ
  22. 22. 容易性の確保• 仮想マシン管理の自動化• ミドルウェア構成の自動化
  23. 23. Vagrant
  24. 24. • VMの管理ツール• テキストファイルにVMの設定を書く• コマンド一発でVM作成と起動
  25. 25. • OSの構成管理ツール• テキストファイルに構成を書く• コマンド一発で構築
  26. 26. OS (Mac,Windows)WebサーバアプリケーションDBサーバ物理マシン(ホスト)ハイパーバイザー (VirtualBox)OS (Linux)仮想マシン(ゲスト)ChefVagrant
  27. 27. 詳細は後で
  28. 28. 再現性の確保• Vagrantによる仮想マシン構成の決定• ChefによるOS内環境の決定
  29. 29. 構成のバージョニング• ただのテキストファイル• ソースコードと同様• Gitでバージョン管理が可能Vagrantfile Cookbook
  30. 30. まとめ
  31. 31. 必要なこと• 一人ごとに独立していること→ 仮想マシンを利用• 構築作業が容易であること→Vagrant + Chef で自動化• 同一構成の再現が可能であること→Vagrant + Chef で構成管理• 構成をバージョン管理できること→Vagrantfile + Cookbook を Git で管理
  32. 32. Vagrant
  33. 33. 対応VM-HV• VirtualBox• VMWare Fusion• VMWare Workstation• ...and Amazon EC2
  34. 34. インストールhttp://downloads.vagrantup.com/
  35. 35. ゼロからVMを作ってみる
  36. 36. 初期設定$ vagrant box add ubuntu1204 https://s3.amazonaws.com/gsc-vagrant-boxes/ubuntu-12.04.2-i386-chef-11-omnibus.box$ vagrant box add ubuntu1204 https://s3.amazonaws.com/gsc-vagrant-boxes/ubuntu-12.04.2-server-amd64.boxVirtualBoxVMWare Fusion
  37. 37. プロジェクトディレクトリを作る$ cd ~/work$ mkdir hello_vagrant$ cd hello_vagrant
  38. 38. Vagrantfileを作成$ vagrant init ubuntu1204
  39. 39. VM起動$ vagrant up$ vagrant up --provider=vmware_fusionVirtualBoxVMWare Fusion
  40. 40. VMにログイン$ vagrant ssh
  41. 41. ファイル共有$ touch README.md$ lsREADME.md Vagrantfile$ vagrant sshubuntu1204$ ls /vagrantREADME.md Vagrantfile
  42. 42. VMを落とす$ vagrant halt
  43. 43. VMを削除$ du -sh .vagrant/1.6G! .vagrant/$ vagrant destroy$ du -sh .vagrant/0B! .vagrant/
  44. 44. Boxes
  45. 45. ubuntu1204Boxescentos63 centos54プロジェクトAubuntu1204プロジェクトB プロジェクトCubuntu1204 centos54
  46. 46. 構築済みBoxeshttp://www.vagrantbox.es/
  47. 47. Vagrantfile
  48. 48. # -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”endRubyで記述
  49. 49. 複数VM
  50. 50. Vagrant.configure(“2”) do |config|config.vm.define :web do |web|web.vm.box = “ubuntu1204”web.vm.network :private_network, ip: “192.168.99.1”endconfig.vm.define :db do |db|db.vm.box = “ubuntu1204”db.vm.network :private_network, ip: “192.168.99.2”endendVagrantfile
  51. 51. • up, haltなどのコマンドは全てのVMを対象として実行される• コマンドの後にVM名を追加すると、特定VMだけを操作できる$ vagrant ssh web
  52. 52. • VMの管理をコマンドで簡単にできる• 1ファイルで構成を管理• 複数VM構成も大丈夫まとめ
  53. 53. 作成したVMは初期状態だけど、Webサーバなどのインストールや設定はどうするの?
  54. 54. Provisioning
  55. 55. シェルスクリプトVagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”config.vm.provision :shell, :inline => <<EOTapt-get updateapt-get -y install apache2-mpm-preforkapt-get -y install libapache2-mod-php5EOTend
  56. 56. • up 時に自動実行• up 後にも任意で実行できる• halt → up を手軽に実行$ vagrant provision$ vagrant reload
  57. 57. • シェルスクリプトで事足りることもある• 何も覚えることがないので楽ではある• より堅牢に管理するために……
  58. 58. ChefVagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”config.vm.provision :chef_solo do |chef|chef.add_recipe “apache”endend
  59. 59. Chef
  60. 60. まだ慣れていないのでさわりだけです……
  61. 61. インストール• Vagrant + Chef のセットで使う場合は、Boxにインストール済みのChefを使うのが簡単
  62. 62. インストール(chef + knife-solo)$ gem install knife-solo$ git clone git://github.com/matschaffer/knife-solo.git$ cd knife-solo$ bundle && bundle exec rake install* http://shimotori.github.io/blog-it/2013/04/30/1-knife-solo-cautions/Version 0.2.0Version HEAD (0.3.0-pre3)
  63. 63. 最初の一歩
  64. 64. Cookbook作成vm$ cd /vagrantvm$ knife cookbook create myrecipe -o cookbooksvm$ ls -F cookbooks/myrecipe/vm$ ls -F cookbooks/myrecipe/CHANGELOG.md README.md attributes/ definitions/files/ libraries/ metadata.rb providers/recipes/ resources/ templates/
  65. 65. Vagrant.configure(“2”) do |config|config.vm.box = “ubuntu1204”config.vm.provision :chef_solo do |chef|chef.cookbooks_path = "cookbooks"chef.add_recipe "myrecipe"endendVagrantfile
  66. 66. $ vagrant reload...[default] Running provisioner: chef_solo...Generating chef JSON and uploading...Running chef-solo...[2013-05-17T11:07:27+00:00] INFO: *** Chef 11.4.0 ***...[2013-05-17T11:07:28+00:00] INFO: Chef Run complete in 0.017913367 seconds...動作確認
  67. 67. とりあえず動きました
  68. 68. gitを入れてみる
  69. 69. Recipe編集package “git” doaction :installendcookbooks/myrecipe/recipes/default.rb
  70. 70. $ vagrant provision...[default] Running provisioner: chef_solo...Generating chef JSON and uploading...Running chef-solo......[2013-05-17T11:24:54+00:00] INFO: Processing package[git] action install(myrecipe::default line 10)[2013-05-17T11:25:11+00:00] INFO: Chef Run complete in 17.741444756seconds...実行
  71. 71. • destory → up しても再現される
  72. 72. Apache + PHP を動かしてみる
  73. 73. [“apache2-mpm-prefork”, “libapache2-mod-php5”].each do |pkg|package pkg doaction :installendendservice "apache2" dosupports :status => true, :restart => true, :reload => trueaction [ :enable, :start ]endtemplate "apache2-site-dev" dopath "/etc/apache2/sites-available/dev"source "apache2-site-dev.erb"owner "root"group "root"mode 0644notifies :reload, service[apache2]endexecute "apache2-sites-disable-default" doonly_if { File.exists?("/etc/apache2/sites-enabled/000-default") }command "a2dissite default"notifies :reload, service[apache2]endexecute "apache2-sites-enable-dev" donot_if { File.exists?("/etc/apache2/sites-enabled/dev") }command "a2ensite dev"notifies :reload, service[apache2]end
  74. 74. <VirtualHost *:80>DocumentRoot <%= node[apache2][document_root] %>EnableMMAP offEnableSendfile off</VirtualHost>cookbooks/myrecipe/templates/default/apache2-site-dev.erb
  75. 75. config.vm.provision :chef_solo do |chef|chef.cookbooks_path = "cookbooks"chef.add_recipe "myrecipe"chef.json = {"apache2" => {"document_root" => "/vagrant/web"}}endVagrantfile
  76. 76. デモ
  77. 77. • サーバの管理は必ずChef経由で行う• あるべき状態を定義するまとめ
  78. 78. • ロール• コミュニティのCookbook• Chef Server• VagrantなしでChefを使う(本番サーバ)他にも
  79. 79. http://tatsu-zine.com/books/chef-solo
  80. 80. 勉強中です
  81. 81. モダン開発環境• 一人ごとに独立していること• 構築作業が容易であること• 同一構成の再現が可能であること• 構成をバージョン管理できること
  82. 82. ご静聴ありがとうございました
  83. 83. 時間が余っていたらみなさんもやってみましょう!

×