PHP
CMS
環境構築
Docker
LaraDock

DockerとLaradockでPHPフレームワークとCMSの開発環境を構築する【MySQL( latest)8.0.11対応】

初めまして。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", [])

参考:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client · Issue #1392 · laradock/laradock

エラー解消の参考情報は見つけたのですが、個人的に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


参考