Vagrant で Symfony2 の環境を構築する
Symfony2 を扱う必要が出てきたので構築のメモ
Vagrant の設定
下記の Vagrantfile を利用した
GitHub - simshaun/symfony-vagrant: Deprecated. Check out Puphpet.
こいつを、適当なフォルダ作ってぶちこむ。
$ cd /path/to/work/folder $ git clone --recursive git://github.com/simshaun/symfony-vagrant.git my_symfony_folder $ cd my_symfony_folder
Vagrantfile を覗くと、デフォルトだと上記で作ったフォルダが symfony のプロジェクトルートになっているっぽい。それだとREADMEとかが上書きされちゃうし、プロジェクトファイルが散らかっちゃって管理しにくいので、別のフォルダをつくってそこに入れた。Vagrantfile の web_apps をいじればいいっぽい。バーチャルホストも切れるっぽい。
# vagrant/Vagrantfile
web_apps = { - "project1" => { - "host_project_folder" => "../", - "guest_project_folder" => "/home/vagrant/web-app", - "guest_docroot" => "/home/vagrant/web-app/web", - "server_name" => "localhost", - "server_aliases" => ["*.localhost"], - "php_timezone" => "America/New_York" - } + "site1" => { + "host_project_folder" => "../app1/", + "guest_project_folder" => "/home/vagrant/site1", + "guest_docroot" => "/home/vagrant/site1/web", + "server_name" => "site1", + "server_aliases" => ["*.site1"], + "php_timezone" => "Asia/Tokyo" + }, + "site2" => { + "host_project_folder" => "../app2/", + "guest_project_folder" => "/home/vagrant/site2", + "guest_docroot" => "/home/vagrant/site2/web", + "server_name" => "site2", + "server_aliases" => ["*.site2"], + "php_timezone" => "Asia/Tokyo" + } }
上記のように変更したら、共有先のフォルダを作る。Composer で Symfony2 を落としてくる。
Composer のインストール
色々インストール方法はあるけど、今回はComposerを使うようにした。
$ curl -sS https://getcomposer.org/installer | php -d detect_unicode=Off # エラー回避するために detect_unicode=Off に $ sudo chmod 755 composer.phar $ sudo mv composer.phar /usr/local/bin/composer
Symfony2 インストール
上記で app1、app2 とフォルダを設定したので、それぞれについて composer を実行する
$ composer create-project symfony/framework-standard-edition app1 2.4.2 $ composer create-project symfony/framework-standard-edition app2 2.4.2
最後の2.4.2はSymfonyのバージョン。今は2.4.2が最新らしい。インストール中に色々聞かれるけど、基本的に全部デフォルトでいいかも。DB の設定とかはあとで直せるし。
仕上げ
もしバーチャルホストを切っていたら、ホスト側にその名前を追加しておく。上記の設定なら
33.33.33.10 site1 33.33.33.10 site2
そしてプロビジョニング。
$ cd vagrant
$ vagrant up
どうやら上記のVagrantfileは共有フォルダだけしか反映されないようなので、apache の conf ファイルを書き足す。下記は一例
# vagrant ssh
# sudo rm /etc/apache2/site-enabled/localhost.conf
# sudo vi /etc/apache2/site-enabled/app1.conf
<VirtualHost *:80> ServerName site1 ServerAlias *.site1 DocumentRoot /home/vagrant/site1/web LogLevel debug ErrorLog /home/vagrant/site1/app/logs/error.log CustomLog /home/vagrant/site1/app/logs/access.log combined RewriteEngine On RewriteLog /home/vagrant/site1/app/logs/rewrite.log RewriteLogLevel 0 php_value date.timezone Asia/Tokyo <Directory /home/vagrant/site1/web> php_admin_value upload_tmp_dir /tmp/site1 </Directory> </VirtualHost>
設定ファイルの配置ができたら apache 再起動
$ sudo service apache2 restart
で、http://site1/ にアクセスするとサイトが見れるはず。ssh しなくてもホスト側の app1 や app2 以下のファイルをいじれば反映される。
この際、Symfony の新規インストールの場合は config.php にアクセスすることで設定をするが、ホストからアクセスする場合はIP制限がかかっていて設定できないため、下記のファイルにホスト側のIPを追記しておく
# app1/web/config.php
if (!in_array(@$_SERVER['REMOTE_ADDR'], array( '33.33.33.1', //この辺を追加 '127.0.0.1', '::1', ))) {
# app1/web/app_dev.php
if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !in_array(@$_SERVER['REMOTE_ADDR'], array('33.33.33.1', '127.0.0.1', 'fe80::1', '::1')) // IP を追加 ) {
そして、http://site1/config.php とかにホスト側のブラウザでアクセスし、設定していく。基本的には composer から入れていればこのへんの設定はできているはず。
あとはこの状態で git リポジトリに登録しておく
$ cd app1 $ git init $ git add . $ git rm --cached -r src/Acme* # Demoアプリは含めない $ git commit -m 'initial commit'
Sass とか Compass とか使えるようにする
このへん を参考にした
$ vagrant ssh $ sudo gem install sass --no-ri --no-rdoc $ sudo gem install compass --no-ri --no-rdoc $ exit
そして、config.yml の assetic の項目に次のように設定を追加
# vi app1/config/config.yml
assetic: debug: %kernel.debug% use_controller: false filters: sass: ~ compass: ~
そして、Twig テンプレートを使う際に、下記のように指定してあげる。
{% stylesheets filter="compass" "@DemoBundle/Resources/public/sass/main.sass" "@DemoBundle/Resources/public/sass/header.sass" "@DemoBundle/Resources/public/sass/footer.sass" %} <link rel="stylesheet" href="{{ asset_url }}" /> {% endstylesheets %}