はじめに
「優しい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
●手順
- git@github.com:Seraphicer/docker-fuelphp.git をクローン
- Dockerfile修正
- setupスクリプト実行
- FuelPHP動作確認
- phpMyAdminインストールとconfig.inc.php作成
- Eclipseプロジェクト作成
- データベースクライアントソフトを設定
- 補足
●詳細
1. git@github.com:Seraphicer/docker-fuelphp.git をクローン
1-1. プロジェクト用のディレクトリに移動
$ cd /Users/user/Documents/workspace
1-2. セットファイルをクローンする
$ 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
FROM php:5.6-apache
2-2. 追加インストール
"vmi", "libmcrypt-dev", "wget"を追加インストールします。
## 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"を追加します。
## 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"というフォルダを作成し、ログの出力先にします。
## Install FuelPHP's depending extensions
## log
RUN mkdir /var/log/fuel
RUN chmod 777 /var/log/fuel
2-5. 修正後の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スクリプト実行
3-1. setupスクリプト実行
root権限がないとエラーになる場合があり、sudoを使います。
$ sudo ./setup korejo
※korejoはプロジェクト名で任意です。適時読み替えてください。
3-2. 権限をユーザにする
$ 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
ファイルを開き、下記のように追記します。
/**
* ●言語
* 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 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を作成
下記の部分を変更します。
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
/* 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. ユーザを作成
5-5. データベースを作成
6. Eclipseプロジェクト作成(info.php)
6-1. Eclipseでプロジェクトを作成
6-2. プロジェクト名に"korejo"と入力し「完了」をクリック
6-3. プロジェクトが作成される
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 up -d # 再作成
docker-compose stop # 一括停止
docker-compose start # 起動
と、docker-composeが利用できます。
コンピュータをシャットダウン後、再度コンテナを起動する場合はこのディレクトリからdocker-composeを使うと便利です。
8-2. 各設定ファイル
"/Users/user/Documents/workspace/korejo/docker" ディレクトリに
apache
mysql
とあり、 各設定ファイルが保存されています。
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+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を使いサーボモータを動かす