Laravelを勉強しようと思い、Laradockを使って環境構築に挑んだのですが、
- 「公式ドキュメントだけだと分かりにくい…」
- 「参考にした情報が古かったためか、今のバージョンでやるとエラーになる…」
- 「Qiitaの記事、ところどころ操作が抜けててその通りにやっても上手くいかない…」
こんな感じで一発で上手くいかず、とても苦労したので成功した手順を備忘録としてまとめておきます。(実はここにたどり着くまでに2日ほど何度もエラーと戦い、10回くらい消して入れてを繰り返した…)
私のようにDocker初心者で環境構築に困っている人の参考になれば幸いです。
(事前準備)Dockerのインストール
前提として、GitとDockerが使えるようになっている必要があります。
Dockerをまだ入れていない方は、こちらの記事の前半にインストール方法がありますので、参考にして入れておいてください。
Laravel環境構築手順
準備が整ったら、環境構築に入ります。
今回、最終的に出来上がるディレクトリの構成は以下のようになります。
- laradock: Laradockのソース一式
- sample_app: Laravelのソース一式
作業ディレクトリの作成
まずはlaradockとlaravelのソースを入れるディレクトリを作成し、そこに移動します。
$ mkdir Laravel
$cd Laravel
Laradockのダウンロード
GitHubからLaradockをcloneします。
$ git clone https://github.com/LaraDock/laradock.git
終わったら、laradockディレクトリができていることが確認できますので、そこに移動します。
$ ls -l
laradock
$ cd laradock
.env(設定ファイル)の編集 1
laradock内の「env-example」ファイルをコピーして設定ファイル(.env)作成します。
$ cp env-example .env
作成した.envを開き、上から順に以下を編集していきます。
1.DBの保存先を変更
デフォルトだとDBの保存先がホームディレクトリになっているので、プロジェクトのディレクトリ(今回つくったディレクトリの中)になるよう、以下のように書き換えます。
# DATA_PATH_HOST=~/.laradock/data
↓
DATA_PATH_HOST=.laradock/data
2.コンテナ名を編集
COMPOSE_PROJECT_NAMEを「laradock」から分かりやすいように「sample_app」へ変更。
# COMPOSE_PROJECT_NAME=laradock
↓
COMPOSE_PROJECT_NAME=sample_app
3.nginxのポート変更
デフォルトのポートは8000なのですが、私はすでに8000番をWordPressのローカル環境構築に使っていたので、ポートの番号を変更します。(カブっていない方は変えなくてもOK)
# NGINX_HOST_HTTP_PORT=8000
↓
NGINX_HOST_HTTP_PORT=3000
4.MySQLのバージョンを変更
デフォルトだと最新版のバージョン8がインストールされますが、執筆時点(2020年1月)ではエラーになるので、バージョンを5.7に下げます。
先に紹介した3つの手順はやらなくてもそこまで問題はないのですが、これは超重要です!!
ちなみに私は最初に最新版を入れてしまい、このせいで何時間もエラーと格闘するハメになったのでお気をつけて…
# MYSQL_VERSION=latest
↓
MYSQL_VERSION=5.7
5.MySQLの情報を変更
これは好みなのでやらなくてもいいですが、私は分かりやすいようにDB情報(DBの名前、ユーザー名、パスワード)を変更します。
# MYSQL_DATABASE=default
# MYSQL_USER=default
# MYSQL_PASSWORD=secret
↓
MYSQL_DATABASE=sample
MYSQL_USER=sample
MYSQL_PASSWORD=sample
ここまでできたら、.envファイルを保存して閉じます。
コンテナの起動
コンテナを起動させます。
$ docker-compose up -d nginx mysql
無事に起動しているか、以下コマンドで確認します。下記のようStateがUpになっていれば起動しているのでOK。
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
sample_app_docker-in- dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp
docker_1
sample_app_mysql_1 docker-entrypoint.sh Up 0.0.0.0:3306->3306/tcp,
mysqld 33060/tcp
sample_app_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp,
0.0.0.0:3000->80/tcp
sample_app_php-fpm_1 docker-php-entrypoint Up 9000/tcp
php-fpm
sample_app_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
ここで、http://localhost:3000にアクセス。以下のように、nginxの404ページが表示されれば正常。
Laravelのインストール
コンテナが起動できたので、Laravelをインストールします。
以下コマンドで、Dockerにあるコンテナの中に入ります。入ると2行目のようになります。
$ docker-compose exec workspace bash
root@310bc155e61f:/var/www#
コンテナの中に入れたら、以下コマンドでLaravelをインストールします。最後の「sample_app」が作成するプロジェクトの名前です。
$ composer create-project laravel/laravel sample_app
インストールが終わったら、ファイルができていることが確認できます。
$ ls -l
drwxr-xr-x 86 root root 2752 Jan 19 10:47 laradock
drwxr-xr-x 26 root root 832 Jan 19 10:52 sample_app
確認できたら、コンテナから抜けます。
$ exit
.env(設定ファイル)の編集 2
再度.envファイルを編集するため、まずはコンテナを停止します。
$ docker-compose stop
Stopping sample_app_nginx_1 ... done
Stopping sample_app_php-fpm_1 ... done
Stopping sample_app_workspace_1 ... done
Stopping sample_app_mysql_1 ... done
Stopping sample_app_docker-in-docker_1 ... done
Laradockディレクトリの中にある.envファイルを開き、ホストパスを先ほど作ったLaravelプロジェクト名に変更します。
# APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../sample_app
変更したら、保存して閉じます。
再びアクセスすると、Laravelの初期画面が表示されます。
DBの接続設定と確認
Laravelはインストールできましたが、このままではDBに接続できていませんので、設定を行います。
今度は先ほど作ったLaravelプロジェクト(sample_app)のディレクトリ内にある.envファイルを開きます。上から順に以下を設定していきます。
1.アプリケーション名の変更
アプリケーションの名前を変更します。今回はsample_appとします。
# APP_NAME=Laravel
↓
APP_NAME=sample_app
2.DB情報の変更
データベース名、ユーザー名、パスワードを、先ほどLaradockの.envファイルで変更したDB情報と同じものに変更します。
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
↓
DB_DATABASE=sample
DB_USERNAME=sample
DB_PASSWORD=sample
変更できたら、保存して閉じます。
マイグレーション
コンテナを再起動します。
$ docker-compose restart
Restarting sample_app_nginx_1 ... done
Restarting sample_app_php-fpm_1 ... done
Restarting sample_app_workspace_1 ... done
Restarting sample_app_mysql_1 ... done
Restarting sample_app_docker-in-docker_1 ... done
コンテナが起動したら、マイグレーションを実行する。
$ cd sample_app
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.03 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.02 seconds)
こんな感じで実行できれば接続OK。
以上、環境構築が完了。