shibomb eats weird things...

and out something.

Laravel開発環境 with Laradock on Mac 【MySQL8認証対応済】

f:id:shibomb:20181024115407p:plain
Mac本体の環境汚染をせずにLaravelを使ったプロジェクトの開発環境を構築します!
この記事ではLaradockを使って開発環境を構築してみます!
laradock.io

なぜ Vagrant ではなくて docker なの?

Laradock公式サイトには下記のように書かれています。
Why Docker not Vagrant

  • Vagrant creates Virtual Machines in minutes while Docker creates Virtual Containers in seconds.

  • Instead of providing a full Virtual Machines, like you get with Vagrant, Docker provides you lightweight Virtual Containers, that share the same kernel and allow to safely execute independent processes.

  • In addition to the speed, Docker gives tons of features that cannot be achieved with Vagrant.

  • Most importantly Docker can run on Development and on Production (same environment everywhere). While Vagrant is designed for Development only, (so you have to re-provision your server on Production every time).

要は

  • Vagrant仮想マシンを作るのは遅いけど、Dockerは数秒で仮想コンテナを作れる。
  • Vagrantは重いけど、Dockerは軽い。
  • Dockerの方がVagrantにない機能もある。
  • Vagrantは開発のためだけにデザインされたものだけど、Dockerは本番と同じ環境作れる。

とのことです。 *1


準備. Docker for Mac をインストール

Docker, Docker Compose を使います。
未導入の場合は下記よりインストールしてください。 docs.docker.com

前提. 案件ディレクト

今回作業をするディレクトリは、こんな状態を想定しています。

~/Projects/[お客さま名]/[案件名]/ # 案件ディレクトリです
- Laravel #←gitで管理している既存のLaravelプロジェクトがある前提です
- laradock #←この記事の作業で作成されます

以降、案件ディレクトといえば、ここを指し示します。
みなさんの環境に合わせて適宜読み替えください。

Laradockをインストール

案件ディレクトリへ移動し、git clone をします。

cd ~/Projects/[お客さま名]/[案件名]/
git clone https://github.com/Laradock/laradock.git

laradockディレクトリが作られ、その中にdocker-composeのための設定がコピーされているはずです。

次に環境設定ファイル .env をサンプルからコピーします。
ついでに、既存プロジェクトをアプリケーションのコードのパスに指定しましょう。

cd laradock
cp env-example .env
vi .env
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../Laravel #← Laravelプロジェクトを追加

mysql 8.0 の ユーザー認証方式変更対応 my.cnf編

こんなエラーが出るので対応です。 (後ほどmySQLユーザのデータも変更します)

The server requested authentication method unknown to the client [caching_sha2_password]
vi ~/Projects/[お客さま名]/[案件名]/laradock/mysql/my.cnf  
[mysqld]
:
default_authentication_plugin=mysql_native_password # ←追加

Laravelプロジェクトの設定を変更

vi ~/Projects/[お客さま名]/[案件名]/Laravel/.env
DB_HOST=mysql
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
REDIS_HOST=redis

起動

dockerコンテナを起動しましょう!

cd ~/Projects/[お客さま名]/[案件名]/laradock
docker-compose up -d nginx mysql phpmyadmin redis workspace 

※初回は時間がかかります。

起動が完了しましたら、http://localhostにアクセスしてください!

mysql 8.0 の ユーザー認証方式変更対応 mySQLユーザー編

cd ~/Projects/[お客さま名]/[案件名]/laradock
docker-compose exec mysql bash
# mysql -u root -p 
(enter password: root )
mysql> SELECT user, host, plugin FROM mysql.user;
mysql> ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
mysql> quit
# exit

以下、起動後に出来る色々です。

ワークスペースに入る

各種コマンド(Artisan, Composer, PHPUnit, Gulpなど)を実行するためにワークスペースコンテナに入ることができます。

cd ~/Projects/[お客さま名]/[案件名]/laradock
docker-compose exec workspace bash

.envで指定したAPP_CODE_PATH_HOSTのLaravelプロジェクトが /var/www として扱われるようですね。 (もしLaravelプロジェクトが既存でなくてインストールもしたいならば、APP_CODE_PATH_HOSTを戻して再起動して、ワークスペースに入って、composer create-project laravel/laravel Laravelすれば良いですね。)

phpmyadmin

phpMyAdminhttp://localhost:8080 を開き、下記のログインの情報でログインできます。

自動で作られたユーザー

サーバ: mysql
ユーザ名: default
パスワード: secret

root

サーバ: mysql
ユーザ名: root
パスワード: root

終了

コンテナを終了します。

cd ~/Projects/[お客さま名]/[案件名]/laradock
docker-compose stop

便利: Clipyにスニペット登録

起動・ワークスペースに入る・終了については、毎回コマンドを打つのは面倒なのでClipyにスニペット登録しておくと便利ですね!

Laravelじゃなくても

Laraとなってますけど、php, mysql を使うプロジェクトだったら、例えばCakePHPのプロジェクトでもこれでOKじゃない?って思いました。

*1:実は最初、公式の Laravel Homestead 5.7 Laravel で構築もしたのですが、上記のような状況を感じて乗り換えたのです。

© shibomb. All Rights Reserved.