PHP初心者がDockerでFuelPHP+MySQLのコンテナを作成してscaffoldしてみます。
経緯
Railsのお仕事をお手伝いするはずが、事情によりFuelPHPを扱うことになりました。
基本的には週に1回の業務でプロジェクト管理や開発全般の効率化・改善などを担当しているため、
個別の実装タスクまで入り込む機会は少ないのですが、フレームワークそのものを理解することは必要と判断し、
学習することにしました。
前提
構成
Webコンテナ
DBコンテナ
DB コンテナ
DockerHubのMySQL Officialを使います。
Dockerfile
FROM mysql:5.7 MAINTAINER tbpgr <tbpgr@tbpgr.jp> ENV MYSQL_ROOT_PASSWORD pass ENV MYSQL_DATABASE fuel_sample ADD conf.d /etc/mysql/conf.d
コンテナイメージのbuild
$ docker build -t tbpgr/mysql:ver1.0 .
コンテナの起動
$ docker run --name mysql -d tbpgr/mysql:ver1.0
Web コンテナ
DockerHubのPHP Officialを使います。
apache2.conf
DocumentRootの設定を変更する
# 変更前 # DocumentRoot /var/www/html # 変更後 DocumentRoot /var/www/fuel_sample/public
Dockerfile
FROM php:5.6-apache MAINTAINER tbpgr <tbpgr@tbpgr.jp> RUN apt-get update -y RUN apt-get install git -y RUN apt-get install vim -y RUN docker-php-ext-install pdo pdo_mysql WORKDIR /var/www RUN mkdir /var/www/fuel_sample RUN chown www-data:www-data /var/www/fuel_sample ADD apache2.conf /etc/apache2/apache2.conf RUN curl get.fuelphp.com/oil | sh RUN git config --global url."https://".insteadOf git:// EXPOSE 80
※RUN git config --global url."https://".insteadOf git://
はgit protocolが利用できない環境の人向けの設定
コンテナイメージのbuild
$ docker build -t tbpgr/fuelphp:ver1.0 .
コンテナの起動
ホストの /path/to/fuel_project/test_fuelphp/web/fuel_sample
をコンテナの /var/www/fuel_sample
にマウントします。
mysqlコンテナをwebコンテナにリンクします。
$ docker run -d -p 8000:80 -d --name php -v /path/to/fuel_project/test_fuelphp/web/fuel_sample:/var/www/fuel_sample --link mysql:mysql tbpgr/fuelphp:ver1.0
FuelPHP プロジェクトの作成
$ cd /var/www $ oil create fuel_sample $ cd fuel_sample # 不要ファイルの削除 $ rm -rf .git .gitmodules *.md docs fuel/core fuel/packages
Timezoneの設定
- %project%/fuel/app/config/config.phpに設定
'default_timezone' => 'Asia/Tokyo',
composerでパッケージをインストール
Rubyでいうことろのbundlerみたいな感じですかね。
$ php composer.phar update
Composer利用時にGitHub APIを利用する関係で、API制限によりtokenの設定を必要とするケースがある。
その場合は、GitHubでtokenを取得しておくこと。
db.php
- passはDBコンテナで設定した値
<?php return array( 'default' => array( 'type' => 'pdo', 'connection' => array( 'dsn' => 'mysql:host='.getenv('MYSQL_PORT_3306_TCP_ADDR').';port='.getenv('MYSQL_PORT_3306_TCP_PORT').';dbname=fuel_sample', 'username' => 'root', 'password' => 'pass', 'persistent' => false, 'compress' => false, ), 'identifier' => '`', 'table_prefix' => '', 'charset' => 'utf8', 'enable_cache' => true, 'profiling' => false, ), );
Apacheの設定
- /etc/apache2/apache2.conf
# Before # DocumentRoot /var/www/html # After DocumentRoot /var/www/fuel_sample/public
scaffold
oilでscaffoldします
$ oil g scaffold monkey name:string description:text $ oil refine migrate
config.phpを設定
# Before #'index_file' => false, # After 'index_file' => false,
.htaccessを変更
# Before # Remove index.php from URL #RewriteCond %{HTTP:X-Requested-With} !^XMLHttpRequest$ #RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC] #RewriteRule ^index\.php(.*)$ $1 [R=301,NS,L] # After # Remove index.php from URL RewriteCond %{HTTP:X-Requested-With} !^XMLHttpRequest$ RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC] RewriteRule ^index\.php(.*)$ $1 [R=301,NS,L]
modrewriteを有効化
$ a2enmod rewrite
疎通確認
- http://localhost:8000/monkey/index (データ追加後)