SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

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

What's hot (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を使ってみよう
 

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

VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門Masashi Shinbara
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfesTakeshi Komiya
 
Vagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようVagrantと網元で開発環境を作ってみよう
Vagrantと網元で開発環境を作ってみようTakuma Morikawa
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会20130803 OSC@Kyoto CloudStackユーザー会
20130803 OSC@Kyoto CloudStackユーザー会samemoon
 
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.1Kotaro Noyama
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0NIFTY Cloud
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響Masahito Zembutsu
 
はてなのサービスの開発環境
はてなのサービスの開発環境はてなのサービスの開発環境
はてなのサービスの開発環境ast_j
 
ローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + Vagrantローカル開発環境の構築をしよう VirtualBox + Vagrant
ローカル開発環境の構築をしよう VirtualBox + VagrantKazuma Kimura
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話Masaki Kobayashi
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話Tsuyoshi Torii
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 

Similar to 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の作成
 

More from Masashi Shinbara

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

More from 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
 

Recently uploaded

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (10)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
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
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

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