SlideShare a Scribd company logo
2013/07/17 shin1x1
第7回 関西PHP勉強会
もう XAMPP / MAMP はいらない!
Vagrant で作る
PHP 開発環境
@shin1x1
(c) 2013 Masashi Shinbara @shin1x1
Shin x blog
http://www.1x1.jp/blog/
PHP / DevOps / AWS /
Varnish / Fabric / Chef
Agenda
(c) 2013 Masashi Shinbara @shin1x1
• Vagrant とは
• Vagrant で作るPHP 開発環境
• Vagrant Tips
Vagrant
(c) 2013 Masashi Shinbara @shin1x1
(c) 2013 Masashi Shinbara @shin1x1
Web開発あるある
エンジニアSさん
(c) 2013 Masashi Shinbara @shin1x1
• Macbook Air で開発
• Apache / PHP / DB
• 複数案件を一台で
エンジニアSさん
(c) 2013 Masashi Shinbara @shin1x1
1162 <VirtualHost *:80>
1163 ServerName candycane.local
1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot"
1165 </VirtualHost>
1166
1167 <VirtualHost *:80>
1168 ServerName demo.local
1169 DocumentRoot "/Users/shin/sandbox/demo/20130601_phpcon"
1170 php_value vld.active 1
1171 </VirtualHost>
1172
1173 <VirtualHost *:80>
1174 ServerName project1.local
1175 DocumentRoot "/Users/shin/project1/app/webroot"
1176 </VirtualHost>
1177
1178 <VirtualHost *:80>
1179 ServerName project2.local
1180 DocumentRoot "/Users/shin/project2/app/webroot"
1181 </VirtualHost>
エンジニアSさん
(c) 2013 Masashi Shinbara @shin1x1
1162 <VirtualHost *:80>
1163 ServerName candycane.local
1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot"
1165 </VirtualHost>
1166
1167 <VirtualHost *:80>
1168 ServerName demo.local
1169 DocumentRoot "/Users/shin/sandbox/demo/20130601_phpcon"
1170 php_value vld.active 1
1171 </VirtualHost>
1172
1173 <VirtualHost *:80>
1174 ServerName project1.local
1175 DocumentRoot "/Users/shin/project1/app/webroot"
1176 </VirtualHost>
1177
1178 <VirtualHost *:80>
1179 ServerName project2.local
1180 DocumentRoot "/Users/shin/project2/app/webroot"
1181 </VirtualHost>
溢れる
VirtualHost
とある開発チームA
(c) 2013 Masashi Shinbara @shin1x1
• チームで開発
• Macbook / Windows で開発
• Apache / PHP / DB
とある開発チームA
(c) 2013 Masashi Shinbara @shin1x1
あれ?動かない。
何か変なコード書いた?
こっちは動いてるよ。
拡張追加しないとダメだよ。
とある開発チームA
(c) 2013 Masashi Shinbara @shin1x1
あれ?動かない。
何か変なコード書いた?
こっちは動いてるよ。
拡張追加しないとダメだよ。
俺の環境では動く
WebデザイナーBさん
(c) 2013 Masashi Shinbara @shin1x1
• WordPressのデザイン
• XAMPPをインストール
• でもなんだか動かない。。。
(c) 2013 Masashi Shinbara @shin1x1
WebデザイナーBさん
(c) 2013 Masashi Shinbara @shin1x1
WebデザイナーBさん
Port 80 は
俺のモノ
そんなあなたに
(c) 2013 Masashi Shinbara @shin1x1
Vagrantなら
(c) 2013 Masashi Shinbara @shin1x1
• プロジェクト毎に独立した環境を構築
• 他人と全く同じ環境を共有
• ホストPCとは分離された環境を構築
Vagrantの構成
(c) 2013 Masashi Shinbara @shin1x1
•Vagrant
•仮想サーバ [ Provider ]
(VirtualBox, VMWare, AWS等)
•プロビジョニング [ Provisioning ]
(Chef, Puppet, ShellScript等)
(c) 2013 Masashi Shinbara @shin1x1
VM起動
プロビジョニング実行
$ vagrant up
Vagrantの構成
(c) 2013 Masashi Shinbara @shin1x1
VM起動
プロビジョニング実行
$ vagrant up
Vagrantの構成
(c) 2013 Masashi Shinbara @shin1x1
VM起動
プロビジョニング実行
$ vagrant up
Vagrantの構成
Vagrant 覚えておきたい用語
(c) 2013 Masashi Shinbara @shin1x1
•Boxファイル
=> 仮想サーバイメージファイル
•Vagrantfile
=> 仮想サーバ構築設定
•vagrantコマンド
=> 全ての操作はこのコマンドで
Vagrant 主なコマンド
(c) 2013 Masashi Shinbara @shin1x1
• Vagrantfile作成
$ vagrant init [boxファイル名] [boxファイルURL]
• 仮想サーバ起動
$ vagrant up
• 仮想サーバへ SSH ログイン
$ vagrant ssh
vagrant 主なコマンド
(c) 2013 Masashi Shinbara @shin1x1
• 仮想サーバシャットダウン
$ vagrant halt
• 仮想サーバサスペンド
$ vagrant suspend
• 仮想サーバシャットダウン+破棄
$ vagrant destroy
(c) 2013 Masashi Shinbara @shin1x1
Vagrantで作る
PHP開発環境
サンプルプロジェクト
(c) 2013 Masashi Shinbara @shin1x1
• CakePHPプロジェクト
• OSX 上の Vim で開発
• Vagrant + VirtualBox
+ ShellScript
(c) 2013 Masashi Shinbara @shin1x1
ファイル構成
$ tree /path/to/project
.
!"" src
#   !"" CONTRIBUTING.md
#   !"" README.md
#   !"" app
#   !"" build.properties
#   !"" build.xml
#   !"" index.php
#   !"" lib
#   !"" plugins
#   $"" vendors
$"" vagrant
   !"" .gitignore
   !"" .vagrant
   $"" Vagrantfile
