SlideShare ist ein Scribd-Unternehmen logo
1 von 47
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

Weitere ähnliche Inhalte

Was ist angesagt?

開発現場で活用するVagrant
開発現場で活用するVagrant開発現場で活用するVagrant
開発現場で活用するVagrantMasashi Shinbara
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話Daijiro Abe
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前katanyan
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク LaravelMasashi Shinbara
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションMasashi Shinbara
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacTakeshi Komiya
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするRyo Adachi
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Nakazawa Yuichi
 
さくらのインフラコード
さくらのインフラコードさくらのインフラコード
さくらのインフラコードYukihiko SAWANOBORI
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Hidetoshi Hirokawa
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからTakeshi Kuramochi
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 Hideo Takahashi
 
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいVagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいKazuhiro Oinuma
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみようRyo Adachi
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Wayロフト くん
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみようRyo Adachi
 

Was ist angesagt? (20)

開発現場で活用するVagrant
開発現場で活用するVagrant開発現場で活用するVagrant
開発現場で活用するVagrant
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
わかってるフレームワーク Laravel
わかってるフレームワーク Laravelわかってるフレームワーク Laravel
わかってるフレームワーク Laravel
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
 
さくらのインフラコード
さくらのインフラコードさくらのインフラコード
さくらのインフラコード
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Ansible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれからAnsible 2.0 のサマライズとこれから
Ansible 2.0 のサマライズとこれから
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
Vagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたいVagrant環境のAnsibleを速くしたい
Vagrant環境のAnsibleを速くしたい
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
 
Alpine linuxを触ってみよう
Alpine linuxを触ってみようAlpine linuxを触ってみよう
Alpine linuxを触ってみよう
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 

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

3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfesTakeshi Komiya
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境ast_j
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門Masashi Shinbara
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
Vagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようVagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようTakuma Morikawa
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話Masaki Kobayashi
 
ローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrantローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + VagrantKazuma Kimura
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会samemoon
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12Ryuji Yamashita
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)OWASP Nagoya
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 

Ähnlich wie もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境 (20)

3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Vagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようVagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみよう
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
 
ローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrantローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrant
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 
Haikara
HaikaraHaikara
Haikara
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築ハンズオン手順書)
 
Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 

Mehr von Masashi Shinbara

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライドMasashi Shinbara
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Masashi Shinbara
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2Masashi Shinbara
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPressMasashi Shinbara
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Masashi Shinbara
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationMasashi Shinbara
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るMasashi Shinbara
 
Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインMasashi Shinbara
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!Masashi Shinbara
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Masashi Shinbara
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHPMasashi Shinbara
 

Mehr von Masashi Shinbara (16)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
 
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知るPHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
 
Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログイン
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
いまどきのPHP
いまどきのPHPいまどきのPHP
いまどきのPHP
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
サーバの防災訓練
サーバの防災訓練サーバの防災訓練
サーバの防災訓練
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHP
 

Kürzlich hochgeladen

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Kürzlich hochgeladen (8)

プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

もう 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