LaradockでLaravel+mysql開発環境を構築した話【わかりやすく図解】

2020-02-09

laradockでlaravel開発環境を作る

約10ヶ月独学でプログラミングを学習したアウトプットとしてWebサービスを作ることにしました。

Webサービスを作るといっても、どの言語を使って、どのような環境開発で作るかいろいろ検討した結果、Laravelで作ることに決めました。

Laravelは今一番人気と言われているPHPのフレームワークです。そしてデータベースには、今まで使ったことがあって馴染みがあるmysqlを使って開発環境を作ります。

開発環境を作る方法にはいろいろなパターンがあります。

その中でもLaradockを使うと簡単にLaravel+mysqlの開発環境を作れるらしい…ので、今回はLaradockでLaravel+mysql開発環境を作ることにしました。

私がやりたかったこと

・LaradockでLaravel開発環境を作る
・DBはMysqlを使う

PC環境
macOS Catalina 10.15.1
Docker for Mac 19.03.5

Dockerはこちらからインストールできます。
https://hub.docker.com/editions/community/docker-ce-desktop-mac

Laradockの準備をする

Laradockをcloneする

まずプロジェクトディレクトリを作成します。

$ mkdir LaravelProject

作成したLaravelProjectディレクトリに移動してLaradockをcloneします。

$ cd LaravelProject  // LaravelProjectディレクトリに移動
$ git clone https://github.com/Laradock/laradock.git  // Laradockをclone

するとこんなディレクトリになっています。

./LaravelProject
├── laradock

laradockディレクトリに移動します。
env-exampleファイルをコピーして、.envという名前をつけます。
これが「環境設定ファイル」になります。

$ cd laradock  // laradockディレクトリに移動
$ cp env-example .env  // env-exampleファイルをコピー

「.env」ファイルを修正する

先ほど作成した「.env」ファイルを修正します。
laradockディレクトリの「.env」ファイルを開きます。

注意!

この「.env」ファイルはLaradockの「.env」ファイルです。

.envファイルが見当たらない時は

「.env」ファイル はMacのFinderから探すのが簡単です。隠しファイルになっているので、表示されるように設定を変更します。
Finderで「(command) + (shift) + (ドット)」を押せば隠しファイルの表示・非表示の切り替えができます。


「.env」ファイルのPathsのディレクトリを変更します。
今回、私は「project01 」というディレクトリを作って、Laravelを動かすことにしました。

8行目あたりから
変更前

### Paths ##################################
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../

# Point to where the `APP_CODE_PATH_HOST` should be in the container
APP_CODE_PATH_CONTAINER=/var/www/

変更後

### Paths ##################################
# Point to the path of your applications code on your host
APP_CODE_PATH_HOST=../project01/

# Point to where the `APP_CODE_PATH_HOST` should be in the container
APP_CODE_PATH_CONTAINER=/var/www/project01/

今度いくつかのプロジェクトを作ることを想定して、データの競合が起こらないように設定しておきます。

16行目あたりから
変更前

# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=~/.laradock/data

変更後

# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=~/.laradock/LaravelProject/data

35行目あたりから
変更前

# Define the prefix of container names. This is useful if you have multiple projects that use laradock to have seperate containers per project.
COMPOSE_PROJECT_NAME=laradock

変更後

# Define the prefix of container names. This is useful if you have multiple projects that use laradock to have seperate containers per project.
COMPOSE_PROJECT_NAME=LaravelProject−laradock

mysqlの設定を変更する

mysqlの設定を変更します。
最新版だと不具合があるようなので、バージョンをは5.7に固定します。

laradock/mysql/DockerfileDockerfile を編集します。

2行目
変更前

FROM mysql:${MYSQL_VERSION}

変更後

FROM mysql:5.7

laradock/mysql にある my.cnf を開いて、一番下に追記します。

default_authentication_plugin=mysql_native_password

コンテナを起動する

次にlaradockディレクトリでコンテナを起動します。
かなりの時間がかかりますので、気長に待ちましょう。