アプリケーション
Vagrant
Git で管理
(c) 2013 Masashi Shinbara @shin1x1
$ cd vagrant
$ cat .gitignore
.vagrant
•.vagrant/ は仮想サーバ固有の
id が保存されているので git で
管理しない
.gitignore
(c) 2013 Masashi Shinbara @shin1x1
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "centos64_ja"
config.vm.network :private_network, ip: "192.168.33.100"
config.vm.synced_folder "../src", "/src", :create =>
true, :owner=> 'vagrant', :group=>'vagrant', :extra =>
'dmode=777,fmode=666'
$ vim Vagrantfile
Vagrantfile
(c) 2013 Masashi Shinbara @shin1x1
•ホストPCのディレクトリと
仮想サーバのディレクトリを同期
•開発はホストPCで、
実行は仮想サーバで
•PhpStormやEclipseで開発可能
synced_folder
(c) 2013 Masashi Shinbara @shin1x1
config.vm.synced_folder "../src", "/src", :create =>
true, :owner=> 'vagrant', :group=>'vagrant', :extra =>
'dmode=777,fmode=666'
•ホストPC: ../src と 仮想サーバ: /src を共有
•仮想サーバに /src が無ければ自動生成
•/src は vagrant を owner / group に
•/src 以下のパーミッションは ディレクトリが777、ファイルが666
synced_folder - Vagrantfile
synced_folder 注意点
(c) 2013 Masashi Shinbara @shin1x1
•仮想サーバでの権限変更が反映されない
•ホストPCでファイルが多いディレクトリは避ける
•仮想サーバでのディスクアクセスは遅い
=> アプリケーションで大量のディスクIOが
発生する場合は synced_folder 以外の
領域を利用する
(c) 2013 Masashi Shinbara @shin1x1
provision = <<-"EOS"
sudo yum -y update
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-
release-1.0-11.ius.centos6.noarch.rpm
yum -y install php54 php54-pdo php54-cli php54-pgsql php54-mbstring php54-mcrypt
php54-common php54-pecl-memcache php54-gd php54-xml php54-devel php54-pecl-
xdebug php54-pecl-apc
yum -y install httpd
echo "date.timezone = Asia/Tokyo" >> /etc/php.ini
echo "<VirtualHost *:80>" >> /etc/httpd/conf/httpd.conf
echo " DocumentRoot /src/app/webroot" >> /etc/httpd/conf/httpd.conf
echo "</VirtualHost>" >> /etc/httpd/conf/httpd.conf
/sbin/service httpd start
/sbin/chkconfig httpd on
EOS
config.vm.provision :shell, :inline => provision
end
Vagrantfile
synced_folder を
document_root に指定
仮想サーバ起動
(c) 2013 Masashi Shinbara @shin1x1
$ vagrant up
$ open http://192.168.33.100/
(c) 2013 Masashi Shinbara @shin1x1
$ vim app/Config/bootstrap.php
$ open http://192.168.33.100/
ホストPCでソース変更
(c) 2013 Masashi Shinbara @shin1x1
<?php
phpinfo();
$ cd ../src/
$ vim app/webroot/info.php
ホストPCでファイル追加
$ open http://192.168.33.100/info.php
本格的な開発環境へ
(c) 2013 Masashi Shinbara @shin1x1
•複雑なプロビジョニングは Chef や Puppet で
•できるだけプロビジョニングで自動化
=> DB構築、初期データ投入、設定ファイル変更
•プロファイリングツールや phpMyAdmin など
の管理ツールも一緒に入れると便利
(c) 2013 Masashi Shinbara @shin1x1
$ git clone http://extemple.com/project
$ cd project/vagrant
$ vagrant up
•環境構築はこれだけ!
Vagrantfile が git にあれば
(c) 2013 Masashi Shinbara @shin1x1
Vagrant Tips
(c) 2013 Masashi Shinbara @shin1x1
Configuration Version
Vagrant::Config.run do |config|
....
end
• Version1
Vagrant.configure("2") do |config|
Vagrant.configure("1") do |config|
....
end
• Version2
•blog等を見る時は、設定バージョンに注意。
バージョンが異なると動作しないことも。
Sahara Plugin
(c) 2013 Masashi Shinbara @shin1x1
• Vagrant Plugin
https://github.com/jedi4ever/sahara
• 仮想サーバの状態を DB の
ROLLBACK のように戻せる
Sahara Plugin
(c) 2013 Masashi Shinbara @shin1x1
$ vagrant plugin install sahara
• インストール
Sahara Plugin
(c) 2013 Masashi Shinbara @shin1x1
$ vagrant sandbox on
• sandbox モード開始 = BEGIN;
$ vagrant sandbox rollback
• 元に戻す = ROLLBACK;
$ vagrant sandbox commit
• 変更確定 = COMMIT;
$ vagrant sandbox off
• sandbox モード終了
参考1
(c) 2013 Masashi Shinbara @shin1x1
http://docs.vagrantup.com/v2/
参考2
(c) 2013 Masashi Shinbara @shin1x1
http://www.amazon.co.jp/dp/1449335837
参考2
(c) 2013 Masashi Shinbara @shin1x1
http://www.amazon.co.jp/dp/1449335837
Summary
(c) 2013 Masashi Shinbara @shin1x1
• プロジェクト毎に独立した環境を構築
=> プロジェクト毎にVagrantfile
• 他人と全く同じ環境を共有
=> Boxファイル、Vagrantfileを共有
• ホストPCとは分離された環境を構築
=> 開発はホストPC、実行は仮想マシン
@shin1x1
(c) 2013 Masashi Shinbara @shin1x1

