(情報交錯しがちですが、メモ用として要点のみ)
公式 Quick Overview の場合
Laradock 公式のQuick Overviewを実行してみました。
1. Introduction – Laradock
https://laradock.io/introduction/#quick-overview
こんな感じで書いてあります。とても簡単そうです!
# Let’s see how easy it is to setup our demo stack PHP, NGINX, MySQL, Redis and Composer: 1 - Clone Laradock inside your PHP project: git clone https://github.com/Laradock/laradock.git 2 - Enter the laradock folder and rename env-example to .env. cp env-example .env 3 - Run your containers: docker-compose up -d nginx mysql phpmyadmin redis workspace 4 - Open your project’s .env file and set the following: DB_HOST=mysql REDIS_HOST=redis QUEUE_HOST=beanstalkd
上に書いてある通りに実行した後、ブラウザから localhostにアクセスすると
404 Not Found
nginx
が表示されます。
localhost:8080 はOKです。phpMyAdminが表示されます。
状況としては、プロジェクトを作って設定すればOKらしいです。
Laradockが上手く動かなくて困った話 – Qiita
https://qiita.com/skmt719/items/a296d81150fd7319e71a
ということで、workspaceコンテナに入って、プロジェクトを作成します。プロジェクト名は testApp です。
~/lara/laradock$ docker-compose exec workspace bash root@4dd42b7b4aa8:/var/www# ls laradock root@4dd42b7b4aa8:/var/www# composer create-project laravel/laravel testApp
続いて、プロジェクト名に合わせて laradockディレクトリの .env を変更します。
APP_CODE_PATH_HOST=../testApp/
#変更前
#APP_CODE_PATH_HOST=../
docker-compose を再起動し、 ブラウザで localhost 再表示すると、下記エラーが表示されました。
/var/www/ UnexpectedValueException The stream or file "/var/www/storage/logs/laravel-2019-09-28.log" could not be opened: failed to open stream: Permission denied http://localhost/ Hide solutions Database name seems incorrect You're using the default database name laravel. This database does not exist. Edit the .env file and use the correct database name in the DB_DATABASE key READ MORE Database: Getting Started docs
ディレクトリの権限設定をします。
ディレクトリ storage, bootstrap/cache のオーナーと権限を変更しましょう Laradock on Ubuntu @大人プログラミング部 – teffs
https://teffs.jp/2019/10/chown-chmod-storage-bootstrap-cache-laradock-on-ubuntu/
ブラウザの localhost 表示はOKです。
続いて、 localhost:8080 で、mysqlに接続…… の前にmysql のバージョンが latestなので、認証方式変更ですね。
MySQL 8.0以降は、ユーザ認証方式を変更しましょう Laradock on Ubuntu @大人プログラミング部 – teffs
https://teffs.jp/2019/10/mysql-8-0-mysql-native-password-laradock-on-ubuntu/
ブラウザの localhost:8080 で、mysql – defaultに接続できました。
ここまでで開発環境としては動くようになったので、hypertextcandyさんのチュートリアルを行ってみます。
入門Laravelチュートリアル (1) イントロダクションと環境構築 | Hypertext Candy
https://www.hypertextcandy.com/laravel-tutorial-introduction
入門Laravelチュートリアル (2) ToDoアプリケーションの設計 | Hypertext Candy
https://www.hypertextcandy.com/laravel-tutorial-todo-app-design
入門Laravelチュートリアル (3) ToDoアプリのフォルダ一覧表示機能を作る | Hypertext Candy
https://www.hypertextcandy.com/laravel-tutorial-todo-app-list-folders/
チュートリアル3 のHello world の表示までは無事OKです。
workspaceコンテナ内で migration 生成します。
root@067f2585e287:/var/www# php artisan make:migration create_folders_table --create=folders Created Migration: 2019_10_05_015106_create_folders_table
database/migrations に作られた Schema::createメソッド中の $table->increments() が $table->bigIncrements()になっている以外はチュートリアルの通りです。
migrationを実行すると、エラーが発生しました。dbスキーマが laravelになっているようです。
root@067f2585e287:/var/www# 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') at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665 661| // If an exception occurs when attempting to run a query, we'll format the error 662| // message to include the bindings with SQL, which will make this exception a 663| // lot more helpful to the developer instead of just the database's errors. 664| catch (Exception $e) { > 665| throw new QueryException( 666| $query, $this->prepareBindings($bindings), $e 667| ); 668| } 669| Exception trace: 1 PDOException::("SQLSTATE[HY000] [2002] Connection refused") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel", "root", "", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details. root@067f2585e287:/var/www#
原因を調査すると、プロジェクトtestApp内 の .env の設定に問題がある様子です。
DB_DATABASE, DB_USERNAME, DB_PASSWORD の設定値を修正します。Quick Overviewといえ、ここも設定しないといけないんですね。
修正前 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=127.0.0.1 DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret
migration を実行しますが、再びNG。DB_HOSTの値が不味いようです。
root@067f2585e287:/var/www# php artisan migrate Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = default and table_name = migrations and table_type = 'BASE TABLE') at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665 661| // If an exception occurs when attempting to run a query, we'll format the error 662| // message to include the bindings with SQL, which will make this exception a 663| // lot more helpful to the developer instead of just the database's errors. 664| catch (Exception $e) { > 665| throw new QueryException( 666| $query, $this->prepareBindings($bindings), $e 667| ); 668| } 669| Exception trace: 1 PDOException::("SQLSTATE[HY000] [2002] Connection refused") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=default", "default", "secret", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details. root@067f2585e287:/var/www#
まず、mysqlコンテナに入って、ipアドレスを調査。この環境では、172.23.0.2 です。
~/lara/laradock$ docker-compose exec mysql bash root@52340d840f63:/# hostname -i 172.23.0.2
再び testApp/.env の DB_HOST を修正します。(注:後日再度修正しました)
DB_CONNECTION=mysql DB_HOST=172.23.0.2 DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret
migration を実行します。通りました!
~/lara/laradock$ docker-compose exec workspace bash root@067f2585e287:/var/www# php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.89 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.94 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.48 seconds) Migrating: 2019_10_05_015106_create_folders_table Migrated: 2019_10_05_015106_create_folders_table (0.52 seconds) root@067f2585e287:/var/www#
ブラウザから localhost:8080 を開いて、phpMyAdminで default databasesに folderテーブルができていることを確認できました。
公式 Quick Overview はとても簡単そうで、 “enjoy!”とか書いてありまして、設定不要で動くのかと思いきや、それなりの設定が必要でした。
たっぷり enjoy してしまいました!
※追記 2019年10月14日
MySQLコンテナの ip アドレスがいつの間にか変わってしまったので、 testApp/.env の DB_HOST を mysql に修正しました。
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret