M1チップMacでDocker+Laravel Step3:Laravelの導入

2021/10/25に公開

その2はこちらから:
M1チップMacでDocker+Laravel Step2:Dockerfileとyml

ComposerでLaravelを導入。

立ち上げたwebコンテナに新しく開いたターミナルで入ります。

kafeine@Bean-Mac web_tutorial % docker exec -it local_web bash
root@7e0fs9402a24:/var/www/html# 

すでに/var/www/htmlにいるので、ここでComposerを使ってLaravelプロジェクトを作りましょう。

root@7e0fs9402a24:/var/www/html# composer create-project laravel/laravel laravel-docker

laravel-docker の部分がディレクトリ名になります。今いる/var/www/html直下に作られます。
また、ここからはライブラリのダウンロードやインストールで時間がかかるのでしばらく待ちましょう。

Application key set successfully.

と表示されたら完了です。

また、ローカルのsrc直下にlaravel-dockerができていることがわかります。

apacheのドキュメントルートを変更とリライトを有効にする。

次はこのURLにアクセスしたら、Laravelのwelcomeページになるようします。

http://localhost:8080

つまり、ApacheでDocumentRoot

/var/www/html/laravel/public

にする必要があるので、ローカルのapache/sites-available/000-default.confDocumentRootを変更します。

<VirtualHost *:80>
~~~ 略 ~~~
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/laravel-docker/public
~~~ 略 ~~~
</VirtualHost>

変更したらコンテナを停止し、再びdocker-compose upをしましょう。これでまたhttp://localhost:8080にアクセスすると、Laravelのwelcomeページが表示されようになります。
laravel_welcome

ついでにリライトも動いているか、存在しないファイルへアクセスしてみて確認します。

localhost:8080/hoge

laravel_404
Laravelの404ページなのでちゃんと動いてますね。

Laravelのartisanでmigrateができるようにする

Laravelは確認できましたが、DBへも接続できるように設定していきます。
実際に今の状態でmigrateを実行すると、

root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan migrate

Illuminate\Database\QueryException 

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')

と、DBに接続を拒否されたとエラーがでます。なので、ローカルのsrc/laravel-docker/.envファイルにMySQLの設定をします。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=local_db
DB_USERNAME=local_user
DB_PASSWORD=local_password

保存したら、artisanのキャッシュをクリアします。

root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan cache:clear
Application cache cleared!

root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan  config:clear
Configuration cache cleared!

そしたら再度、migrateをしてみます。

root@7e0fs9402a24:/var/www/html/laravel-docker# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (98.34ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (47.64ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (48.87ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated:  2019_12_14_000001_create_personal_access_tokens_table (79.00ms)

migrateされました。
もしこれらのデータベースが不要な場合は、php artisan migrate:resetで巻き戻せます。

これでDockerを使ってのLaravelの導入は完了です。

MySQLをターミナルで確認

ついでにdbコンテナもチェックしておきましょう。新たにターミナルを開き、

kafeine@Bean-Mac web_tutorial % docker exec -it local_db bash
root@376e3b3ad241:/# 

のコマンドでコンテナに入ります。ここではすでにMySQLが入っているので、

root@376e3b3ad241:/# mysql -u local_user -h db -p

これでパスワードを入力すれば入れます。試しに先ほどLaravelでmigrateしたテーブルを確認してみましょう。

mysql> use local_db

データベースを選択して、SHOW TABLES;します。

mysql> SHOW tables;
+------------------------+
| Tables_in_local_db     |
+------------------------+
| failed_jobs            |
| migrations             |
| password_resets        |
| personal_access_tokens |
| users                  |
+------------------------+
5 rows in set (0.01 sec)

問題なく作られてますね。

以上がDockerでLaravelを導入する方法でした。

Discussion