PHPカンファレンス2013でPHP開発環境をVagrantで作る発表を行ったのですが、具体的なVagrantfileが欲しいという声を頂いたので、GitHubに公開しました。
ご自身で構築するベースになれば良いと思うので、どう作れば良いの?と言う方は参考にしてみて下さい。
なお、このリポジトリの Vagrantfile は、開発PC内の VirtualBox 上で開発環境として動かすことを想定しています。セキュリティについては考慮されていないのでご注意下さい。
vagrant-lapp-sample
https://github.com/shin1x1/vagrant-lapp-sample
このリポジトリは、PHPアプリケーション(CakePHP)をイメージしています。構成は以下です。
- CentOS 6.4
- Apache 2.2
- PHP 5.4
- PostgreSQL 9.3
- phpPgAdmin
ディレクトリ構成としては、app/ がアプリケーションのコードを置くディレクトリで、vagrant/ に Vagrant のファイルを置くイメージです。
app/ には、サンプルとして CakePHP アプリケーションを置いています。(cake bake project したもの)
使い方
git clone でプロジェクトのコードを取得して、あとは vagrant ディレクトリ で、vagrant up を実行するだけです。
$ git clone https://github.com/shin1x1/vagrant-lapp-sample $ cd vagrant-lapp-sample/vagrant $ vagrant up
アプリケーションへのアクセス
ブラウザから http://192.168.33.30/
にアクセスすると、PHPアプリケーションを実行することができます。
phpPgAdminへのアクセス
ブラウザから http://192.168.33.30/phpPgAdmin/
にアクセスすると、phpPgAdmin を利用できます。ユーザは vagrant、パスワードは pass です。(厳密にはパスワードは何でも ok です)
ポイント
synced_folder
このリポジトリのルートディレクトリ( app/ があるディレクトリ)を synced_folder に設定しており、仮想マシンからは /share でアクセスすることができます。
つまり、ホストPCで app/webroot/index.php というファイル編集すると、仮想マシンでは /share/app/webroot/index.php のファイルが自動で更新されます。
ドキュメントルート
Apache のドキュメントルートは、/share/app/webroot に設定しています。
これは vagrant/httpd.conf で設定しており、プロビジョニング実行時に /etc/httpd/conf/httpd.conf に上書きされます。変更が必要であれば、vagrant/httpd.conf を編集して、vagrant provision でプロビジョニングを再実行すると良いでしょう。
なお php.ini も同様に vagrant/php.ini を用意しています。
設定ファイルの準備
Apache や PHP などの設定ファイルを準備する際は、下記手順で行っています。
仮想マシン内での /vagrant ディレクトリが、ホストPCでは Vagrantfile があるディレクトリと synced_folder になっているのがポイントです。
- まずが vagrant up で仮想マシンを起動
- vagrant ssh でログインして、yum で対象パッケージをインストール
- 設定ファイルを変更、動作確認
- cp -a /etc/http/conf/http.conf /vagrant/
- ホスト PC の variant/ に httpd.conf がコピーされる
- プロビジョニングで、/vagrant/httpd.conf を /etc/httpd/conf/ にコピーするコードを書いておく
データベース
この Vagrantfile では、データベースの構築は行っていますが、アプリケーションで必要なテーブル定義などは行っていません。
このあたりはプロジェクトによって方法が異なると思いますが、フレームワークやライブラリ等でマイグレーション機能があればそちらを、無ければ dmp ファイルを適用するコマンドをプロビジョニングで記述することになります。
( PostgreSQL であれば、 psql -Uvagrant app < pgsql.dmp など。)
シェルプロビジョニング
プロビジョニングには、シェルを使っています。
普段、サーバにSSHログインして yum や apt-get などでインストールしているコマンドをそのまま Vagrantfile に記述していくだけなので、簡単に書けるのが利点です。
Chef や Puppet、Ansible などのプロビジョニングツールを利用しても良いのですが、以前にこういったツールを使ったことが無いのであれば、まずはシェルで構築してみて、次の段階として好みのプロビジョニングツールを試してみるがおすすめです。(もちろん、一気にプロビジョニングツールを使いたい方はその方法でも問題ありません。)
Composer
composer.json が存在すれば、composer.phar をダウンロードして、composer install を実行するようにしています。
このリポジトリでは、CakePHP と PHPUnit を Composer でインストールしています。