MySQL
Eclipse
FuelPHP
アジャイル
docker

Dockerを利用してFuelPHP開発環境構築

More than 1 year has passed since last update.

はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!
現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、プログラムも書きます!
今回は、Dockerを利用したFuelPHP開発環境構築の解説です!
何度か、この記事を見て試していますが、不備などあったら申し訳ありません(グーグル先生やQiita様にお世話になったり、トライアンドエラーしてみてください)。

●参考

Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築

●ポイント

参考とした記事はPHP7ですが、FuelPHP1.7.3はPHP7に対応していない(?)
Gitに公開されている"git@github.com:Seraphicer/docker-fuelphp.git"を利用
上記をそのまま利用だと、即開発できないのでDockerfileを改修(ログの出力先を変更し、”/var/log/fuel"とするなど)

●ホスト側環境

OS OS X El Capitan
Docker 1.9.1

●構築する開発環境

PHP Version 5.6.18
FuelPHP Version 1.7.3
MySQL 5.7.11

●手順

  1. git@github.com:Seraphicer/docker-fuelphp.git をクローン
  2. Dockerfile修正
  3. setupスクリプト実行
  4. FuelPHP動作確認
  5. phpMyAdminインストールとconfig.inc.php作成
  6. Eclipseプロジェクト作成
  7. データベースクライアントソフトを設定
  8. 補足

●詳細

1. git@github.com:Seraphicer/docker-fuelphp.git をクローン

1-1. プロジェクト用のディレクトリに移動

移動
$ cd /Users/user/Documents/workspace

1-2. セットファイルをクローンする

gitでclone
$ git clone git@github.com:Seraphicer/docker-fuelphp.git

1-3. docker-fuelphp というディレクトリが作成されているので、移動

クローンして作成されたフォルダに移動
$ cd docker-fuelphp

2. Dockerfile修正

Macならmiなどのテキストエディタで編集します。
場所は/Users/user/Documents/workspace/dcoker-fuelphp/resources/Dockerfile
下記は修正のポイント(Dockerfileの完成系は2-5に記載しています。)

2-1. Apacheのバージョンを5.6

Dockerfile
FROM php:5.6-apache

2-2. 追加インストール

"vmi", "libmcrypt-dev", "wget"を追加インストールします。

Dockerfile
## Install depending packages
RUN apt-get install -y --no-install-recommends \
wget \
libmcrypt-dev \
vim

※他にも欲しいコマンドなどあれば、apt-get install -y --no-install-recommendsに追加するとインストールできます。

2-3. PHP拡張を追加

デフォルトは"fileinfo"と"mbstring"と"mcrypt"です。
データベース系のモジュール"mysqli"、"pdo"、"pdo_mysql"を追加します。

Dockerfile
## Install FuelPHP's depending extensions
RUN docker-php-ext-install \
fileinfo \
mysqli \
mbstring \
mcrypt \
pdo \
pdo_mysql

2-4. ログの出力先

デフォルトだとログの吐き先が、永続化するプロジェクトフォルダ内の"fuel/app/logs"となります。
ログは「年」フォルダの下に「月」フォルダが作成され、日付.phpという名前で保存されます。
しかし、永続化したフォルダにプログラムがmkdirをして、chmod 777をしても有効になりません…
そこで、ログの出力先を永続化しないフォルダ"/var/log"の下に"fuel"というフォルダを作成し、ログの出力先にします。

Dockerfile
## Install FuelPHP's depending extensions
## log
RUN mkdir /var/log/fuel
RUN chmod 777 /var/log/fuel

2-5. 修正後のDockerfile

Dockerfile
## PHP5.6
FROM php:5.6-apache

## Update packages
RUN apt-get update

## Install depending packages パッケージを追加
RUN apt-get install -y --no-install-recommends \
wget \
libmcrypt-dev \
vim

## Install FuelPHP's depending extensions PHP拡張
RUN docker-php-ext-install \
fileinfo \
mysqli \
mbstring \
mcrypt \
pdo \
pdo_mysql

## Cleanup 不要なファイルを削除
RUN rm -rf /var/lib/apt/lists/*

## Set php.ini タイムゾーン設定
RUN cat /usr/src/php/php.ini-development | sed 's/^;\(date.timezone.*\)/\1 \"Asia\/Tokyo\"/' > /usr/local/etc/php/php.ini

## Install phpunit PHPUnitをインストール
RUN wget https://phar.phpunit.de/phpunit.phar
RUN chmod +x phpunit.phar
RUN mv phpunit.phar /usr/local/bin/phpunit

## log
RUN mkdir /var/log/fuel
RUN chmod 777 /var/log/fuel

## Enable mod_rewrite FuelPHPはmod_rewriteが必要
RUN a2enmod rewrite

## Restart Apache Apache再起動
RUN service apache2 restart

3. setupスクリプト実行

FuelPHPのsetスクリプトを実行します。
動画解説クリック→

3-1. setupスクリプト実行

root権限がないとエラーになる場合があり、sudoを使います。

setup
$ sudo ./setup korejo

※korejoはプロジェクト名で任意です。適時読み替えてください。

3-2. 権限をユーザにする

chown
$ sudo chown -R $User korejo

3-3. コンフィグファイル変更

コンフィグファイルは下記にあります。
Dockerfileでも説明しましたが、ログの出力先をデフォルトにすると、"/Users/user/Documents/workspace/korejo/fuel"以下が永続化され、ローカルでファイル操作が可能ですが、コンテナのサーバ上にも反映されます。しかし、プログラムからmkdirしてchmod 777として権限変更ができず。FuelPHPエラーとなります。そこで、ログファイルの出力先を変更します。
/Users/user/Documents/workspace/korejo/fuel/app/config/config.php
ファイルを開き、下記のように追記します。

config.php
/**
 * ●言語
 * Localization & internationalization settings
 */
'language'           => 'jp',
// 'language'           => 'en', // Default language
// 'language_fallback'  => 'en', // Fallback language when file isn't available for default language
// 'locale'             => 'en_US', // PHP set_locale() setting, null to not set

/**
 * ●エンコーディング
 * Internal string encoding charset
 */
'encoding'  => 'UTF-8',

/**
 * ●タイムゾーン
 * DateTime settings
 *
 * server_gmt_offset    in seconds the server offset from gmt timestamp when time() is used
 * default_timezone     optional, if you want to change the server's default timezone
 */
// 'server_gmt_offset'  => 0,
'default_timezone'   => 'Asia/Tokyo',

/**
 * ●ログ(ここを設定しないとFuelPHPエラーとなります!)
 * Logging Threshold.  Can be set to any of the following:
 *
 * Fuel::L_NONE
 * Fuel::L_ERROR
 * Fuel::L_WARNING
 * Fuel::L_DEBUG
 * Fuel::L_INFO
 * Fuel::L_ALL
 */
 'log_threshold'    => Fuel::L_WARNING,
//  // 'log_path'         => APPPATH.'logs/',
 'log_path'         => '/var/log/fuel/', /* ここの設定が重要 */
 'log_date_format'  => 'Y-m-d H:i:s',

3-4. docker-composeでコンテナを作成して起動

動画解説クリック→
作成されたフォルダに移動します。

フォルダ移動
$ cd korejo

setupスクリプトにより、docker-compose.ymlとDockerfileが生成されています。

docker-compose起動
$ docker-compose up -d

4. FuelPHP動作確認

動画解説クリック→
コンテナが起動済みです。
http://192.168.99.100/
FuelPHPのWelcome画面が表示されればOK
FuelPHPエラーが出る場合は「3-3. コンフィグファイル変更」を確認してください。

5. phpMyAdminインストールとconfig.inc.php作成

MySQLを利用する場合、phpMyAdminがあると便利です。
インストールしましょう
動画解説クリック→

5-1. phpMyAdminをダウンロード

最新版は下記
https://www.phpmyadmin.net/downloads/
phpMyAdmin-4.5.5.1-all-languages.tar.gz
※2016年3月7日の最新版
解凍して下記にコピー
/Users/user/Documents/workspace/korejo/public/

5-2. config.sample.inc.phpをコピーしてconfig.inc.phpを作成

下記の部分を変更します。

config.inc.php変更前
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
config.inc.php変更後
/* Server parameters */
$cfg['Servers'][$i]['host'] = '192.168.99.100'; /* DockerのIPアドレスに変更 */
$cfg['Servers'][$i]['connect_type']  = 'socket'; /* tcpからsocketに変更 */
$cfg['Servers'][$i]['socket']        = '/var/lib/mysql/mysql.sock'; /* ソケットを追加 */
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

と変更

5-3. phpMyAdminを確認

http://192.168.99.100/phpMyAdmin/ にブラウザでアクセスします。
ユーザ名 root
パスワード password
でログインできればOK

5-4. ユーザを作成

phpMyAdmin
NewのAdd user accountをクリック

5-5. データベースを作成

6. Eclipseプロジェクト作成(info.php)

動画解説クリック→

6-1. Eclipseでプロジェクトを作成

Eclipse FuelPHP

6-2. プロジェクト名に"korejo"と入力し「完了」をクリック

6-3. プロジェクトが作成される

[Eclipse FuelPHP プロジェクト作成

7. データベースクライアントソフトを設定

次のように値を入力します。
ホスト : 192.168.99.100
ユーザ名 : 設定したユーザ名
パスワード : 設定したパスワード
データベース : 設定したデータベース
ポート : 3306
データベースクライアントコネクション
これでFuelPHP + MySQLの開発環境ができました!

8. 補足

8-1. 複数コンテナをdocker-composeで一元管理

プロジェクトのkorejo直下に次のファイルがあります。
"docker-compose.yml"
"Dockerfile"
これらは"docker-fuelphp"からコピーされ、今後はこのディレクトリで"docker-compose.yml"ファイルで起動・一時停止などの制御ができます。

docker-composeコマンド例
docker-compose up -d # 再作成
docker-compose stop # 一括停止
docker-compose start # 起動

と、docker-composeが利用できます。
コンピュータをシャットダウン後、再度コンテナを起動する場合はこのディレクトリからdocker-composeを使うと便利です。

8-2. 各設定ファイル

"/Users/user/Documents/workspace/korejo/docker" ディレクトリに
apache
mysql
とあり、 各設定ファイルが保存されています。

Dockerfile
volumes:
- /share
- .:/app
- ./docker/mysql:/etc/mysql/conf.d:ro
- ./docker/apache:/etc/apache2/sites-enabled:ro

と、ホスト側とコンテナ側が共有されており、ホスト側でテキストエディタなどで設定ファイルを編集して保存し、コンテナを再起動すると設定が反映されます。

おすすめ本

リーダブルコード
レガシーコード改善ガイド
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化 Kindle版

サイトマップ(未投稿あり)

理念・価値・ビジョン・使命

テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)
命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」

Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!

開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携
Dockerを利用したFuelPHP開発環境構築
Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成
FuelPHPのデータベースマイグレーション

Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作
Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング
Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)
Raspberry Pi 3でスイッチの状態を検出する
Raspberry Pi 3でpythonを使いサーボモータを動かす