Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

30,093 views

Published on

2013/0915 PHPカンファレンス2013での発表資料です。
http://www.1x1.jp/blog/2013/09/php-enviroment-with-vagrant.html

Published in: Technology
  • Be the first to comment

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

  1. 1. 2013/09/14 shin1x1 PHPカンファレンス 2013 Vagrant で作る PHP 開発環境 [実践編]
  2. 2. Vagrant? (c) 2013 Masashi Shinbara @shin1x1
  3. 3. Vagrantで作るPHP開発環境 (c) 2013 Masashi Shinbara @shin1x1 http://www.slideshare.net/shin1x1/xampp-mamp-vagrant-php
  4. 4. Vagrant 覚えておきたい用語 (c) 2013 Masashi Shinbara @shin1x1 •Boxファイル => 仮想マシンイメージファイル •Vagrantfile => 仮想マシン構築設定 •vagrantコマンド => 全ての操作はこのコマンドで
  5. 5. (c) 2013 Masashi Shinbara @shin1x1 Vagrantについては http://www.amazon.co.jp/dp/B00F418SQ8
  6. 6. Agenda (c) 2013 Masashi Shinbara @shin1x1 • PHP 開発環境を構築 • クラウド環境も構築 • Vagrant が見せる夢
  7. 7. (c) 2013 Masashi Shinbara @shin1x1 PHP開発環境
  8. 8. 開発環境 (c) 2013 Masashi Shinbara @shin1x1 • Web + DBプロジェクト • PHP + Apache + PostgreSQL • CentOS6.4
  9. 9. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 $ git clone repos ホストPC
  10. 10. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン $ vagrant up ホストPC
  11. 11. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン ホストPC
  12. 12. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン ホストPC これを目指す
  13. 13. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 $ git clone repos ホストPC
  14. 14. Vagrantfileの管理 (c) 2013 Masashi Shinbara @shin1x1 • Vagrantfileはプロジェクトごと • ソースと一緒に Git で管理する • .vagrant は .gitignore へ
  15. 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. 16. (c) 2013 Masashi Shinbara @shin1x1 $ cd vagrant $ cat .gitignore .vagrant .vagrant/ は仮想サーバ固有の id が 保存されているので Git で管理しない .gitignore
  17. 17. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン $ vagrant up ホストPC
  18. 18. (c) 2013 Masashi Shinbara @shin1x1 vagrant up 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ
  19. 19. (c) 2013 Masashi Shinbara @shin1x1 vagrant up プロバイダ 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ
  20. 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. 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. 22. (c) 2013 Masashi Shinbara @shin1x1 vagrant up 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ プロビジョニング
  23. 23. プロビジョニング (c) 2013 Masashi Shinbara @shin1x1 • Chef, Puppet, Ansible... • 色々あるけど • まずは シェル で
  24. 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. 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. 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. 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. 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. 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. 30. シェル (c) 2013 Masashi Shinbara @shin1x1 •Composer # # Composer # cd /share/ curl -s http://getcomposer.org/installer | php ./composer.phar install
  31. 31. シェルの利点 (c) 2013 Masashi Shinbara @shin1x1 • 習得が簡単(普段やってるまんま) • なんでもできる(PHPも実行可) • Vagrantfile に全て書ける
  32. 32. シェル (c) 2013 Masashi Shinbara @shin1x1 冪等性は?
  33. 33. シェルでの冪等性は? (c) 2013 Masashi Shinbara @shin1x1 • if / test で、ある程度可能 • yum install は再インストールして もエラーにならない • 開発環境らしい割り切りも (destroy && up)
  34. 34. (c) 2013 Masashi Shinbara @shin1x1 1. 仮想マシン構築、起動、OS起動 2. PHP, Apache, DB インストール 3. DB 構築, データ投入 4. アプリケーションデプロイ vagrant up synced_folder
  35. 35. (c) 2013 Masashi Shinbara @shin1x1 •ホストPCのディレクトリと 仮想サーバのディレクトリを同期 •開発はホストPCで、 実行は仮想サーバで •PhpStormやEclipseで開発可能 synced_folder
  36. 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. 37. (c) 2013 Masashi Shinbara @shin1x1 synced_folder $ ls ../ app/ lib/ composer.phar $ ls /share/ app/ lib/ composer.phar ホストPC 仮想マシン
  38. 38. (c) 2013 Masashi Shinbara @shin1x1 synced_folder <?php $foo = Foo::foo(); <?php $foo = Foo::foo(); ホストPC 仮想マシン PHPコード変更 自動で同期
  39. 39. synced_folder 注意点 (c) 2013 Masashi Shinbara @shin1x1 •仮想サーバでの権限変更が反映されない •ホストPCでファイルが多いディレクトリは避ける •仮想サーバでのディスクアクセスは遅い => アプリケーションで大量のディスクIOが 発生する場合は synced_folder 以外の 領域を利用する
  40. 40. (c) 2013 Masashi Shinbara @shin1x1 synced_folder + NFS • ホストPCでnfsdを実行 • 仮想マシンからNFSマウント • 高パフォーマンス / パーミッション • トラブルもしばしば
  41. 41. (c) 2013 Masashi Shinbara @shin1x1 synced_folder + NFS config.vm.synced_folder "../", "/share", nfs: true • NFS synced_folder
  42. 42. (c) 2013 Masashi Shinbara @shin1x1 /vagrant config.vm.synced_folder ".", "/vagrant" • 実は、Vagrantfile があるディレクトリは synced_folder •仮想マシンでは /vagrant でアクセスできる イメージとしては
  43. 43. /vagrant (c) 2013 Masashi Shinbara @shin1x1 $ ls Vagrantfile httpd.conf $ vagrant up $ ls /vagrant Vagrantfile httpd.conf ホストPC 仮想マシン
  44. 44. /vagrant (c) 2013 Masashi Shinbara @shin1x1 $ cp /etc/php.ini /vagrant $ ls Vagrantfile php.ini ホストPC 仮想マシン
  45. 45. (c) 2013 Masashi Shinbara @shin1x1 クラウド環境構築
  46. 46. (c) 2013 Masashi Shinbara @shin1x1 AWSに環境構築 • EC2インスタンス起動 • プロビジョニング実行 • テストサーバとして公開できる • 場合によっては、本番公開も
  47. 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. 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. 49. AWS プロバイダ (c) 2013 Masashi Shinbara @shin1x1 $ vagrant up --provider=aws •インスタンス起動
  50. 50. ポイント (c) 2013 Masashi Shinbara @shin1x1 •APIキーなどはVagrantfileには書かない => 環境変数などで取得 •synced_folderは、rsyncで同期 => vagrant provision でデプロイできる
  51. 51. (c) 2013 Masashi Shinbara @shin1x1 Vagrantで 環境構築
  52. 52. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 $ git clone repos ホストPC
  53. 53. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン $ vagrant up ホストPC
  54. 54. Vagrantで環境構築 (c) 2013 Masashi Shinbara @shin1x1 仮想マシン ホストPC $ vagrant up aws --provider=aws
  55. 55. (c) 2013 Masashi Shinbara @shin1x1 Vagrantが 見せる夢
  56. 56. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に異なる環境にできる • CI によるテスト実行環境にも • いつでも構築できる安心感
  57. 57. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に独立した環境 • CI によるテスト実行環境にも • いつでも構築できる安心感
  58. 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. 59. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に異なる環境にできる • CI によるテスト実行環境にも • いつでも構築できる安心感
  60. 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. 61. Vagrant 使って良かった点 (c) 2013 Masashi Shinbara @shin1x1 • プロジェクト毎に異なる環境にできる • CI によるテスト実行環境にも • いつでも構築できる安心感
  62. 62. いつでも構築できる安心感 (c) 2013 Masashi Shinbara @shin1x1 • 壊れても安心。また作れば良い • 他の人(未来の自分)も構築できる • 秘伝のタレのようなVMは作らない
  63. 63. Vagrantが見せる夢 (c) 2013 Masashi Shinbara @shin1x1 • クリーンで自由に使える環境を 誰もが簡単に手にすることができる • より多くの人がPHPに 触れることができる
  64. 64. Summary (c) 2013 Masashi Shinbara @shin1x1 • Vagrantfile はプロジェクトごと • vagrant up で、使える環境にする • AWSなどクラウド環境にも使える
  65. 65. @shin1x1 (c) 2013 Masashi Shinbara @shin1x1
  66. 66. (c) 2013 Masashi Shinbara @shin1x1 One more thing
  67. 67. (c) 2013 Masashi Shinbara @shin1x1 黒い画面はいや!
  68. 68. (c) 2013 Masashi Shinbara @shin1x1 絶賛開発中 (近日公開予定) Mac OS X 用 GUIアプリ VagrantX

×