はじめに
インターンシップで使うということでPHPのZendFrameworkとmysqlの環境構築をしてみました。
phpは初めてで、Dockerも慣れてなく割と苦労したのでまとめます。
もっといい方法ある!とかあれば教えてほしいです。
対象読者
- ZendFrameworkを利用したアプリ開発がしたい方。
- apacheとかnginxとかをインストールしたくない方。※1
- PHPの開発環境を作ってみたい方。※2
※1 Dockerを利用するとわりとブリッジ周りが荒れたりします。
※2 PHP始めるならもっと新しいフレームワークもあるのでfuelPHPとかcakePHPとかも見てから決めるほうがいいと思います。
記事の内容
- Dockerfile, docker-composeを利用してphpの環境を構築します。
- mysqlで実行時にユーザ、DB、テーブルを作成します。
動作環境
- OS Arch Linux x86_64
- カーネルバージョン 4.15.3-2-ARCH
- Docker 18.02.0-ce
- docker-compose 1.19.0
結果
下記をクローンしてもらってdocker-compose up --build
を実行するとSkeleton Applicationの起動、テーブルの作成が行われます。
GitHub : https://github.com/Juju-62q/ZendFrameworkWithMySQL.git
リポジトリの説明
Dockerに関して
phpのDockerimageを引っ張るようにしています。
phpとapacheの環境を引っ張っており環境変数の設定とcomposer.jsonからのインストールをしています。
FROM php:7.2-apache
RUN apt-get update \
&& apt-get install -y git zlib1g-dev \
&& docker-php-ext-install zip pdo_mysql mysqli \
&& a2enmod rewrite \
&& sed -i 's!/var/www/html!/var/www/public!g' /etc/apache2/sites-available/000-default.conf \
&& mv /var/www/html /var/www/public \
&& curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer
RUN yes | pecl install xdebug
WORKDIR /var/www
phpのファイルに加えてmysqlを追加しています。データの保存にはbusyboxを利用しました。
.envという環境変数の読み込みやDockerとホスト間で共通のリソースとなる部分の追加をしています。
version: '2'
services:
zf3:
build: .
ports:
- "80:80"
volumes:
- .:/var/www
env_file: ./.env
links:
- mysql
data:
image: busybox
volumes:
- ./misc/data:/var/lib/mysql
mysql:
image: mysql:5.7
env_file: ./.env
ports:
- "3306:3306"
volumes_from:
- data
volumes:
- ./sql/:/docker-entrypoint-initdb.d/
MySQLの環境変数の設定
.envファイルにmysqlに関する環境変数を設定しています。
変数はその名の通りで上からrootパスワード、追加するユーザ、追加したユーザのパスワード、データベース名となっています。
ホスト名はphpからmysqlにアクセスする際に利用できます。
作成されるユーザはall grantの権限で作成されます。
なお、見られると良くないので.gitignoreに追加するといいかと思います。
MYSQL_ROOT_PASSWORD=root_password
MYSQL_USER=zend
MYSQL_PASSWORD=zend_password
MYSQL_DATABASE=db
MYSQL_HOST=mysql
MySQLでテーブルの作成
sql/以下のファイルがコンテナ作成時に自動実行されます。
ここではpersonという名のidと名称と作成時刻を持つテーブルを作成しています。
CREATE TABLE `person` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20),
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ZendFramework関係ファイル
数が多いのでテーブルにまとめました。このあたりはZend Frameworkの解説を見たほうがいいと思います。
ディレクトリ名 | 使いみち |
---|---|
config | 設定ファイル(読むべきディレクトリや、DB接続情報等) |
module | ZendFrameworkのアプリケーションの実態 |
public | 公開されているファイル |
vendor | composerで追加されるファイル等(大きいので必要に応じてignore) |
misc | データベースの実データ |
ZendFrameworkを利用した開発について
ZendFrameworkの公式チュートリアルを見ながら作っていくといいと思います!
Zend Framework Quick Start
https://framework.zend.com/manual/1.12/ja/learning.quickstart.html
おわりに
初めてのphpでの環境構築でした。Dockerに慣れていないこともあり、正直かなり時間がかかりましたがこの記事を見て環境構築の手間がなくなれば嬉しいです。
XDebugがまだ正常に動かせていないのでどなたか教えてほしいです。(分かり次第追記したいと思います。)