プログラミング ITインフラ

laravel7 のdocker-composeを公開します(ログイン認証機能付き)

laravel docker

概要

フリーランスエンジニア スリーネクスト

最近の開発環境はほぼDockerになっています。今回は2020年3月3日にLaravel7がリリースされたこともあり、今まで使っていたPHP系のdocker-composeファイルをlaravel7に合わせて公開しようと思います。

基本のログイン認証機能も追加しています。複雑になるのでメール認証やSNS認証は含んでいません。

Laravel7 docker-composeのgithub公開

開発環境

  • PHP7.4
  • Laravel7
  • MySQL8
  • Docker19.03

Github公開

GithubでLaravel7 Docker-composeのソースコードをアップロードしてます。

Laravel docker-composeの設定手順

step
1
gitクローン

$ git clone [email protected]:yoshis2/laravel7-auth-docker-compose.git
$ cd laravel7-auth-docker-compose

step
2
アプリ起動

$ docker-compose up -d --build

step
3
web-appの設定

$ docker-compose exec web-app composer install
$ docker-compose exec web-app cp .env.example .env
$ docker-compose exec web-app php artisan key:generate
$ docker-compose exec web-app php artisan migrate
composerやDockerのバージョンは最新にしておかないとエラーになる可能性があります。
必ず最新の状態にしてから上記コマンドを実行してください。

step
4
npmの設定

nodeのdockerは起動していないので起動してインストール、ビルドする方法を取る
nodeのステータスは [Exit 0]の状態ですが気にしないでください
$ docker-compose run node npm install
$ docker-compose run node npm run dev

step
5
動作確認

Laravelの認証画面紹介

トップページ画面

会員登録画面

ログイン画面

ログイン認証後画面

ハスワード再発行画面

Laravel7にログイン機能追加方法

今回紹介する記事のGithubにはログイン認証機能はすでについていますがつけるにはどうするか解説します。基本的にはLaravel6と認証方法の導入は変わりません。

繰り返しますがログイン機能追加方法は解説のためであり以下の手順は不要です。

step
1
migration実行

$ docker-compose exec web-app php artisan migrate

Laravelをインストールすると最初から入っているmigrationファイルがあるのでこちらを実行することになります。

step
2
Laravel/uiのインストール

$ docker-compose exec web-app composer require laravel/ui

LaravelにUI機能を追加します。

選択できるUIは以下の通り

  • Vue
  • React
  • Bootstrap
$ docker-compose exec web-app php artisan ui vue --auth

今回は一番人気のあるVueでログイン認証画面を追加します。

step
3
npm でWebpack実行

$ docker-compose run node npm install
$ docker-compose run node npm run dev

CSSやJSを整形するコマンドです。CSSやJSを変更するとこのコマンドを打つと反映されます。

基本的にはCSSやJSを変更すればすぐに反映されますがたまにCSSやJSが画面で反映しない時このコマンドで変更されます。

Laravel7 Dockerのログ確認

今回のdockerのせっていでは以下のログを出力しています。bugfixには欠かせないのでどこに何が出力されるのか確認しておきましょう。

ログ種類 ログの場所
PHP laravel7-auth-docker-compose/docker/php/logs
nginx laravel7-auth-docker-compose/docker/nginx/logs
MySQL laravel7-auth-docker-compose/docker/mysql/logs
Laravel laravel7-auth-docker-compose/storage/logs

ログインセッションをRedis

RedisをDocker-composeの中で起動させていますがセッションにRedisを利用しています。初期設定ではセッションをファイルで持たせているのですが設計上よくないことからRedisにしています。

セッションは基本7種類から選択できます。

  • file
  • cookie
  • database
  • apc
  • memcached
  • redis
  • dynamodb

変更方法はSESSION_DRIVERの項目をredis,database,fileのどれかを選択すればいいです

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=redis
SESSION_LIFETIME=120

Dokcer環境の作成が難しい

Dockerの設定は非常に複雑です。そのため、初心者が始めても理解できないことがあります。

Dockerを最低限理解するためにはこちらを知っておくことが必要です

  • コンテナ
  • イメージ
  • dockerネットワーク
  • Dockerfile
  • volume
  • ports
  • docker-compose

まず、Dockerについて上記のことを知った上でわかりやすいシンプルなdocker-composeの真似をすることをお勧めします。それでDockerについて理解を深めていきましょう

言語によってDockerの設定の違い

今回はLaravel7でのDocker-composeの設定でしたが私のメイン使用言語であるGo言語はまた全く違う設定をすることになります。どの言語に対しても汎用的に作れるようになるにはDockerの知識が必要になります。

ただし、Docker以外でKubernetesというサーバを使う技術が出てきています。kubernetesはもうすぐメインストリームとなるのですがこれを使うにはDockerの知識が必要になるのでDockerを習得することは必須になります。

公開したdocker-composeのメリット

Laravel7を簡単に起動することができます。最初の環境構築は上記のようにコマンドを複数回打ちましたが2回目以降は以下のコマンド一発で起動します。

$ docker-compose up -d

起動は1コマンド完了となります。

PHP Laravelのデメリット

Laravelはメジャーの言語であるがゆえに開発者が非常に多いです。多いため、常駐案件は安いです。月単価は80万円、90万円するものもありますがほぼ60万円程度です。常駐型フリーランスエンジニアの平均の月単価が70万円なので相場よりも低いことがわかります。

私はPHP大好きなのですが常駐案件ではPHPは避けてます。望める単価が手に入らないためです。

PHPのフレームワークはLaravel 1強になっている

PHPは少し前まではフレームワークが複数あってどのフレームワークがいいのかわかりませんでした。そこでシステムにより様々なフレームワークが乱立していたのですが最近ではLaravelを使うシステム以外をあまり見なくなりました。

以前あったPHPのフレームワークは以下の通りです。

  • Laravel
  • CakePHP
  • zend framework
  • Symfony
  • Phalcon
  • FuelPHP
  • CodeIgniter

今後はLaravelで統一してもらったほうが学習コストも少なく済むのでたすかりますね

Laravel7のリリース

laravelは半年に1回程度メジャーアップデートしています。結構頻繁なバージョンアップしているということはユーザーが多いということです。

Laravelのリリースノート

まとめ

Docker技術は当たり前になってきた時代なので今回のLaravel7をdocker-composeで立ち上げるということはできて当たり前になってくるような気がします。新しい技術はどんどん出てくるので学習は続くように思います。
とはいえ、まだまだできない人も多いと思うのでこちらを使って開発環境を構築する手伝いができればと思います。

またわからないことがあったらこちらにお問合せフォームがあるのでこちらにお問合せください。

お問合せページ

-プログラミング, ITインフラ
-,