Laravel8 を標準装備の Sail + Dockerコンテナを使ってインストールすると開発環境が一瞬で出来る件

このあいだ、ようやくLaravel8で開発するチャンスが。

これまではLTSのLaravel6ばかりで、なかなか新しいバージョンが選ばれなかったのですが、次に来る、Laravel9(おそらくLTS)への準備としては見識を深めたいところ。

いろいろ開発環境を構築するにあたって、インストールから変わっていたので記録を残します。

まずは環境構築

従来のやり方でも問題ないのですが、折角なので噂のSailを使ってみたい。
なので、まず、Dockerが開発PCにインストールされている必要があります。

https://www.docker.com/

入っていない方は、ここからインストール♪

Dockerとは

詳しくはググって下さい(丸投げwww)

  • ローカルPC内に、Dockerコンテナ単位に仮想サーバを立ち上げる。
  • 仮想サーバをローカルPCのポートにマッピングして利用する。
  • 複数のコンテナは、docker-compose を使ってまとめて管理すると幸せ。

こんな感じのものです。

今回のLaravel8+Sailの場合、デフォルトでこれらのコンテナ(仮想サーバ)が自動的に立ち上がります。

コンテナ名内容ポート
laravel.testLaravel8とphp(デフォルトでv8.0)、web環境がまとまったコンテナ。80
mysql言わずと知れた、mysql(v8.0)のコンテナ。3306
redisNoSQL、Redisのコンテナ。個人的に、あまりNoSQLは使わない。6379
meilisearch検索API、MeiliSearchのコンテナ。まったく触れたことは無し。7700
mailhogメール送信がローカルでテストできる。便利なMailHogコンテナ。1025
8025
seleniumスクレイピング、Seleniumのコンテナ。検証を自動化するのに便利なのか?

なので大元の開発環境には、Dockerさえ入っていれば、phpすら無くても大丈夫という。スグレモノです。

Laravel8のインストール

curl -s "https://laravel.build/hogehoge" | bash

hogehoge は任意のプロジェクト名に変えてもらえれば。
このプロジェクト名でディレクトリが作られ、その中にLaravel8が初期インストールされます。

Sailから各コンテナを起動

cd hogehoge
./vendor/bin/sail up

プロジェクトのディレクトリに移動し、sail up コマンドでコンテナが立ち上がります。
(初回だけDockerコンテナを構築するのに時間がかかります)

これが終われば、

http://localhost/

でLaravelにアクセスできるはず。です。

Sailコマンドも-dオプションで、バックグラウンド起動します。

./vendor/bin/sail up -d

その場合の終了はこちら。

./vendor/bin/sail down

ほんの一瞬で、開発環境がまるっと立ち上がりましたよ。

MySqlへのアクセス

./vendor/bin/sail mysql

でCLIでアクセスできますが、DB管理ツールなんかからもアクセスは可能です。
.envファイルを覗いてみると、

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=hogehoge
DB_USERNAME=sail
DB_PASSWORD=password

となっていると思いますので、普通にlocalhost(127.0.0.1)の3306ポート、ユーザー名 [ sail ]、パスワード [ password ] を使ってアクセス可能です。
ちなみに、ユーザー名だけを [ root ] に変えれば管理者権限でアクセスも出来ます。

このあたり、ググっても違った情報ばかりでハマりました。。結局、docker-compose.yml の設定内容から読み解きました。

phpMyAdminも入るよ

みんな大好き、phpMyAdminのコンテナもセットできます。

docker-compose.yml ファイルに以下を追加です。

    phpmyadmin:
      image: phpmyadmin/phpmyadmin
      links:
        - mysql:mysql
      ports:
        - 8080:80
      environment:
        MYSQL_USERNAME: '${DB_USERNAME}'
        MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
        PMA_HOST: mysql
      networks:
        - sail

これで Sailを立ち上げ直せば、以下からアクセス可能です。

http://localhost:8080

Sailコマンドを短縮

./vendor/bin/sail

いちいち叩くと長いので、

vi ~/.bash_profile

ターミナルの環境設定ファイルに

alias sail="./vendor/bin/sail"

こんな感じで、aliasを登録しておくと便利です。

その他のSailコマンド

phpをコマンドで叩く場合

sail php

DBのマイグレーションやコントローラーの追加などのartisanも、

sail artisan

composerでのモジュール追加も

sail composer

が使えます。

いたれりつくせりですね^^むっちゃ凄い。

さぁデプロイだ

docker-compose.ymlに環境がまとまってますので、サーバレスモジュールなどを追加すれば、AWS Lambdaなどにもサクッとデプロイできるみたいですね。こっちは未検証です。

このようなコンテナを使ったデプロイは初期作業も少なく楽なのですが……結局、コンテナ周りの学習コストや運用コストが増えるのと、以前、Kubernetes環境での運用で痛い目にあった経験があり……個人的には、超後ろ向き。

ミニマムのサーバ構成の枯れた技術で本番環境を用意するのが好みです。

今回も標準で、[ .gitignore ] ファイルまで組み込まれてますので、結局GitHub経由でLAMPサーバにデプロイしました。コンテナは使わずの運用です(笑)

その他、開発環境で必要になった、xdebug の導入についてはボリュームもあるので別記事にまとめます。