モダン開発環境
Upcoming SlideShare
Loading in...5
×
 

モダン開発環境

on

  • 1,323 views

 

Statistics

Views

Total Views
1,323
Views on SlideShare
1,321
Embed Views
2

Actions

Likes
4
Downloads
11
Comments
0

2 Embeds 2

https://twitter.com 1
https://cybozulive.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

モダン開発環境 モダン開発環境 Presentation Transcript

  • モダン開発環境@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サーバOS (Linux)仮想マシン(ゲスト)
  • VMのメリット• コストがほぼゼロ• 構成を簡単に変更可能• スナップショット
  • VMのデメリット• 性能が落ちる• ホストに十分なパワーが必要• 汎用パーツしか使えない
  • VM=ハードウェアのソフトウェア化
  • VMハイパーバイザー製品名 価格 Windows MacOracleVirtualBox Free Yes YesMicrosoftVirtualPC Free YesMicrosoft Hyper-V 高い YesVMWare Workstation ¥30,000 YesVMWare Fusion ¥5,000 YesParallels Desktop ¥8,000 YesVMWare vSphere 高い
  • 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 で構成管理• 構成をバージョン管理できること→Vagrantfile + Cookbook を Git で管理
  • 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$ vagrant box add ubuntu1204 https://s3.amazonaws.com/gsc-vagrant-boxes/ubuntu-12.04.2-server-amd64.boxVirtualBoxVMWare Fusion
  • プロジェクトディレクトリを作る$ 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, 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
  • • 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 updateapt-get -y install apache2-mpm-preforkapt-get -y install libapache2-mod-php5EOTend
  • • 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 “apache”endend
  • Chef
  • まだ慣れていないのでさわりだけです……
  • インストール• Vagrant + Chef のセットで使う場合は、Boxにインストール済みのChefを使うのが簡単
  • インストール(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)
  • 最初の一歩
  • 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/
  • 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
  • $ 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...動作確認
  • とりあえず動きました
  • 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......[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...実行
  • • destory → up しても再現される
  • Apache + PHP を動かしてみる
  • [“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
  • <VirtualHost *:80>DocumentRoot <%= node[apache2][document_root] %>EnableMMAP offEnableSendfile off</VirtualHost>cookbooks/myrecipe/templates/default/apache2-site-dev.erb
  • config.vm.provision :chef_solo do |chef|chef.cookbooks_path = "cookbooks"chef.add_recipe "myrecipe"chef.json = {"apache2" => {"document_root" => "/vagrant/web"}}endVagrantfile
  • デモ
  • • サーバの管理は必ずChef経由で行う• あるべき状態を定義するまとめ
  • • ロール• コミュニティのCookbook• Chef Server• VagrantなしでChefを使う(本番サーバ)他にも
  • http://tatsu-zine.com/books/chef-solo
  • 勉強中です
  • モダン開発環境• 一人ごとに独立していること• 構築作業が容易であること• 同一構成の再現が可能であること• 構成をバージョン管理できること
  • ご静聴ありがとうございました
  • 時間が余っていたらみなさんもやってみましょう!