SlideShare uma empresa Scribd logo
1 de 68
2013/09/14 shin1x1
PHPカンファレンス 2013
Vagrant で作る
PHP 開発環境
[実践編]
Vagrant?
(c) 2013 Masashi Shinbara @shin1x1
Vagrantで作るPHP開発環境
(c) 2013 Masashi Shinbara @shin1x1
http://www.slideshare.net/shin1x1/xampp-mamp-vagrant-php
Vagrant 覚えておきたい用語
(c) 2013 Masashi Shinbara @shin1x1
•Boxファイル
=> 仮想マシンイメージファイル
•Vagrantfile
=> 仮想マシン構築設定
•vagrantコマンド
=> 全ての操作はこのコマンドで
(c) 2013 Masashi Shinbara @shin1x1
Vagrantについては
http://www.amazon.co.jp/dp/B00F418SQ8
Agenda
(c) 2013 Masashi Shinbara @shin1x1
• PHP 開発環境を構築
• クラウド環境も構築
• Vagrant が見せる夢
(c) 2013 Masashi Shinbara @shin1x1
PHP開発環境
開発環境
(c) 2013 Masashi Shinbara @shin1x1
• Web + DBプロジェクト
• PHP + Apache + PostgreSQL
• CentOS6.4
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
$ git clone repos
ホストPC
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
仮想マシン
$ vagrant up
ホストPC
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
仮想マシン
ホストPC
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
仮想マシン
ホストPC
これを目指す
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
$ git clone repos
ホストPC
Vagrantfileの管理
(c) 2013 Masashi Shinbara @shin1x1
• Vagrantfileはプロジェクトごと
• ソースと一緒に Git で管理する
• .vagrant は .gitignore へ
(c) 2013 Masashi Shinbara @shin1x1
ファイル構成
$ tree /path/to/project
.
!"" app
!"" composer.json
!"" composer.lock
!"" 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
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
仮想マシン
$ vagrant up
ホストPC
(c) 2013 Masashi Shinbara @shin1x1
vagrant up
1. 仮想マシン構築、起動、OS起動
2. PHP, Apache, DB インストール
3. DB 構築, データ投入
4. アプリケーションデプロイ
(c) 2013 Masashi Shinbara @shin1x1
vagrant up
プロバイダ
1. 仮想マシン構築、起動、OS起動
2. PHP, Apache, DB インストール
3. DB 構築, データ投入
4. アプリケーションデプロイ
仮想マシン構築、起動
(c) 2013 Masashi Shinbara @shin1x1
config.vm.box = "centos64_ja"
• Box ファイル名
config.vm.network :private_network, ip: "192.168.33.30"
• IPアドレス
config.vm.network :forwarded_port, guest: 80, host: 8080
• ポートフォワード
仮想マシン構築、起動
(c) 2013 Masashi Shinbara @shin1x1
config.vm.provider :virtualbox do |vb|
# GUI or Headless
vb.gui = true
# memory = 1024MB
vb.customize ["modifyvm", :id, "--memory", 1024]
end
• プロバイダ(VirtualBox)
(c) 2013 Masashi Shinbara @shin1x1
vagrant up
1. 仮想マシン構築、起動、OS起動
2. PHP, Apache, DB インストール
3. DB 構築, データ投入
4. アプリケーションデプロイ
プロビジョニング
プロビジョニング
(c) 2013 Masashi Shinbara @shin1x1
• Chef, Puppet, Ansible...
• 色々あるけど
• まずは シェル で
プロビジョニング
(c) 2013 Masashi Shinbara @shin1x1
http://docs.vagrantup.com/v2/provisioning/chef_solo.html
Warning: If you're not familiar with Chef andVagrant
already, I recommend starting with the shell provisioner.
However, if you're comfortable withVagrant already,
Vagrant is the best way to learn Chef.
シェル
(c) 2013 Masashi Shinbara @shin1x1
config.vm.provision :shell, inline: "echo 'Hello!'"
• シェル(インライン)
config.vm.provision :shell, path: "script.sh"
• シェル(外部ファイル)
config.vm.provision :shell, inline: <<-EOT
/sbin/service iptables stop
/sbin/chkconfig iptables off
EOT
• シェル(インライン複数行)
シェル
(c) 2013 Masashi Shinbara @shin1x1
• yumリポジトリ
config.vm.provision :shell, inline: <<-EOT
#
# yum repository
#
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 update
シェル
(c) 2013 Masashi Shinbara @shin1x1
• PHP
#
# php
#
yum -y install php54 php54-cli php54-pdo php54-mbstring
php54-mcrypt php54-pecl-memcache php54-mysql php54-devel
php54-common php54-pgsql php54-pear php54-gd php54-xml php54-
pecl-xdebug php54-pecl-apc
touch /var/log/php.log && chmod 666 /var/log/php.log
cp -a /vagrant/php.ini /etc/php.ini
用意した php.ini で上書き
シェル
(c) 2013 Masashi Shinbara @shin1x1
•Apache
#
# Apache
#
cp -a /vagrant/httpd.conf /etc/httpd/conf/
/sbin/service httpd start
/sbin/chkconfig httpd on
#
用意した httpd.conf で上書き
シェル
(c) 2013 Masashi Shinbara @shin1x1
•PostgreSQL
#
# PostgreSQL
#
yum -y install postgresql-server
/sbin/service postgresql start
/sbin/chkconfig postgresql on
if [ ! -d /var/lib/pgsql/data ]; then
su postgres -c 'initdb --no-locale -D /var/lib/pgsql/
data'
cp -a /vargrant/postgresql.conf /var/lib/pgsql/data/
createuser -Upostgres -d -S -R -A vagrant
createdb -Uvagrant -E UTF-8 -T template0 app
psql -Uvagrant app < /share/pgsql.dmp
fi
初期のみDB構築
シェル
(c) 2013 Masashi Shinbara @shin1x1
•Composer
#
# Composer
#
cd /share/
curl -s http://getcomposer.org/installer | php
./composer.phar install
シェルの利点
(c) 2013 Masashi Shinbara @shin1x1
• 習得が簡単(普段やってるまんま)
• なんでもできる(PHPも実行可)
• Vagrantfile に全て書ける
シェル
(c) 2013 Masashi Shinbara @shin1x1
冪等性は?
シェルでの冪等性は?
(c) 2013 Masashi Shinbara @shin1x1
• if / test で、ある程度可能
• yum install は再インストールして
もエラーにならない
• 開発環境らしい割り切りも
(destroy && up)
(c) 2013 Masashi Shinbara @shin1x1
1. 仮想マシン構築、起動、OS起動
2. PHP, Apache, DB インストール
3. DB 構築, データ投入
4. アプリケーションデプロイ
vagrant up
synced_folder
(c) 2013 Masashi Shinbara @shin1x1
•ホストPCのディレクトリと
仮想サーバのディレクトリを同期
•開発はホストPCで、
実行は仮想サーバで
•PhpStormやEclipseで開発可能
synced_folder
(c) 2013 Masashi Shinbara @shin1x1
config.vm.synced_folder "../", "/share", 
create: true, owner: 'vagrant', group: 'vagrant', 
mount_options: ['dmode=777,fmode=666']
•ホストPC: ../と 仮想サーバ: /share を共有
•仮想サーバに /share が無ければ自動生成
•/share は vagrant を owner / group に
•/share 以下のパーミッションは ディレクトリが777、ファイルが
666
synced_folder
(c) 2013 Masashi Shinbara @shin1x1
synced_folder
$ ls ../
app/ lib/ composer.phar
$ ls /share/
app/ lib/ composer.phar
ホストPC
仮想マシン
(c) 2013 Masashi Shinbara @shin1x1
synced_folder
<?php
$foo = Foo::foo();
<?php
$foo = Foo::foo();
ホストPC
仮想マシン
PHPコード変更
自動で同期
synced_folder 注意点
(c) 2013 Masashi Shinbara @shin1x1
•仮想サーバでの権限変更が反映されない
•ホストPCでファイルが多いディレクトリは避ける
•仮想サーバでのディスクアクセスは遅い
=> アプリケーションで大量のディスクIOが
発生する場合は synced_folder 以外の
領域を利用する
(c) 2013 Masashi Shinbara @shin1x1
synced_folder + NFS
• ホストPCでnfsdを実行
• 仮想マシンからNFSマウント
• 高パフォーマンス / パーミッション
• トラブルもしばしば
(c) 2013 Masashi Shinbara @shin1x1
synced_folder + NFS
config.vm.synced_folder "../", "/share", nfs: true
• NFS synced_folder
(c) 2013 Masashi Shinbara @shin1x1
/vagrant
config.vm.synced_folder ".", "/vagrant"
• 実は、Vagrantfile があるディレクトリは
synced_folder
•仮想マシンでは /vagrant でアクセスできる
イメージとしては
/vagrant
(c) 2013 Masashi Shinbara @shin1x1
$ ls
Vagrantfile httpd.conf
$ vagrant up
$ ls /vagrant
Vagrantfile httpd.conf
ホストPC
仮想マシン
/vagrant
(c) 2013 Masashi Shinbara @shin1x1
$ cp /etc/php.ini /vagrant
$ ls
Vagrantfile php.ini
ホストPC
仮想マシン
(c) 2013 Masashi Shinbara @shin1x1
クラウド環境構築
(c) 2013 Masashi Shinbara @shin1x1
AWSに環境構築
• EC2インスタンス起動
• プロビジョニング実行
• テストサーバとして公開できる
• 場合によっては、本番公開も
AWS プロバイダ
(c) 2013 Masashi Shinbara @shin1x1
$ vagrant plugin install vagrant-aws
•インストール
$ vagrant box add dummy https://
github.com/mitchellh/vagrant-aws/raw/
master/dummy.box
•dummy Boxファイル追加
AWS プロバイダ
(c) 2013 Masashi Shinbara @shin1x1
c.vm.provider :aws do |aws, override|
aws.access_key_id = ENV['AWS_ACCESS_KEY_ID']
aws.secret_access_key = ENV['AWS_SECRET_KEY']
aws.availability_zone = "ap-northeast-1c"
aws.instance_ready_timeout = 300
aws.instance_type = "t1.micro"
aws.region = "ap-northeast-1"
aws.ami = "ami-xxxxxxx"
aws.security_groups = ["web"]
aws.keypair_name = "xxxxx"
aws.tags = {
'Name' => 'vagrant_phpcon',
}
override.ssh.username = "vagrant"
override.ssh.private_key_path = "~/.ssh/id_rsa"
end
AWSの設定
AWS プロバイダ
(c) 2013 Masashi Shinbara @shin1x1
$ vagrant up --provider=aws
•インスタンス起動
ポイント
(c) 2013 Masashi Shinbara @shin1x1
•APIキーなどはVagrantfileには書かない
=> 環境変数などで取得
•synced_folderは、rsyncで同期
=> vagrant provision でデプロイできる
(c) 2013 Masashi Shinbara @shin1x1
Vagrantで
環境構築
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
$ git clone repos
ホストPC
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
仮想マシン
$ vagrant up
ホストPC
Vagrantで環境構築
(c) 2013 Masashi Shinbara @shin1x1
仮想マシン
ホストPC
$ vagrant up aws
--provider=aws
(c) 2013 Masashi Shinbara @shin1x1
Vagrantが
見せる夢
Vagrant 使って良かった点
(c) 2013 Masashi Shinbara @shin1x1
• プロジェクト毎に異なる環境にできる
• CI によるテスト実行環境にも
• いつでも構築できる安心感
Vagrant 使って良かった点
(c) 2013 Masashi Shinbara @shin1x1
• プロジェクト毎に独立した環境
• CI によるテスト実行環境にも
• いつでも構築できる安心感
プロジェクトごとに作成
(c) 2013 Masashi Shinbara @shin1x1
ホストPC
プロジェクトA
PHP 5.1.6
PostgreSQL 8.2
プロジェクトB
PHP 5.3.27
PostgreSQL 9.2
プロジェクトC
PHP 5.4.17
MySQL 5.5
Vagrant 使って良かった点
(c) 2013 Masashi Shinbara @shin1x1
• プロジェクト毎に異なる環境にできる
• CI によるテスト実行環境にも
• いつでも構築できる安心感
CIサーバでも使える
(c) 2013 Masashi Shinbara @shin1x1
プロジェクトA
PHP 5.1.6
PostgreSQL 8.2
プロジェクトB
PHP 5.3.27
PostgreSQL 9.2
プロジェクトC
PHP 5.4.17
MySQL 5.5
CIサーバ
Vagrant 使って良かった点
(c) 2013 Masashi Shinbara @shin1x1
• プロジェクト毎に異なる環境にできる
• CI によるテスト実行環境にも
• いつでも構築できる安心感
いつでも構築できる安心感
(c) 2013 Masashi Shinbara @shin1x1
• 壊れても安心。また作れば良い
• 他の人(未来の自分)も構築できる
• 秘伝のタレのようなVMは作らない
Vagrantが見せる夢
(c) 2013 Masashi Shinbara @shin1x1
• クリーンで自由に使える環境を
誰もが簡単に手にすることができる
• より多くの人がPHPに
触れることができる
Summary
(c) 2013 Masashi Shinbara @shin1x1
• Vagrantfile はプロジェクトごと
• vagrant up で、使える環境にする
• AWSなどクラウド環境にも使える
@shin1x1
(c) 2013 Masashi Shinbara @shin1x1
(c) 2013 Masashi Shinbara @shin1x1
One more thing
(c) 2013 Masashi Shinbara @shin1x1
黒い画面はいや!
(c) 2013 Masashi Shinbara @shin1x1
絶賛開発中
(近日公開予定)
Mac OS X 用
GUIアプリ
VagrantX

