Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

PHP初心者がDockerでFuelPHP+MySQLのコンテナを作成してscaffoldしてみた

f:id:tbpg:20151013225955j:plain

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

疎通確認

f:id:tbpg:20151015231948p:plain

f:id:tbpg:20151015231958p:plain

f:id:tbpg:20151015232004p:plain

f:id:tbpg:20151015232010p:plain

f:id:tbpg:20151015232018p:plain

外部資料