More Related Content

もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境

  • 1. 2013/07/17 shin1x1 第7回 関西PHP勉強会 もう XAMPP / MAMP はいらない! Vagrant で作る PHP 開発環境
  • 2. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1 Shin x blog http://www.1x1.jp/blog/ PHP / DevOps / AWS / Varnish / Fabric / Chef
  • 3. Agenda (c) 2013 Masashi Shinbara @shin1x1 • Vagrant とは • Vagrant で作るPHP 開発環境 • Vagrant Tips
  • 4. Vagrant (c) 2013 Masashi Shinbara @shin1x1
  • 5. (c) 2013 Masashi Shinbara @shin1x1 Web開発あるある
  • 6. エンジニアSさん (c) 2013 Masashi Shinbara @shin1x1 • Macbook Air で開発 • Apache / PHP / DB • 複数案件を一台で
  • 7. エンジニアSさん (c) 2013 Masashi Shinbara @shin1x1 1162 <VirtualHost *:80> 1163 ServerName candycane.local 1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot" 1165 </VirtualHost> 1166 1167 <VirtualHost *:80> 1168 ServerName demo.local 1169 DocumentRoot "/Users/shin/sandbox/demo/20130601_phpcon" 1170 php_value vld.active 1 1171 </VirtualHost> 1172 1173 <VirtualHost *:80> 1174 ServerName project1.local 1175 DocumentRoot "/Users/shin/project1/app/webroot" 1176 </VirtualHost> 1177 1178 <VirtualHost *:80> 1179 ServerName project2.local 1180 DocumentRoot "/Users/shin/project2/app/webroot" 1181 </VirtualHost>
  • 8. エンジニアSさん (c) 2013 Masashi Shinbara @shin1x1 1162 <VirtualHost *:80> 1163 ServerName candycane.local 1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot" 1165 </VirtualHost> 1166 1167 <VirtualHost *:80> 1168 ServerName demo.local 1169 DocumentRoot "/Users/shin/sandbox/demo/20130601_phpcon" 1170 php_value vld.active 1 1171 </VirtualHost> 1172 1173 <VirtualHost *:80> 1174 ServerName project1.local 1175 DocumentRoot "/Users/shin/project1/app/webroot" 1176 </VirtualHost> 1177 1178 <VirtualHost *:80> 1179 ServerName project2.local 1180 DocumentRoot "/Users/shin/project2/app/webroot" 1181 </VirtualHost> 溢れる VirtualHost
  • 9. とある開発チームA (c) 2013 Masashi Shinbara @shin1x1 • チームで開発 • Macbook / Windows で開発 • Apache / PHP / DB
  • 10. とある開発チームA (c) 2013 Masashi Shinbara @shin1x1 あれ?動かない。 何か変なコード書いた? こっちは動いてるよ。 拡張追加しないとダメだよ。
  • 11. とある開発チームA (c) 2013 Masashi Shinbara @shin1x1 あれ?動かない。 何か変なコード書いた? こっちは動いてるよ。 拡張追加しないとダメだよ。 俺の環境では動く
  • 12. WebデザイナーBさん (c) 2013 Masashi Shinbara @shin1x1 • WordPressのデザイン • XAMPPをインストール • でもなんだか動かない。。。
  • 13. (c) 2013 Masashi Shinbara @shin1x1 WebデザイナーBさん
  • 14. (c) 2013 Masashi Shinbara @shin1x1 WebデザイナーBさん Port 80 は 俺のモノ
  • 16. Vagrantなら (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境を構築 • 他人と全く同じ環境を共有 • ホストPCとは分離された環境を構築
  • 17. Vagrantの構成 (c) 2013 Masashi Shinbara @shin1x1 •Vagrant •仮想サーバ [ Provider ] (VirtualBox, VMWare, AWS等) •プロビジョニング [ Provisioning ] (Chef, Puppet, ShellScript等)
  • 18. (c) 2013 Masashi Shinbara @shin1x1 VM起動 プロビジョニング実行 $ vagrant up Vagrantの構成
  • 19. (c) 2013 Masashi Shinbara @shin1x1 VM起動 プロビジョニング実行 $ vagrant up Vagrantの構成
  • 20. (c) 2013 Masashi Shinbara @shin1x1 VM起動 プロビジョニング実行 $ vagrant up Vagrantの構成
  • 21. Vagrant 覚えておきたい用語 (c) 2013 Masashi Shinbara @shin1x1 •Boxファイル => 仮想サーバイメージファイル •Vagrantfile => 仮想サーバ構築設定 •vagrantコマンド => 全ての操作はこのコマンドで
  • 22. Vagrant 主なコマンド (c) 2013 Masashi Shinbara @shin1x1 • Vagrantfile作成 $ vagrant init [boxファイル名] [boxファイルURL] • 仮想サーバ起動 $ vagrant up • 仮想サーバへ SSH ログイン $ vagrant ssh
  • 23. vagrant 主なコマンド (c) 2013 Masashi Shinbara @shin1x1 • 仮想サーバシャットダウン $ vagrant halt • 仮想サーバサスペンド $ vagrant suspend • 仮想サーバシャットダウン+破棄 $ vagrant destroy
  • 24. (c) 2013 Masashi Shinbara @shin1x1 Vagrantで作る PHP開発環境
  • 25. サンプルプロジェクト (c) 2013 Masashi Shinbara @shin1x1 • CakePHPプロジェクト • OSX 上の Vim で開発 • Vagrant + VirtualBox + ShellScript
  • 26. (c) 2013 Masashi Shinbara @shin1x1 ファイル構成 $ tree /path/to/project . !"" src #   !"" CONTRIBUTING.md #   !"" README.md #   !"" app #   !"" build.properties #   !"" build.xml #   !"" index.php #   !"" lib #   !"" plugins #   $"" vendors $"" vagrant    !"" .gitignore    !"" .vagrant    $"" Vagrantfile アプリケーション Vagrant Git で管理
  • 27. (c) 2013 Masashi Shinbara @shin1x1 $ cd vagrant $ cat .gitignore .vagrant •.vagrant/ は仮想サーバ固有の id が保存されているので git で 管理しない .gitignore
  • 28. (c) 2013 Masashi Shinbara @shin1x1 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos64_ja" config.vm.network :private_network, ip: "192.168.33.100" config.vm.synced_folder "../src", "/src", :create => true, :owner=> 'vagrant', :group=>'vagrant', :extra => 'dmode=777,fmode=666' $ vim Vagrantfile Vagrantfile
  • 29. (c) 2013 Masashi Shinbara @shin1x1 •ホストPCのディレクトリと 仮想サーバのディレクトリを同期 •開発はホストPCで、 実行は仮想サーバで •PhpStormやEclipseで開発可能 synced_folder
  • 30. (c) 2013 Masashi Shinbara @shin1x1 config.vm.synced_folder "../src", "/src", :create => true, :owner=> 'vagrant', :group=>'vagrant', :extra => 'dmode=777,fmode=666' •ホストPC: ../src と 仮想サーバ: /src を共有 •仮想サーバに /src が無ければ自動生成 •/src は vagrant を owner / group に •/src 以下のパーミッションは ディレクトリが777、ファイルが666 synced_folder - Vagrantfile
  • 31. synced_folder 注意点 (c) 2013 Masashi Shinbara @shin1x1 •仮想サーバでの権限変更が反映されない •ホストPCでファイルが多いディレクトリは避ける •仮想サーバでのディスクアクセスは遅い => アプリケーションで大量のディスクIOが 発生する場合は synced_folder 以外の 領域を利用する
  • 32. (c) 2013 Masashi Shinbara @shin1x1 provision = <<-"EOS" sudo yum -y update rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius- release-1.0-11.ius.centos6.noarch.rpm yum -y install php54 php54-pdo php54-cli php54-pgsql php54-mbstring php54-mcrypt php54-common php54-pecl-memcache php54-gd php54-xml php54-devel php54-pecl- xdebug php54-pecl-apc yum -y install httpd echo "date.timezone = Asia/Tokyo" >> /etc/php.ini echo "<VirtualHost *:80>" >> /etc/httpd/conf/httpd.conf echo " DocumentRoot /src/app/webroot" >> /etc/httpd/conf/httpd.conf echo "</VirtualHost>" >> /etc/httpd/conf/httpd.conf /sbin/service httpd start /sbin/chkconfig httpd on EOS config.vm.provision :shell, :inline => provision end Vagrantfile synced_folder を document_root に指定
  • 33. 仮想サーバ起動 (c) 2013 Masashi Shinbara @shin1x1 $ vagrant up $ open http://192.168.33.100/
  • 34. (c) 2013 Masashi Shinbara @shin1x1 $ vim app/Config/bootstrap.php $ open http://192.168.33.100/ ホストPCでソース変更
  • 35. (c) 2013 Masashi Shinbara @shin1x1 <?php phpinfo(); $ cd ../src/ $ vim app/webroot/info.php ホストPCでファイル追加 $ open http://192.168.33.100/info.php
  • 36. 本格的な開発環境へ (c) 2013 Masashi Shinbara @shin1x1 •複雑なプロビジョニングは Chef や Puppet で •できるだけプロビジョニングで自動化 => DB構築、初期データ投入、設定ファイル変更 •プロファイリングツールや phpMyAdmin など の管理ツールも一緒に入れると便利
  • 37. (c) 2013 Masashi Shinbara @shin1x1 $ git clone http://extemple.com/project $ cd project/vagrant $ vagrant up •環境構築はこれだけ! Vagrantfile が git にあれば
  • 38. (c) 2013 Masashi Shinbara @shin1x1 Vagrant Tips
  • 39. (c) 2013 Masashi Shinbara @shin1x1 Configuration Version Vagrant::Config.run do |config| .... end • Version1 Vagrant.configure("2") do |config| Vagrant.configure("1") do |config| .... end • Version2 •blog等を見る時は、設定バージョンに注意。 バージョンが異なると動作しないことも。
  • 40. Sahara Plugin (c) 2013 Masashi Shinbara @shin1x1 • Vagrant Plugin https://github.com/jedi4ever/sahara • 仮想サーバの状態を DB の ROLLBACK のように戻せる
  • 41. Sahara Plugin (c) 2013 Masashi Shinbara @shin1x1 $ vagrant plugin install sahara • インストール
  • 42. Sahara Plugin (c) 2013 Masashi Shinbara @shin1x1 $ vagrant sandbox on • sandbox モード開始 = BEGIN; $ vagrant sandbox rollback • 元に戻す = ROLLBACK; $ vagrant sandbox commit • 変更確定 = COMMIT; $ vagrant sandbox off • sandbox モード終了
  • 43. 参考1 (c) 2013 Masashi Shinbara @shin1x1 http://docs.vagrantup.com/v2/
  • 44. 参考2 (c) 2013 Masashi Shinbara @shin1x1 http://www.amazon.co.jp/dp/1449335837
  • 45. 参考2 (c) 2013 Masashi Shinbara @shin1x1 http://www.amazon.co.jp/dp/1449335837
  • 46. Summary (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境を構築 => プロジェクト毎にVagrantfile • 他人と全く同じ環境を共有 => Boxファイル、Vagrantfileを共有 • ホストPCとは分離された環境を構築 => 開発はホストPC、実行は仮想マシン
  • 47. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1