Mais conteúdo relacionado

Mais procurados

Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
Masashi Shinbara
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
Daijiro Abe
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
Takeshi Komiya
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
Sugawara Genki
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
 

Mais procurados (20)

Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Azure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーションAzure Websites で作るスケーラブルな PHP アプリケーション
Azure Websites で作るスケーラブルな PHP アプリケーション
 
Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
いまどきのPHP
いまどきのPHPいまどきのPHP
いまどきのPHP
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
 
Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログイン
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前
 
Pythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapacPythonユーザのための構成管理入門 #pyconapac
Pythonユーザのための構成管理入門 #pyconapac
 
AWSをコードで定義する
AWSをコードで定義するAWSをコードで定義する
AWSをコードで定義する
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
Symfony Dump Server のご紹介
Symfony Dump Server のご紹介Symfony Dump Server のご紹介
Symfony Dump Server のご紹介
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chef
 
コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry
 
Dockerを使ってみよう
Dockerを使ってみようDockerを使ってみよう
Dockerを使ってみよう
 

Semelhante a Vagrant で作る PHP 開発環境 [実践編]

3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会
samemoon
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
NIFTY Cloud
 

Semelhante a Vagrant で作る PHP 開発環境 [実践編] (20)

VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
Vagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようVagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみよう
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境
 
