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 / Ch...
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 "/Us...
エンジニアSさん
(c) 2013 Masashi Shinbara @shin1x1
1162 <VirtualHost *:80>
1163 ServerName candycane.local
1164 DocumentRoot "/Us...
とある開発チーム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等)
•プロビジョニング [ Provisio...
(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]
• 仮想サーバ起動
$ vagran...
vagrant 主なコマンド
(c) 2013 Masashi Shinbara @shin1x1
• 仮想サーバシャットダウン
$ vagrant halt
• 仮想サーバサスペンド
$ vagrant suspend
• 仮想サーバシャット...
(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
#   ...
(c) 2013 Masashi Shinbara @shin1x1
$ cd vagrant
$ cat .gitignore
.vagrant
•.vagrant/ は仮想サーバ固有の
id が保存されているので git で
管理しない
....
(c) 2013 Masashi Shinbara @shin1x1
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.b...
(c) 2013 Masashi Shinbara @shin1x1
•ホストPCのディレクトリと
仮想サーバのディレクトリを同期
•開発はホストPCで、
実行は仮想サーバで
•PhpStormやEclipseで開発可能
synced_fold...
(c) 2013 Masashi Shinbara @shin1x1
config.vm.synced_folder "../src", "/src", :create =>
true, :owner=> 'vagrant', :group=>...
synced_folder 注意点
(c) 2013 Masashi Shinbara @shin1x1
•仮想サーバでの権限変更が反映されない
•ホストPCでファイルが多いディレクトリは避ける
•仮想サーバでのディスクアクセスは遅い
=> ア...
(c) 2013 Masashi Shinbara @shin1x1
provision = <<-"EOS"
sudo yum -y update
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/...
仮想サーバ起動
(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...
本格的な開発環境へ
(c) 2013 Masashi Shinbara @shin1x1
•複雑なプロビジョニングは Chef や Puppet で
•できるだけプロビジョニングで自動化
=> DB構築、初期データ投入、設定ファイル変更
•プロ...
(c) 2013 Masashi Shinbara @shin1x1
$ git clone http://extemple.com/project
$ cd project/vagrant
$ vagrant up
•環境構築はこれだけ!
V...
(c) 2013 Masashi Shinbara @shin1x1
Vagrant Tips
(c) 2013 Masashi Shinbara @shin1x1
Configuration Version
Vagrant::Config.run do |config|
....
end
• Version1
Vagrant.configur...
Sahara Plugin
(c) 2013 Masashi Shinbara @shin1x1
• Vagrant Plugin
https://github.com/jedi4ever/sahara
• 仮想サーバの状態を DB の
ROL...
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
...
参考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を...
@shin1x1
(c) 2013 Masashi Shinbara @shin1x1
Upcoming SlideShare
Loading in …5
×

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

74,845 views

Published on

http://www.1x1.jp/blog/2013/09/php-enviroment-with-vagrant.html

Published in: Technology
  • とても参考になりました。今までテストサーバーとして、VPS借りてたのが馬鹿らしくなりました。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • メモリはVagrantfileにて自由に設定できます。
    もしくはAWS使えば自分のPCのメモリ使わずに使えます。
    (ネットワーク接続必須ですが)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • 仮想サーバかあ。メモリはどの程度使うんだろ。
    軽かったら入れたいな。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. 2013/07/17 shin1x1 第7回 関西PHP勉強会 もう XAMPP / MAMP はいらない! Vagrant で作る PHP 開発環境
  2. 2. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1 Shin x blog http://www.1x1.jp/blog/ PHP / DevOps / AWS / Varnish / Fabric / Chef
  3. 3. Agenda (c) 2013 Masashi Shinbara @shin1x1 • Vagrant とは • Vagrant で作るPHP 開発環境 • Vagrant Tips
  4. 4. Vagrant (c) 2013 Masashi Shinbara @shin1x1
  5. 5. (c) 2013 Masashi Shinbara @shin1x1 Web開発あるある
  6. 6. エンジニアSさん (c) 2013 Masashi Shinbara @shin1x1 • Macbook Air で開発 • Apache / PHP / DB • 複数案件を一台で
  7. 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. 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. 9. とある開発チームA (c) 2013 Masashi Shinbara @shin1x1 • チームで開発 • Macbook / Windows で開発 • Apache / PHP / DB
  10. 10. とある開発チームA (c) 2013 Masashi Shinbara @shin1x1 あれ?動かない。 何か変なコード書いた? こっちは動いてるよ。 拡張追加しないとダメだよ。
  11. 11. とある開発チームA (c) 2013 Masashi Shinbara @shin1x1 あれ?動かない。 何か変なコード書いた? こっちは動いてるよ。 拡張追加しないとダメだよ。 俺の環境では動く
  12. 12. WebデザイナーBさん (c) 2013 Masashi Shinbara @shin1x1 • WordPressのデザイン • XAMPPをインストール • でもなんだか動かない。。。
  13. 13. (c) 2013 Masashi Shinbara @shin1x1 WebデザイナーBさん
  14. 14. (c) 2013 Masashi Shinbara @shin1x1 WebデザイナーBさん Port 80 は 俺のモノ
  15. 15. そんなあなたに (c) 2013 Masashi Shinbara @shin1x1
  16. 16. Vagrantなら (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境を構築 • 他人と全く同じ環境を共有 • ホストPCとは分離された環境を構築
  17. 17. Vagrantの構成 (c) 2013 Masashi Shinbara @shin1x1 •Vagrant •仮想サーバ [ Provider ] (VirtualBox, VMWare, AWS等) •プロビジョニング [ Provisioning ] (Chef, Puppet, ShellScript等)
  18. 18. (c) 2013 Masashi Shinbara @shin1x1 VM起動 プロビジョニング実行 $ vagrant up Vagrantの構成
  19. 19. (c) 2013 Masashi Shinbara @shin1x1 VM起動 プロビジョニング実行 $ vagrant up Vagrantの構成
  20. 20. (c) 2013 Masashi Shinbara @shin1x1 VM起動 プロビジョニング実行 $ vagrant up Vagrantの構成
  21. 21. Vagrant 覚えておきたい用語 (c) 2013 Masashi Shinbara @shin1x1 •Boxファイル => 仮想サーバイメージファイル •Vagrantfile => 仮想サーバ構築設定 •vagrantコマンド => 全ての操作はこのコマンドで
  22. 22. Vagrant 主なコマンド (c) 2013 Masashi Shinbara @shin1x1 • Vagrantfile作成 $ vagrant init [boxファイル名] [boxファイルURL] • 仮想サーバ起動 $ vagrant up • 仮想サーバへ SSH ログイン $ vagrant ssh
  23. 23. vagrant 主なコマンド (c) 2013 Masashi Shinbara @shin1x1 • 仮想サーバシャットダウン $ vagrant halt • 仮想サーバサスペンド $ vagrant suspend • 仮想サーバシャットダウン+破棄 $ vagrant destroy
  24. 24. (c) 2013 Masashi Shinbara @shin1x1 Vagrantで作る PHP開発環境
  25. 25. サンプルプロジェクト (c) 2013 Masashi Shinbara @shin1x1 • CakePHPプロジェクト • OSX 上の Vim で開発 • Vagrant + VirtualBox + ShellScript
  26. 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. 27. (c) 2013 Masashi Shinbara @shin1x1 $ cd vagrant $ cat .gitignore .vagrant •.vagrant/ は仮想サーバ固有の id が保存されているので git で 管理しない .gitignore
  28. 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. 29. (c) 2013 Masashi Shinbara @shin1x1 •ホストPCのディレクトリと 仮想サーバのディレクトリを同期 •開発はホストPCで、 実行は仮想サーバで •PhpStormやEclipseで開発可能 synced_folder
  30. 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. 31. synced_folder 注意点 (c) 2013 Masashi Shinbara @shin1x1 •仮想サーバでの権限変更が反映されない •ホストPCでファイルが多いディレクトリは避ける •仮想サーバでのディスクアクセスは遅い => アプリケーションで大量のディスクIOが 発生する場合は synced_folder 以外の 領域を利用する
  32. 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. 33. 仮想サーバ起動 (c) 2013 Masashi Shinbara @shin1x1 $ vagrant up $ open http://192.168.33.100/
  34. 34. (c) 2013 Masashi Shinbara @shin1x1 $ vim app/Config/bootstrap.php $ open http://192.168.33.100/ ホストPCでソース変更
  35. 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. 36. 本格的な開発環境へ (c) 2013 Masashi Shinbara @shin1x1 •複雑なプロビジョニングは Chef や Puppet で •できるだけプロビジョニングで自動化 => DB構築、初期データ投入、設定ファイル変更 •プロファイリングツールや phpMyAdmin など の管理ツールも一緒に入れると便利
  37. 37. (c) 2013 Masashi Shinbara @shin1x1 $ git clone http://extemple.com/project $ cd project/vagrant $ vagrant up •環境構築はこれだけ! Vagrantfile が git にあれば
  38. 38. (c) 2013 Masashi Shinbara @shin1x1 Vagrant Tips
  39. 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. 40. Sahara Plugin (c) 2013 Masashi Shinbara @shin1x1 • Vagrant Plugin https://github.com/jedi4ever/sahara • 仮想サーバの状態を DB の ROLLBACK のように戻せる
  41. 41. Sahara Plugin (c) 2013 Masashi Shinbara @shin1x1 $ vagrant plugin install sahara • インストール
  42. 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. 43. 参考1 (c) 2013 Masashi Shinbara @shin1x1 http://docs.vagrantup.com/v2/
  44. 44. 参考2 (c) 2013 Masashi Shinbara @shin1x1 http://www.amazon.co.jp/dp/1449335837
  45. 45. 参考2 (c) 2013 Masashi Shinbara @shin1x1 http://www.amazon.co.jp/dp/1449335837
  46. 46. Summary (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境を構築 => プロジェクト毎にVagrantfile • 他人と全く同じ環境を共有 => Boxファイル、Vagrantfileを共有 • ホストPCとは分離された環境を構築 => 開発はホストPC、実行は仮想マシン
  47. 47. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1

×