#前提
すでに、nginxとphp-fpmとmysqlのコンテナを連携させた環境は構築できてる。(dockerで)nginxに関するメモ、(dockerで)php-fpmに関するメモ、(dockerで)mysqlに関するメモ。
この環境にComposerでLaravelのプロジェクトを作成して、データベースのマイグレーションまで実行したメモ。
##Laravel
2〜3年前くらいに実務でLaravelを使っていた。他にもPHPのフレームワークはあッたのだが、なんとなく新しくてカッコイイ感じがしてLaravelをプロジェクトで採用した。実際、多少制限はあるもののスムーズな開発でプロジェクトは完了した。
今回もあるシステム開発の相談を受けてLaravelを採用する予定。このメモはその環境作りの記録。
##./src/var/www/html
docker-composeによって構築される環境で、nginx(と、php-fpm)コンテナのドキュメントルートは /var/www/htmlとしているが、ローカルでは ./src/var/www/html にマウントされている。
#composer
実はあまり使い慣れていない。composerの使い方を勉強したいと思っているのが正直なトコロ。数年前からPHP周りのことを調べていると何度も composerという単語に遭遇するようになった。Laravelのプロジェクトを作成する際もcomposerを利用する手順がオフィシャルページにも紹介されている。
##composer create project ...
composerでプロジェクトを作成するにはcomposer create project <PROJECT_DIRECTORY_NAME>
を実施する。
./src/var/www/htmlに移動して
composer create-project laravel/laravel projLaravel --prefer-dist
./src/var/www/html/ projLaravel が出来上がる。今後はこのディレクトリ(パスを含めて)を**<PROJDIR>**と表記する。
##--prefer-dist
--prefer-source
というオプションもあるらしい(デフォルトはこちら)。違いについて調べていまひとつピンとこなかった。ザックリと
- --prefer-source
- は、開発利用。gitからソースコードを取得される。
- --prefer-dist
- は、基本安定版。パッケージ化されたバージョン。取得が早い。
といった感じなんだろうか。今は時間をかけていられないので調べるのは後回しとする。
#データベースのマイグレーション
データベースの接続情報やテーブルの情報を設定し、データベースのマイグレーションを実施する。
##テーブル作成
ここはLaravelの使い方の話なのであっさりと。
php artisan make:migration create_samples_table
**<PROJDIR>/database/migrations/**にマイグレーションファイルが作成される。上記コマンドで生成されたファイル以外にデフォルトで用意されているファイルもあるので不要であれば削除しておく。
##<PROJDIR>/config/database.php と <PROJDIR>/.env
昔、Laravelを使っていたときは .env を見た記憶が無いが、環境毎に異なる情報をまとめておくファイルがあるらしい。 database.php を参照するとenv(....)
という記述があり、これと関係しているらしい。
database.phpにはデータベースの接続情報が書かれている。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
],
host 、 database 、 username 、 password の辺りを変更すれば良さそうな気がしていたが間違え。 .envで設定がされている場合は、こちらが優先 になるらしい。.envを参照し、接続情報を書き換えておく。
DB_CONNECTION=mysql
#DB_HOST=127.0.0.1
DB_HOST=db00
DB_PORT=3306
#DB_DATABASE=homestead
DB_DATABASE=projdb
#DB_USERNAME=homestead
DB_USERNAME=proj
#DB_PASSWORD=secret
DB_PASSWORD=password
##マイグレーションを実行する
とりあえず接続情報を設定したので、動くかどうか確かめたい。マイグレーションを実行する。マイグレーションを実行するには<PROJDIR>/artisanを実行するのだが、これが要注意。あくまで、実行環境はphp-fpmコンテナ(app)であるということ。ローカルから実行してもデータベースにアクセスすることが出来ずエラーで終わる。
<PROJDIR>に移動して
docker-compose exec app php /var/www/html/projLaravel/artisan migrate
正しく実行できたか確認するには
docker-compose exec db mysql -u root -p -e "show databases;"
> +--------------------+
> | Database |
> +--------------------+
> | information_schema |
> | mysql |
> | performance_schema |
> | samples | <-- !!
> | sys |
> +--------------------+