🌬️

Docke+Laravel8+Breeze環境作成

2022/02/10に公開

前置き

あぁー、JetStream無しでSPA作りてぇなぁと思っていたらBreezeなる認証パッケージが出ていたので触ってみます。
頭が悪い自分はきっと直ぐに忘れるだろうから細かめに自分用に備忘録として残しときます。
この記事では環境構築までを行い、それ以降はまた気が向いたら書こうかなって思います。

Docker環境作成

ディレクトリ構成

下記の構成でディレクトリとファイルを作ってきます。
トップディレクトリ名はプロジェクト名の「lara_base」で作ります。

以下各ファイルの説明

.gitkeepと.gitignore
空のディレクトリはコミットできないので、その対策として作成しています。
.gitkeep中身は空です。ただ存在しているだけです。
.gitignoreに下記記載しておくとdbディレクトリをGitで管理できるようになります。

.gitignore
/db/data
/db/my.cnf
/db/sql
!.gitkeep

docker-compose.yml
適当にDocker環境の設定を書いていきます。
今回はLaravelを動かすWebコンテナとMySQLを動かすDBコンテナという2構成です。

docker-compose.yml
version: '3'
services:
  lara_base_web:
    build: .
    container_name: lara_base_web
    volumes:
      - ./web:/var/www/html/lara_base
    ports:
      - 8081:8081
      - 3000:3000
  lara_base_db:
    image: mariadb:latest
    container_name: lara_base_db
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: lara_base
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
      TZ: Asia/Tokyoa
    volumes:
    - ./db/data:/var/lib/mysql
    - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
    - ./db/sql:/docker-entrypoint-initdb.d
    ports:
    - 3306:3306

Dockerfile
作成する環境をつらつらと書いてゆきます。
新しいもの好きなのでPHP8で作成。Composerもここで入れています。

Dockerfile
FROM php:8.0-fpm

RUN apt-get update \
    && apt-get install -y wget git unzip libpq-dev \
    && docker-php-ext-install pdo_mysql\
    && : 'Install Node.js' \
    &&  curl -sL https://deb.nodesource.com/setup_12.x | bash - \
    && apt-get install -y nodejs \
    && : 'Install PHP Extensions' \
    && docker-php-ext-install -j$(nproc) pdo_pgsql 

ENV COMPOSER_ALLOW_SUPERUSER 1
COPY --from=composer /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html/lara_base

Dockerビルド

下記コマンドでビルド&起動

lara_base % docker-compose up -d

できたらコンテナにお邪魔します。

lara_base % docker-compose exec lara_base_web bash
/var/www/html/lara_base# 

Laravelインストールと初期設定

Composerでインストール

まずはコンテナ内で「composer」コマンドを実行します。
かっちょよいAAとバージョン情報が表示されたら正常にComposerがインストールされています。
※便宜上コマンドプロンプトを$で表記しています。

$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.2.3 2021-12-31 12:18:53

下記コマンドを実行するとLaravelの最新バージョンがwebディレクトリにインストールされます。

$ composer create-project laravel/laravel --prefer-dist .

DBの接続設定

webディレクトリ内にLaravelのファイル群がブリブリと作られたので、初期設定です。
まずは.envファイルにDBの設定等々記載します。

APP_NAME=Lara_base  ☆とくにこだわりが無ければ変える必要なし
APP_ENV=local
APP_KEY=base64:vNfR+kcj+nb1qWU+bP8w+b8Cy9CnwruUrtzbWnwW8Ok=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=daily  ☆ログを日付ごとに出力するように設定
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=lara_base_db ☆docker-compose.ymlに記載した内容を設定
DB_PORT=3306
DB_DATABASE=lara_base ☆docker-compose.ymlに記載した内容を設定
DB_USERNAME=root             ☆docker-compose.ymlに略
DB_PASSWORD=password     ☆docker-compo略

下記コマンドでステータスを確認します。

$ php artisan migrate:status
Migration table not found.

赤い文字でMigration table not found.と表示されれば無事DBに接続ができているのでOKです。

タイムゾーンと言語設定

configディレクトリ内のapp.phpを開いて下記部分を書き換えます。

/web/config/app.php
//'timezone' => 'UTC',
'timezone' => 'Asia/Tokyo',

//'locale' => 'en',
'locale' => 'ja',

次に下記コマンドを実行して日本語化ツールのインストーラをダウンロードして実行して削除

$ php -r "copy('https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');"
$ php -f install-ja-lang.php
$ php -r "unlink('install-ja-lang.php');"

/web/resource/lang/下にjaディレクトリが作成されていればOKです。
この中に何があるのかは君の目で確かめよう!

起動して確認

開発用サーバを下記コマンドで起動し、ちゃんと動くか確認です。

$ php artisan serve --host=0.0.0.0 --port=8081

http://127.0.0.1:8081/ へアクセスしてLaravelのスタートページが表示されればOKです。

Laravel Breezeのインストール

下記コマンドでインストール&インストール
ついでにマイグレーションもここでやっちゃおう

$ composer require laravel/breeze
$  php artisan breeze:install
$ php artisan migrate

フロントのVueライブラリを表示するためにnpmをインストール&ビルド

$ npm install && npm run dev

ブラウザを更新すると右上にLoginとRegisterが表示されたので多分成功。

ユーザ登録すると特に設定項目のないシンプルなダッシュボードが表示されます。
こういうのでいいんだよ。

おわりに

今日はここまでで一旦終わります。
環境構築だけしかしていないですが、触ってみて一番に思ったのが、認証系のコントローラなどがちゃんとAppディレクトリに作成されているので、改変やカスタマイズ等がし易いと思いました。

JetStreamでは認証関係のControllerやRouteがVendor内に隠されていたので、ドキュメントを眺めながらウンウン言っていましたが、こっちの方がシンプルでわかり易いです。

また、JetStreamではプロフィール設定等の基本機能がデフォルトでできていて豪華な反面、ちょっと外れたことをしようとするとドキュメントと睨めっこしなきゃできなかったので、これくらいシンプルでわかり易い方が個人的に好きです。

今回作成したものは下記ブランチにコミットしました。
https://github.com/404hiro/lara_base/tree/setup_env

参考

https://readouble.com/laravel/8.x/ja/starter-kits.html

Discussion