1
3

More than 5 years have passed since last update.

dockerで作った(nginxとphp-fpmとmysqlの連携)環境にいよいよLaravelのプロジェクトを作ったときのメモ

Last updated at Posted at 2019-02-07

前提

すでに、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に移動して

command
composer create-project laravel/laravel projLaravel --prefer-dist

./src/var/www/html/ projLaravel が出来上がる。今後はこのディレクトリ(パスを含めて)を<PROJDIR>と表記する。

--prefer-dist

--prefer-source というオプションもあるらしい(デフォルトはこちら)。違いについて調べていまひとつピンとこなかった。ザックリと

--prefer-source
は、開発利用。gitからソースコードを取得される。
--prefer-dist
は、基本安定版。パッケージ化されたバージョン。取得が早い。

といった感じなんだろうか。今は時間をかけていられないので調べるのは後回しとする。

データベースのマイグレーション

データベースの接続情報やテーブルの情報を設定し、データベースのマイグレーションを実施する。

テーブル作成

ここはLaravelの使い方の話なのであっさりと。

command
php artisan make:migration create_samples_table

<PROJDIR>/database/migrations/にマイグレーションファイルが作成される。上記コマンドで生成されたファイル以外にデフォルトで用意されているファイルもあるので不要であれば削除しておく。

<PROJDIR>/config/database.php と <PROJDIR>/.env

昔、Laravelを使っていたときは .env を見た記憶が無いが、環境毎に異なる情報をまとめておくファイルがあるらしい。 database.php を参照するとenv(....)という記述があり、これと関係しているらしい。

database.phpにはデータベースの接続情報が書かれている。

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,
        ],

hostdatabaseusernamepassword の辺りを変更すれば良さそうな気がしていたが間違え。 .envで設定がされている場合は、こちらが優先 になるらしい。.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>に移動して

command
docker-compose exec app php /var/www/html/projLaravel/artisan migrate

正しく実行できたか確認するには

command
docker-compose exec db mysql -u root -p -e "show databases;"
> +--------------------+
> | Database           |
> +--------------------+
> | information_schema |
> | mysql              |
> | performance_schema |
> | samples            | <-- !!
> | sys                |
> +--------------------+
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3