初めまして。Qiitaでの初回投稿になりますが、よろしくお願いします。
DockerとLaradockでPHPフレームワークとCMSの開発環境を構築します。Dockerでの開発環境構築を勉強するために参考情報を調べていたらLaradockという便利そうなものを見つけました。
Composerが入ってるだけだから別のフレームワークでも使える
PHPカンファレンス関西2017に行ってきました | プログラミングメカブログ
と言う記事も見かけたので、以下のPHPフレームワークとCMSの開発環境をDockerとLaradockを利用して用意してみようと思います。
今回実施するもの
PHPフレームワーク
CMS
mysqlバージョンについて
以下の記事を参考に[ my.cnf ]に[ default_authentication_plugin=mysql_native_password ]を追記しlatest(8.0.11)に対応しました。
参考:日々の覚書: MySQL 8.0.4におけるデフォルト認証形式の変更
mysqlのデフォルトの認証方式がバージョン8.0.4から[ caching_sha2_password ] に変更があったため、latestバージョン(8.0.11)でPHPフレームワークやCMSの開発環境構築を進めて行こうとすると以下のようなエラーが発生します。
#エラー内容
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
PDO::__construct("mysql:host=mysql;port=3306;dbname=default", "default", "secret", [])
エラー解消の参考情報は見つけたのですが、個人的にmysqlはバージョン8.0.3または5.7.22で問題ないため、latestバージョン(8.0.11)は使用しないことに決めました。
バージョン情報
- Mac OS 10.11.6(El Capitan)
- Docker Toolbox
- Docker version 18.03.0-ce
- Oracle VM VirtualBox Manager 5.2.12
-
Laradock
- PHP 7.2.4 (fpm-fcgi)
- nginx version: nginx/1.15.0
- mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)
- Laravel 5.6.26
その他情報
laradock設定
起動するコンテナ群の環境変数設定ファイル作成し、laradock設定を行います。
$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
#コンテナ群の環境変数設定ファイル作成
$ cp env-example .env
[ .env ]の[ Paths ]でPHPフレームワークやCMSを展開するディレクトリや、DBデータの永続場所が指定できますので必要に応じて変更して下さい。
APP_CODE_PATH_HOST=../
DATA_PATH_HOST=~/.laradock/data
mysql latest設定
mysqlバージョンlatest(8.0.11)に合わせて設定を変更します。
$ vi docker-compose.yml
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
+ user: "1000:50"
$ vi mysql/my.cnf
+ innodb_use_native_aio=0
+ default_authentication_plugin=mysql_native_password
コンテナ起動確認
[ .env ]と[ docker-compose.yml ] の設定を元にコンテナを生成起動します。
$ docker-compose up -d nginx mysql
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
laradock_nginx_1 nginx Up 0.0.0.0:443->443/tcp,
0.0.0.0:80->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
workspaceコンテナ接続
PHPフレームワークやCMSをインストールするため[ workspace ]コンテナに接続します。
[ root@98cc6b1b406d:/var/www# ]のような表示がされたら接続は成功です。
$ docker-compose exec workspace bash
PHPフレームワークやCMSをインストール
Laradockの準備ができたのでworkspaceコンテナにPHPフレームワークやCMSをインストールしていきます。例としてLaravelのみ紹介します。
Laravel設定
[ composer ]でインストールし、nginxの[ default.conf ]内のrootのpathを修正します。
# composer create-project laravel/laravel app-name --prefer-dist
$ exit
$ vi nginx/sites/default.conf
- root /var/www/public;
+ root /var/www/app-name/public;
$ docker-compose restart nginx
Laravelスタートページ表示
http://192.168.99.100/
migrationテスト
$ docker-compose exec workspace bash
# cd app-name
# vi .env
- DB_HOST=127.0.0.1
- DB_DATABASE=homestead
- DB_USERNAME=homestead
+ DB_HOST=mysql
+ DB_DATABASE=default
+ DB_USERNAME=default
# php artisan migrate:status
# php artisan migrate
参考
- mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied) · Issue #219 · docker-library/mysql
- Mysql container working on Docker v17.12.0 but not on v18.01.0 · Issue #1584 · docker/for-win
- MySQL Container fails to start · Issue #1492 · laradock/laradock
- 日々の覚書: MySQL 8.0.4におけるデフォルト認証形式の変更