Open VZ
Open VZOpen VZ
Open VZ
 
ローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrantローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrant
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
Kansai mrb gr_sakura
Kansai mrb gr_sakuraKansai mrb gr_sakura
Kansai mrb gr_sakura
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 

Mais de Masashi Shinbara

Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
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 Authentication
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分で分かる最近のCakePHP
Masashi Shinbara
 

Mais de Masashi Shinbara (13)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
先取り!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コードの「書き方」を知る
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
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
 

Último

Último (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

Vagrant で作る PHP 開発環境 [実践編]

  • 2. Vagrant? (c) 2013 Masashi Shinbara @shin1x1
  • 3. Vagrantで作るPHP開発環境 (c) 2013 Masashi Shinbara @shin1x1 http://www.slideshare.net/shin1x1/xampp-mamp-vagrant-php
  • 4. Vagrant 覚えておきたい用語 (c) 2013 Masashi Shinbara @shin1x1 •Boxファイル => 仮想マシンイメージファイル •Vagrantfile => 仮想マシン構築設定 •vagrantコマンド => 全ての操作はこのコマンドで
  • 5. (c) 2013 Masashi Shinbara @shin1x1 Vagrantについては http://www.amazon.co.jp/dp/B00F418SQ8
  • 6. Agenda (c) 2013 Masashi Shinbara @shin1x1 • PHP 開発環境を構築 • クラウド環境も構築 • Vagrant が見せる夢
  • 7. (c) 2013 Masashi Shinbara @shin1x1 PHP開発環境
  • 8. 開発環境 (c) 2013 Masashi Shinbara @shin1x1 • Web + DBプロジェクト • PHP + Apache + PostgreSQL • CentOS6.4
  • 9. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 $ git clone repos ホストPC
  • 10. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン $ vagrant up ホストPC
  • 11. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン ホストPC
  • 12. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン ホストPC これを目指す
  • 13. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 $ git clone repos ホストPC
  • 14. Vagrantfileの管理 (c) 2013 Masashi Shinbara @shin1x1 • Vagrantfileはプロジェクトごと • ソースと一緒に Git で管理する • .vagrant は .gitignore へ
  • 15. (c) 2013 Masashi Shinbara @shin1x1 ファイル構成 $ tree /path/to/project . !"" app !"" composer.json !"" composer.lock !"" index.php !"" lib !"" plugins #"" vendors #"" vagrant    !"" .gitignore    !"" .vagrant    #"" Vagrantfile アプリケーション Vagrant Git で管理
  • 16. (c) 2013 Masashi Shinbara @shin1x1 $ cd vagrant $ cat .gitignore .vagrant .vagrant/ は仮想サーバ固有の id が 保存されているので Git で管理しない .gitignore
  • 17. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン $ vagrant up ホストPC
  • 18. (c) 2013 Masashi Shinbara @shin1x1 vagrant up 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ
  • 19. (c) 2013 Masashi Shinbara @shin1x1 vagrant up プロバイダ 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ
  • 20. 仮想マシン構築、起動 (c) 2013 Masashi Shinbara @shin1x1 config.vm.box = "centos64_ja" • Box ファイル名 config.vm.network :private_network, ip: "192.168.33.30" • IPアドレス config.vm.network :forwarded_port, guest: 80, host: 8080 • ポートフォワード
  • 21. 仮想マシン構築、起動 (c) 2013 Masashi Shinbara @shin1x1 config.vm.provider :virtualbox do |vb| # GUI or Headless vb.gui = true # memory = 1024MB vb.customize ["modifyvm", :id, "--memory", 1024] end • プロバイダ(VirtualBox)
  • 22. (c) 2013 Masashi Shinbara @shin1x1 vagrant up 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ プロビジョニング
  • 23. プロビジョニング (c) 2013 Masashi Shinbara @shin1x1 • Chef, Puppet, Ansible... • 色々あるけど • まずは シェル で
  • 24. プロビジョニング (c) 2013 Masashi Shinbara @shin1x1 http://docs.vagrantup.com/v2/provisioning/chef_solo.html Warning: If you're not familiar with Chef andVagrant already, I recommend starting with the shell provisioner. However, if you're comfortable withVagrant already, Vagrant is the best way to learn Chef.
  • 25. シェル (c) 2013 Masashi Shinbara @shin1x1 config.vm.provision :shell, inline: "echo 'Hello!'" • シェル(インライン) config.vm.provision :shell, path: "script.sh" • シェル(外部ファイル) config.vm.provision :shell, inline: <<-EOT /sbin/service iptables stop /sbin/chkconfig iptables off EOT • シェル(インライン複数行)
  • 26. シェル (c) 2013 Masashi Shinbara @shin1x1 • yumリポジトリ config.vm.provision :shell, inline: <<-EOT # # yum repository # 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 update
  • 27. シェル (c) 2013 Masashi Shinbara @shin1x1 • PHP # # php # yum -y install php54 php54-cli php54-pdo php54-mbstring php54-mcrypt php54-pecl-memcache php54-mysql php54-devel php54-common php54-pgsql php54-pear php54-gd php54-xml php54- pecl-xdebug php54-pecl-apc touch /var/log/php.log && chmod 666 /var/log/php.log cp -a /vagrant/php.ini /etc/php.ini 用意した php.ini で上書き
  • 28. シェル (c) 2013 Masashi Shinbara @shin1x1 •Apache # # Apache # cp -a /vagrant/httpd.conf /etc/httpd/conf/ /sbin/service httpd start /sbin/chkconfig httpd on # 用意した httpd.conf で上書き
  • 29. シェル (c) 2013 Masashi Shinbara @shin1x1 •PostgreSQL # # PostgreSQL # yum -y install postgresql-server /sbin/service postgresql start /sbin/chkconfig postgresql on if [ ! -d /var/lib/pgsql/data ]; then su postgres -c 'initdb --no-locale -D /var/lib/pgsql/ data' cp -a /vargrant/postgresql.conf /var/lib/pgsql/data/ createuser -Upostgres -d -S -R -A vagrant createdb -Uvagrant -E UTF-8 -T template0 app psql -Uvagrant app < /share/pgsql.dmp fi 初期のみDB構築
  • 30. シェル (c) 2013 Masashi Shinbara @shin1x1 •Composer # # Composer # cd /share/ curl -s http://getcomposer.org/installer | php ./composer.phar install
  • 31. シェルの利点 (c) 2013 Masashi Shinbara @shin1x1 • 習得が簡単(普段やってるまんま) • なんでもできる(PHPも実行可) • Vagrantfile に全て書ける
  • 32. シェル (c) 2013 Masashi Shinbara @shin1x1 冪等性は?
  • 33. シェルでの冪等性は? (c) 2013 Masashi Shinbara @shin1x1 • if / test で、ある程度可能 • yum install は再インストールして もエラーにならない • 開発環境らしい割り切りも (destroy && up)
  • 34. (c) 2013 Masashi Shinbara @shin1x1 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ vagrant up synced_folder
  • 35. (c) 2013 Masashi Shinbara @shin1x1 •ホストPCのディレクトリと 仮想サーバのディレクトリを同期 •開発はホストPCで、 実行は仮想サーバで •PhpStormやEclipseで開発可能 synced_folder
  • 36. (c) 2013 Masashi Shinbara @shin1x1 config.vm.synced_folder "../", "/share", create: true, owner: 'vagrant', group: 'vagrant', mount_options: ['dmode=777,fmode=666'] •ホストPC: ../と 仮想サーバ: /share を共有 •仮想サーバに /share が無ければ自動生成 •/share は vagrant を owner / group に •/share 以下のパーミッションは ディレクトリが777、ファイルが 666 synced_folder
  • 37. (c) 2013 Masashi Shinbara @shin1x1 synced_folder $ ls ../ app/ lib/ composer.phar $ ls /share/ app/ lib/ composer.phar ホストPC 仮想マシン
  • 38. (c) 2013 Masashi Shinbara @shin1x1 synced_folder <?php $foo = Foo::foo(); <?php $foo = Foo::foo(); ホストPC 仮想マシン PHPコード変更 自動で同期
  • 39. synced_folder 注意点 (c) 2013 Masashi Shinbara @shin1x1 •仮想サーバでの権限変更が反映されない •ホストPCでファイルが多いディレクトリは避ける •仮想サーバでのディスクアクセスは遅い => アプリケーションで大量のディスクIOが 発生する場合は synced_folder 以外の 領域を利用する
  • 40. (c) 2013 Masashi Shinbara @shin1x1 synced_folder + NFS • ホストPCでnfsdを実行 • 仮想マシンからNFSマウント • 高パフォーマンス / パーミッション • トラブルもしばしば
  • 41. (c) 2013 Masashi Shinbara @shin1x1 synced_folder + NFS config.vm.synced_folder "../", "/share", nfs: true • NFS synced_folder
  • 42. (c) 2013 Masashi Shinbara @shin1x1 /vagrant config.vm.synced_folder ".", "/vagrant" • 実は、Vagrantfile があるディレクトリは synced_folder •仮想マシンでは /vagrant でアクセスできる イメージとしては
  • 43. /vagrant (c) 2013 Masashi Shinbara @shin1x1 $ ls Vagrantfile httpd.conf $ vagrant up $ ls /vagrant Vagrantfile httpd.conf ホストPC 仮想マシン
  • 44. /vagrant (c) 2013 Masashi Shinbara @shin1x1 $ cp /etc/php.ini /vagrant $ ls Vagrantfile php.ini ホストPC 仮想マシン
  • 45. (c) 2013 Masashi Shinbara @shin1x1 クラウド環境構築
  • 46. (c) 2013 Masashi Shinbara @shin1x1 AWSに環境構築 • EC2インスタンス起動 • プロビジョニング実行 • テストサーバとして公開できる • 場合によっては、本番公開も
  • 47. AWS プロバイダ (c) 2013 Masashi Shinbara @shin1x1 $ vagrant plugin install vagrant-aws •インストール $ vagrant box add dummy https:// github.com/mitchellh/vagrant-aws/raw/ master/dummy.box •dummy Boxファイル追加
  • 48. AWS プロバイダ (c) 2013 Masashi Shinbara @shin1x1 c.vm.provider :aws do |aws, override| aws.access_key_id = ENV['AWS_ACCESS_KEY_ID'] aws.secret_access_key = ENV['AWS_SECRET_KEY'] aws.availability_zone = "ap-northeast-1c" aws.instance_ready_timeout = 300 aws.instance_type = "t1.micro" aws.region = "ap-northeast-1" aws.ami = "ami-xxxxxxx" aws.security_groups = ["web"] aws.keypair_name = "xxxxx" aws.tags = { 'Name' => 'vagrant_phpcon', } override.ssh.username = "vagrant" override.ssh.private_key_path = "~/.ssh/id_rsa" end AWSの設定
  • 49. AWS プロバイダ (c) 2013 Masashi Shinbara @shin1x1 $ vagrant up --provider=aws •インスタンス起動
  • 50. ポイント (c) 2013 Masashi Shinbara @shin1x1 •APIキーなどはVagrantfileには書かない => 環境変数などで取得 •synced_folderは、rsyncで同期 => vagrant provision でデプロイできる
  • 51. (c) 2013 Masashi Shinbara @shin1x1 Vagrantで 環境構築
  • 52. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 $ git clone repos ホストPC
  • 53. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン $ vagrant up ホストPC
  • 54. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン ホストPC $ vagrant up aws --provider=aws
  • 55. (c) 2013 Masashi Shinbara @shin1x1 Vagrantが 見せる夢
  • 56. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に異なる環境にできる • CI によるテスト実行環境にも • いつでも構築できる安心感
  • 57. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境 • CI によるテスト実行環境にも • いつでも構築できる安心感
  • 58. プロジェクトごとに作成 (c) 2013 Masashi Shinbara @shin1x1 ホストPC プロジェクトA PHP 5.1.6 PostgreSQL 8.2 プロジェクトB PHP 5.3.27 PostgreSQL 9.2 プロジェクトC PHP 5.4.17 MySQL 5.5
  • 59. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に異なる環境にできる • CI によるテスト実行環境にも • いつでも構築できる安心感
  • 60. CIサーバでも使える (c) 2013 Masashi Shinbara @shin1x1 プロジェクトA PHP 5.1.6 PostgreSQL 8.2 プロジェクトB PHP 5.3.27 PostgreSQL 9.2 プロジェクトC PHP 5.4.17 MySQL 5.5 CIサーバ
  • 61. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に異なる環境にできる • CI によるテスト実行環境にも • いつでも構築できる安心感
  • 62. いつでも構築できる安心感 (c) 2013 Masashi Shinbara @shin1x1 • 壊れても安心。また作れば良い • 他の人(未来の自分)も構築できる • 秘伝のタレのようなVMは作らない
  • 63. Vagrantが見せる夢 (c) 2013 Masashi Shinbara @shin1x1 • クリーンで自由に使える環境を 誰もが簡単に手にすることができる • より多くの人がPHPに 触れることができる
  • 64. Summary (c) 2013 Masashi Shinbara @shin1x1 • Vagrantfile はプロジェクトごと • vagrant up で、使える環境にする • AWSなどクラウド環境にも使える
  • 65. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1
  • 66. (c) 2013 Masashi Shinbara @shin1x1 One more thing
  • 67. (c) 2013 Masashi Shinbara @shin1x1 黒い画面はいや!
  • 68. (c) 2013 Masashi Shinbara @shin1x1 絶賛開発中 (近日公開予定) Mac OS X 用 GUIアプリ VagrantX