$ docker-compose up -d nginx mysql phpmyadmin redis workspace

起動できたらコンテナのステータスを確認します。

$ docker-compose ps

こんな感じになっていると思います。

      Name         Command
----------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1  dockerd-entrypoint.sh
laradock_mysql_        docker-entrypoint.sh mysqld
laradock_nginx_1        nginx
laradock_php-fpm_1       docker-php-entrypoint php-fpm
laradock_phpmyadmin_1     /run.sh supervisord -n
laradock_redis_1        docker-entrypoint.sh redis ...
laradock_workspace_1      /sbin/my_init

ここまででLaradockの準備は完了です。
いよいよLaravelのインストールをしていきます。

Laravelをインストールする

Laravelプロジェクトを作成する

laradockディレクトリでworkspaceコンテナにlaradockユーザーとして入ります。

重要!

Laradockを使用するので、すべての作業はこのworkspaceコンテナで行います。

$ docker-compose exec --user=laradock workspace bash

現在のディレクトリが /var/www に変わりました。

Laravelプロジェクトを作成します。

# composer create-project laravel/laravel project01

「 project01」のところはプロジェクト名なので、自分で決めたプロジェクト名を入れてください。

Laravelのインストールが終わるまで少し待ちます。

Application key set successfully. の後に /var/www ディレクトリに戻ってきたらインストール終了です。

終了したらコンテナから出ます。

# exit

Laradockディレクトリに戻りました。

この時点でのディレクトリ構成はこうなっています。

./LaravelProject
├── laradock
├── project01

laradockのnginxを設定する

今作成した「project01」に合わせたnginx 設定ファイルを作っていきます。

Laradockディレクトリで下記コマンドを実行して、デフォルトのnginx設定ファイルを無効にします。

$ mv nginx/sites/default.conf nginx/sites/default.conf.bk

無効にしたら、次は「project01」に合わせたnginx 設定ファイルを作成します。

$ cp nginx/sites/app.conf.example nginx/sites/app.project01.conf

作成した「app.project01.conf」を編集します。

12行目あたりから
変更前

server_name app.test;
root /var/www/app;
index index.php index.html index.htm;

変更後

server_name project01.test;
root /var/www/project01/public;
index index.php index.html index.htm;

41行目あたりから
変更前

error_log /var/log/nginx/app_error.log;
access_log /var/log/nginx/app_access.log;

変更後

error_log /var/log/nginx/project01_error.log;
access_log /var/log/nginx/project01_access.log;

ここで変更内容を反映させるためにdockerをいったん停止して再び起動します。

$ docker-compose stop //コンテナを停止
$ docker-compose up -d nginx mysql workspace phpmyadmin //コンテナを起動

hosts ファイルを編集する

今回設定したURL「http://project01.test」でアクセスできるようにhosts ファイルを編集します。

Finderで「hosts」と検索をかけると「/private/etc/hosts」が見つかるので、下記を追記してください。

127.0.0.1 project01.test

ブラウザで表示を確認する

いよいよここまで来ました。ブラウザで表示を確認します。

http://project01.test/ にアクセスしすると、Laravelの初期画面が表示されます。

laravelトップページ

http://localhost:8080 にアクセスすると、phpMyAdminを開くことができます。

phpmyadminトップページ

ログインしてみましょう。初期設定のログイン情報は次の通りです。

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

myphpadmin

ちゃんとログインできました!

Laravelでmysqlを使えるようにする

LaravelとphpMyAdminの両方ともにアクセスできるようになりましたが、まだ二つは繋がっていません。

Laravelからデータベース(mysql)を操作できるようにします。

project01 の「.env」ファイルを次のように編集します。

注意!

この「.env」ファイルはLaravelの「.env」ファイルです。

9行目あたりから
変更前

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

変更後

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

これで環境構築は終了です。お疲れ様でした。

引き続きログイン認証を実装してみました。

Laravel6になってから今までとはちょっとやり方が変わっていたので備忘録としてまとめています。