はじめに
Laravelをdockerを使用して環境構築します。
vagrantを立ててコマンドを1つ1つ..ってやるのは非常に面倒(初学習者だとかなり時間がかかる)なので、Laradockを使うとかなり環境構築の時間を省けます。
では、やっていきましょう。
前提
Dockerはインストールしておいてください。
https://docs.docker.com/docker-for-mac/install/
1. 作業ディレクトリ作成 & Laradockのクローン
$ mkdir laravel_app
$ cd laravel_app
$ mkdir hoge_project # Laravelが配置される場所
$ git clone https://github.com/LaraDock/laradock.git
2. 環境変数の変更
laradockにある環境変数のサンプルファイルをコピーして、Laravelのインストール先の設定と、nginxのポート番号を変更します。
$ cd laradock
$ cp env-example .env
### Paths #################################################
# Point to the path of your applications code on your host
# APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../hoge_project/
### NGINX #################################################
# NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTP_PORT=3000
3. Dockerコンテナの実行
$ docker-compose up -d nginx mysql redis
ネットワークの影響で多少差はありますが、最初だけ25分前後かかりました。
Starting laradock_mysql_1 ... done
Starting laradock_redis_1 ... done
Starting laradock_docker-in-docker_1 ... done
Starting laradock_workspace_1 ... done
Starting laradock_php-fpm_1 ... done
Starting laradock_nginx_1 ... done
起動したらhttp://localhost:3000 にアクセスしてみましょう。
404エラーが表示されればOK。
4. Laravelのインストール
laradockのworkspaceにログインしてLaravelをインストールします。
$ 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:3000->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /run.sh supervisord -n Exit 0
laradock_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
workspaceのNameを確認してログイン
$ docker exec -it laradock_workspace_1 /bin/bash
root@f19315fd6:/var/www#
$ composer create-project --prefer-dist laravel/laravel ./
Installing laravel/laravel (v5.6.21)
- Installing laravel/laravel (v5.6.21): Downloading (100%)
Created project in ./
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 70 installs, 0 updates, 0 removals
- Installing vlucas/phpdotenv (v2.5.0): Downloading (100%)
- Installing symfony/css-selector (v4.1.1): Downloading (100%)
.
.
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate
Application key [base64:/rBs0vBIauYkQPUhKOfad2JIk3ohMdBbeCVaFewlLQ+s=] set successfully.
5. アクセス
http://localhost:3000 に再度アクセスしてこれが表示されればOK!
6. MySQL接続設定
workspace上でマイグレーション実行
$ php artisan migrate
エラーが表示されなければ終了。
PDOException::("SQLSTATE[HY000] [2002] Connection refused")の対処
laradockではなくlaravelプロジェクトのほうの.env
の修正が必要だそう。
(間違いやすいので注意)
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client の対処
MySQLの認証方式の変更が必要だそう。
mysqlのコンテナIDをチェック。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb9734566dad laradock_mysql "docker-entrypoint.s…" 33 minutes ago Up 23 minutes 0.0.0.0:3306->3306/tcp laradock_mysql_1
mysqlにログインする。
$ docker exec -it eb9734566dad /bin/bash
root@eb9734566dad:/#
$ mysql -u root -p
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
ユーザーの認証方式をチェックする。
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| default | % | caching_sha2_password |
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys | localhost | mysql_native_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)
認証方式をcaching_sha2_password
からmysql_native_password
に変更する。
mysql> ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
Query OK, 0 rows affected (0.19 sec)
MySQLが接続時の認証方式のデフォルト値を変更する。
# mysqlを抜けた後
$ vim mysql/my.cnf
[mysqld]
default_authentication_plugin= mysql_native_password # 追加
マイグレーション実行
$ docker-compose exec workspace bash
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
おわりに
DB接続時のエラー対処を含めた記事が他になかったので、参考になれば幸いです。