公式 Quick Overview の場合 Laradock on Ubuntu @大人プログラミング部

(情報交錯しがちですが、メモ用として要点のみ)

公式 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