👣

LaradockでAPIサーバーとして使うLaravel 8.xを立ち上げるメモ

2021/09/16に公開

はじめに

経緯

vuetify v2の環境をDockerで気軽に作るの記事で、vuetifyとLaravelで作成したAPIサーバーと連携する環境について書きましたが、今回はAPIサーバー側のお話。

今まで自身が利用していたLaravelは、LTSの6系のバージョンです。
https://readouble.com/laravel/8.x/ja/releases.html

上記のリリースノートのとおり、バッグフィックス期限もあと少し、セキュリティフィックス期限までは残り1年を切りました。
次期LTSのバージョン9がリリースされたらそちらに飛びつくのですが、今のうちにLaravelの現最新バージョンにも触れておいた方が良いと思っています。

そう、この記事は、自身がLaravelのAPIサーバーで利用しているV.6系のポイントを、知見の整理がてらV.8系で動作検証しようという試みの、「メモ」です。

例のごとく、メモと言いつつも、誰かに話しかけるような文体になっていますが、未来の自分に話しかけています。ご了承のほど…

前提

環境や使うツールは以下のとおり

環境

  • Windows 10 Pro 64bit
  • Docker Desktop for Windows (on Hyper-V), Version 3.6.0

使っているツールなど

  • Laradock
    参考:https://laradock.io/
    Laradockは、Dockerを利用してPHP開発環境一式を簡単に構築できる仕組みです。
    Laravel専用環境かと思いきや、実はLaravel関係ないようです。
    Laradockを工夫しながら使おうとあれこれ試していると、うすうす感じることなのですが、本当に関係ないことを知ると戸惑います(名前的に)。
    それでも、単純に自作する必要がないので便利に使わせてもらっています。

  • REST Client:Insomnia
    参考:https://insomnia.rest/
    とても便利なRESTクライアントです。プロジェクトごとにワークスペース的なものを分けられたり、APIキーを環境変数で設定できたり、直感的に操作できたりで、今まで使ってきたRESTクライアントと違って、不満に思う箇所がないのではないか、というくらいです。
    この感動を記事に、、、と思ったのですが、すでに良記事がありました。すばらしいです。
    https://qiita.com/akkino_D-En/items/57fa3d27abea2033c44b

  • Git Bash (Git for Windows)
    参考:https://gitforwindows.org/

手順概要

大まかな流れは以下のとおり

  1. Laradockのインストール
  2. Laravelプロジェクト作成
  3. Laravelのためのnginx設定
  4. Laravelプロジェクトの動作確認

補足

今回は、Dockerの環境がすでに存在することを前提として、Laradockのインストールするところからの手順を記載しています。

Laradockのインストールは、ネット上に多数の知見が転がっているので、詳しい手順はそちらを参照していただくのが良いかと。

作業手順

(1) Laradockのインストール

以下、Git Bash で操作していきます。

  1. リポジトリからLaradock一式をclone
    公式の解説はこちら

    workspace$ git clone https://github.com/laradock/laradock.git
    Cloning into 'laradock'...
    remote: Enumerating objects: 13039, done.
    remote: Counting objects: 100% (121/121), done.
    remote: Compressing objects: 100% (74/74), done.
    remote: Total 13039 (delta 61), reused 83 (delta 38), pack-reused 12918
    Receiving objects: 100% (13039/13039), 12.43 MiB | 8.00 MiB/s, done.
    Resolving deltas: 100% (7100/7100), done.
    workspace$
    
  2. Laradockの設定ファイルを設置
    参考設定ファイルがあるのでそれをコピーして設定ファイルを設置します。

    workspace$ cd laradock/
    workspace/laradock (master)$ cp .env.example .env
    

    参考設定ファイルのままでも動作確認可能ですが、設定変更を行う場合、このタイミングがベターです。
    例えば、各コンテナのユーザーとパスワードなど、変更しておいた方が良いかもしれません。
    以下、いくつか参考を記載します。

    • PHPバージョンを変更する(任意)
      workspace/laradock (master)$ grep PHP_VERSION .env
      PHP_VERSION=7.3PHP_VERSION=7.4
      
    • タイムゾーンを変更する(任意)
      workspace/laradock (master)$ grep WORKSPACE_TIMEZONE .env
      WORKSPACE_TIMEZONE=UTC
      ↓
      WORKSPACE_TIMEZONE=Asia/Tokyo
      
  3. Laradockを起動
    Laradockを起動します、おもむろに。

    workspace/laradock (master)$ docker-compose up -d nginx mysql
    :
    Creating network "laradock_frontend" with driver "bridge"
    Creating network "laradock_backend" with driver "bridge"
    Creating network "laradock_default" with the default driver
    Creating laradock_mysql_1            ... done
    Creating laradock_docker-in-docker_1 ... done
    Creating laradock_workspace_1        ... done
    Creating laradock_php-fpm_1          ... done
    Creating laradock_nginx_1            ... done
    

    これで、WEBサーバーとphp-fpm(nginxとphpを連携する仕組み)、DBサーバー、そして環境を管理する(composerを打ったりする)workspaceコンテナが立ち上がります。それから、Dockerホストとコンテナをつなぐネットワークや、コンテナ同士をつなぐネットワークなども設置されます。つまり、Laravelを動かすためのコンテナ群が一通り稼働するのです、便利です。

  4. workspaceコンテナに接続
    続く作業のため、workspaceコンテナに接続します。

    workspace/laradock (master)$ docker-compose exec --user=laradock workspace bash
    laradock@e75c46668111:/var/www$
    

    以降、主にコンテナ内での操作となります。

(2) Laravelのプロジェクト作成

続いてLaravelのプロジェクトを新規作成します。
公式ドキュメントでプロジェクト作成方法がいくつか記載されていますが、ここではComposerを利用して作成します。
https://readouble.com/laravel/8.x/ja/installation.html#installation-via-composer

  1. Laravelプロジェクト作成
    /var/wwwに、example-app01という名称でプロジェクトを作成します。

    laradock@e75c46668111:/var/www$ composer create-project laravel/laravel example-app01
    
    • 参考:以下のようにすると、バージョンを指定して作成できます。
      laradock@e75c46668111:/var/www$ composer create-project laravel/laravel example-app01 "8.*"
      
    実際の実行イメージ
    laradock@e75c46668111:/var/www$ composer create-project laravel/laravel example-app01
    Creating a "laravel/laravel" project at "./example-app01"
    Installing laravel/laravel (v8.6.2)
    - Installing laravel/laravel (v8.6.2): Extracting archive
    Created project in /var/www/example-app01
    > @php -r "file_exists('.env') || copy('.env.example', '.env');"
    Loading composer repositories with package information
    Updating dependencies
    Lock file operations: 106 installs, 0 updates, 0 removals
    - Locking asm89/stack-cors (v2.0.3)
    - Locking brick/math (0.9.3)
    - Locking doctrine/inflector (2.0.3)
    - Locking doctrine/instantiator (1.4.0)
    - Locking doctrine/lexer (1.2.1)
    - Locking dragonmantank/cron-expression (v3.1.0)
    - Locking egulias/email-validator (2.1.25)
    - Locking facade/flare-client-php (1.9.1)
    - Locking facade/ignition (2.13.1)
    - Locking facade/ignition-contracts (1.0.2)
    - Locking fakerphp/faker (v1.16.0)
    - Locking filp/whoops (2.14.1)
    - Locking fruitcake/laravel-cors (v2.0.4)
    - Locking graham-campbell/result-type (v1.0.2)
    - Locking guzzlehttp/guzzle (7.3.0)
    - Locking guzzlehttp/promises (1.4.1)
    - Locking guzzlehttp/psr7 (2.0.0)
    - Locking hamcrest/hamcrest-php (v2.0.1)
    - Locking laravel/framework (v8.61.0)
    - Locking laravel/sail (v1.10.1)
    - Locking laravel/sanctum (v2.11.2)
    - Locking laravel/tinker (v2.6.1)
    - Locking league/commonmark (1.6.6)
    - Locking league/flysystem (1.1.5)
    - Locking league/mime-type-detection (1.7.0)
    - Locking mockery/mockery (1.4.4)
    - Locking monolog/monolog (2.3.4)
    - Locking myclabs/deep-copy (1.10.2)
    - Locking nesbot/carbon (2.53.1)
    - Locking nikic/php-parser (v4.12.0)
    - Locking nunomaduro/collision (v5.9.0)
    - Locking opis/closure (3.6.2)
    - Locking phar-io/manifest (2.0.3)
    - Locking phar-io/version (3.1.0)
    - Locking phpdocumentor/reflection-common (2.2.0)
    - Locking phpdocumentor/reflection-docblock (5.2.2)
    - Locking phpdocumentor/type-resolver (1.4.0)
    - Locking phpoption/phpoption (1.8.0)
    - Locking phpspec/prophecy (1.14.0)
    - Locking phpunit/php-code-coverage (9.2.6)
    - Locking phpunit/php-file-iterator (3.0.5)
    - Locking phpunit/php-invoker (3.1.1)
    - Locking phpunit/php-text-template (2.0.4)
    - Locking phpunit/php-timer (5.0.3)
    - Locking phpunit/phpunit (9.5.9)
    - Locking psr/container (1.1.1)
    - Locking psr/event-dispatcher (1.0.0)
    - Locking psr/http-client (1.0.1)
    - Locking psr/http-factory (1.0.1)
    - Locking psr/http-message (1.0.1)
    - Locking psr/log (1.1.4)
    - Locking psr/simple-cache (1.0.1)
    - Locking psy/psysh (v0.10.8)
    - Locking ralouphie/getallheaders (3.0.3)
    - Locking ramsey/collection (1.2.1)
    - Locking ramsey/uuid (4.2.1)
    - Locking sebastian/cli-parser (1.0.1)
    - Locking sebastian/code-unit (1.0.8)
    - Locking sebastian/code-unit-reverse-lookup (2.0.3)
    - Locking sebastian/comparator (4.0.6)
    - Locking sebastian/complexity (2.0.2)
    - Locking sebastian/diff (4.0.4)
    - Locking sebastian/environment (5.1.3)
    - Locking sebastian/exporter (4.0.3)
    - Locking sebastian/global-state (5.0.3)
    - Locking sebastian/lines-of-code (1.0.3)
    - Locking sebastian/object-enumerator (4.0.4)
    - Locking sebastian/object-reflector (2.0.4)
    - Locking sebastian/recursion-context (4.0.4)
    - Locking sebastian/resource-operations (3.0.3)
    - Locking sebastian/type (2.3.4)
    - Locking sebastian/version (3.0.2)
    - Locking swiftmailer/swiftmailer (v6.2.7)
    - Locking symfony/console (v5.3.7)
    - Locking symfony/css-selector (v5.3.4)
    - Locking symfony/deprecation-contracts (v2.4.0)
    - Locking symfony/error-handler (v5.3.7)
    - Locking symfony/event-dispatcher (v5.3.7)
    - Locking symfony/event-dispatcher-contracts (v2.4.0)
    - Locking symfony/finder (v5.3.7)
    - Locking symfony/http-client-contracts (v2.4.0)
    - Locking symfony/http-foundation (v5.3.7)
    - Locking symfony/http-kernel (v5.3.7)
    - Locking symfony/mime (v5.3.7)
    - Locking symfony/polyfill-ctype (v1.23.0)
    - Locking symfony/polyfill-iconv (v1.23.0)
    - Locking symfony/polyfill-intl-grapheme (v1.23.1)
    - Locking symfony/polyfill-intl-idn (v1.23.0)
    - Locking symfony/polyfill-intl-normalizer (v1.23.0)
    - Locking symfony/polyfill-mbstring (v1.23.1)
    - Locking symfony/polyfill-php72 (v1.23.0)
    - Locking symfony/polyfill-php73 (v1.23.0)
    - Locking symfony/polyfill-php80 (v1.23.1)
    - Locking symfony/polyfill-php81 (v1.23.0)
    - Locking symfony/process (v5.3.7)
    - Locking symfony/routing (v5.3.7)
    - Locking symfony/service-contracts (v2.4.0)
    - Locking symfony/string (v5.3.7)
    - Locking symfony/translation (v5.3.7)
    - Locking symfony/translation-contracts (v2.4.0)
    - Locking symfony/var-dumper (v5.3.7)
    - Locking theseer/tokenizer (1.2.1)
    - Locking tijsverkoyen/css-to-inline-styles (2.2.3)
    - Locking vlucas/phpdotenv (v5.3.0)
    - Locking voku/portable-ascii (1.5.6)
    - Locking webmozart/assert (1.10.0)
    Writing lock file
    Installing dependencies from lock file (including require-dev)
    Package operations: 106 installs, 0 updates, 0 removals
    - Installing doctrine/inflector (2.0.3): Extracting archive
    - Installing doctrine/lexer (1.2.1): Extracting archive
    - Installing symfony/polyfill-ctype (v1.23.0): Extracting archive
    - Installing webmozart/assert (1.10.0): Extracting archive
    - Installing dragonmantank/cron-expression (v3.1.0): Extracting archive
    - Installing symfony/polyfill-php80 (v1.23.1): Extracting archive
    - Installing symfony/polyfill-mbstring (v1.23.1): Extracting archive
    - Installing symfony/var-dumper (v5.3.7): Extracting archive
    - Installing symfony/polyfill-intl-normalizer (v1.23.0): Extracting archive
    - Installing symfony/polyfill-intl-grapheme (v1.23.1): Extracting archive
    - Installing symfony/string (v5.3.7): Extracting archive
    - Installing psr/container (1.1.1): Extracting archive
    - Installing symfony/service-contracts (v2.4.0): Extracting archive
    - Installing symfony/polyfill-php73 (v1.23.0): Extracting archive
    - Installing symfony/deprecation-contracts (v2.4.0): Extracting archive
    - Installing symfony/console (v5.3.7): Extracting archive
    - Installing psr/log (1.1.4): Extracting archive
    - Installing monolog/monolog (2.3.4): Extracting archive
    - Installing voku/portable-ascii (1.5.6): Extracting archive
    - Installing phpoption/phpoption (1.8.0): Extracting archive
    - Installing graham-campbell/result-type (v1.0.2): Extracting archive
    - Installing vlucas/phpdotenv (v5.3.0): Extracting archive
    - Installing symfony/css-selector (v5.3.4): Extracting archive
    - Installing tijsverkoyen/css-to-inline-styles (2.2.3): Extracting archive
    - Installing symfony/routing (v5.3.7): Extracting archive
    - Installing symfony/process (v5.3.7): Extracting archive
    - Installing symfony/polyfill-php72 (v1.23.0): Extracting archive
    - Installing symfony/polyfill-intl-idn (v1.23.0): Extracting archive
    - Installing symfony/mime (v5.3.7): Extracting archive
    - Installing symfony/http-foundation (v5.3.7): Extracting archive
    - Installing symfony/http-client-contracts (v2.4.0): Extracting archive
    - Installing psr/event-dispatcher (1.0.0): Extracting archive
    - Installing symfony/event-dispatcher-contracts (v2.4.0): Extracting archive
    - Installing symfony/event-dispatcher (v5.3.7): Extracting archive
    - Installing symfony/error-handler (v5.3.7): Extracting archive
    - Installing symfony/http-kernel (v5.3.7): Extracting archive
    - Installing symfony/finder (v5.3.7): Extracting archive
    - Installing symfony/polyfill-iconv (v1.23.0): Extracting archive
    - Installing egulias/email-validator (2.1.25): Extracting archive
    - Installing swiftmailer/swiftmailer (v6.2.7): Extracting archive
    - Installing symfony/polyfill-php81 (v1.23.0): Extracting archive
    - Installing ramsey/collection (1.2.1): Extracting archive
    - Installing brick/math (0.9.3): Extracting archive
    - Installing ramsey/uuid (4.2.1): Extracting archive
    - Installing psr/simple-cache (1.0.1): Extracting archive
    - Installing opis/closure (3.6.2): Extracting archive
    - Installing symfony/translation-contracts (v2.4.0): Extracting archive
    - Installing symfony/translation (v5.3.7): Extracting archive
    - Installing nesbot/carbon (2.53.1): Extracting archive
    - Installing league/mime-type-detection (1.7.0): Extracting archive
    - Installing league/flysystem (1.1.5): Extracting archive
    - Installing league/commonmark (1.6.6): Extracting archive
    - Installing laravel/framework (v8.61.0): Extracting archive
    - Installing facade/ignition-contracts (1.0.2): Extracting archive
    - Installing facade/flare-client-php (1.9.1): Extracting archive
    - Installing facade/ignition (2.13.1): Extracting archive
    - Installing fakerphp/faker (v1.16.0): Extracting archive
    - Installing asm89/stack-cors (v2.0.3): Extracting archive
    - Installing fruitcake/laravel-cors (v2.0.4): Extracting archive
    - Installing psr/http-message (1.0.1): Extracting archive
    - Installing psr/http-client (1.0.1): Extracting archive
    - Installing ralouphie/getallheaders (3.0.3): Extracting archive
    - Installing psr/http-factory (1.0.1): Extracting archive
    - Installing guzzlehttp/psr7 (2.0.0): Extracting archive
    - Installing guzzlehttp/promises (1.4.1): Extracting archive
    - Installing guzzlehttp/guzzle (7.3.0): Extracting archive
    - Installing laravel/sail (v1.10.1): Extracting archive
    - Installing laravel/sanctum (v2.11.2): Extracting archive
    - Installing nikic/php-parser (v4.12.0): Extracting archive
    - Installing psy/psysh (v0.10.8): Extracting archive
    - Installing laravel/tinker (v2.6.1): Extracting archive
    - Installing hamcrest/hamcrest-php (v2.0.1): Extracting archive
    - Installing mockery/mockery (1.4.4): Extracting archive
    - Installing filp/whoops (2.14.1): Extracting archive
    - Installing nunomaduro/collision (v5.9.0): Extracting archive
    - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
    - Installing phpdocumentor/type-resolver (1.4.0): Extracting archive
    - Installing phpdocumentor/reflection-docblock (5.2.2): Extracting archive
    - Installing sebastian/version (3.0.2): Extracting archive
    - Installing sebastian/type (2.3.4): Extracting archive
    - Installing sebastian/resource-operations (3.0.3): Extracting archive
    - Installing sebastian/recursion-context (4.0.4): Extracting archive
    - Installing sebastian/object-reflector (2.0.4): Extracting archive
    - Installing sebastian/object-enumerator (4.0.4): Extracting archive
    - Installing sebastian/global-state (5.0.3): Extracting archive
    - Installing sebastian/exporter (4.0.3): Extracting archive
    - Installing sebastian/environment (5.1.3): Extracting archive
    - Installing sebastian/diff (4.0.4): Extracting archive
    - Installing sebastian/comparator (4.0.6): Extracting archive
    - Installing sebastian/code-unit (1.0.8): Extracting archive
    - Installing sebastian/cli-parser (1.0.1): Extracting archive
    - Installing phpunit/php-timer (5.0.3): Extracting archive
    - Installing phpunit/php-text-template (2.0.4): Extracting archive
    - Installing phpunit/php-invoker (3.1.1): Extracting archive
    - Installing phpunit/php-file-iterator (3.0.5): Extracting archive
    - Installing theseer/tokenizer (1.2.1): Extracting archive
    - Installing sebastian/lines-of-code (1.0.3): Extracting archive
    - Installing sebastian/complexity (2.0.2): Extracting archive
    - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive
    - Installing phpunit/php-code-coverage (9.2.6): Extracting archive
    - Installing doctrine/instantiator (1.4.0): Extracting archive
    - Installing phpspec/prophecy (1.14.0): Extracting archive
    - Installing phar-io/version (3.1.0): Extracting archive
    - Installing phar-io/manifest (2.0.3): Extracting archive
    - Installing myclabs/deep-copy (1.10.2): Extracting archive
    - Installing phpunit/phpunit (9.5.9): Extracting archive
    63 package suggestions were added by new dependencies, use `composer suggest` to see details.
    Package sebastian/resource-operations is abandoned, you should avoid using it. No replacement was suggested.
    Generating optimized autoload files
    > Illuminate\Foundation\ComposerScripts::postAutoloadDump
    > @php artisan package:discover --ansi
    Discovered Package: facade/ignition
    Discovered Package: fruitcake/laravel-cors
    Discovered Package: laravel/sail
    Discovered Package: laravel/sanctum
    Discovered Package: laravel/tinker
    Discovered Package: nesbot/carbon
    Discovered Package: nunomaduro/collision
    Package manifest generated successfully.
    75 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    > @php artisan vendor:publish --tag=laravel-assets --ansi
    No publishable resources for tag [laravel-assets].
    Publishing complete.
    > @php artisan key:generate --ansi
    Application key set successfully.
    laradock@e75c46668111:/var/www$
    
  2. 設定調整
    Laravel 6.xでは、.envを自分でコピーし、php artisan key:generateも自分で実行したりしましたが、Laravel 8.xでは自動ですね。

    この記事の内容では、設定調整しなくても問題なく動作確認できるのですが、忘れないうちに最低限の設定調整をしておきます。

    laradock@e75c46668111:/var/www$ cd example-app01/
    laradock@e75c46668111:/var/www/example-app01$ vi .env
    

    変更内容は以下です。

    APP_URL=http://localhost
    ↓
    APP_URL=http://localhost/app01
    

    Laradock側でDBのパスワードを変えた場合など、必要があればそれらも変更しておきましょう。

    終わったら元のディレクトリへ

    laradock@e75c46668111:/var/www/example-app01$ cd ..
    laradock@e75c46668111:/var/www$ 
    

(3) Laravelのためのnginx設定

先ほど作成したLaravelプロジェクトをブラウザから閲覧できるようにするためのnginxの設定を行います。

簡単な設定について

簡単な設定としては、nginxの公開ディレクトリ(rootディレクティブ)を、Laravelプロジェクトのpublicディレクトリに設定すれば良いです。

    root /var/www/example-app01/public;

この場合、ブラウザでhttp://localhost/にアクセスすることで、Laravelプロジェクトに閲覧できるようになります。

ここで行う設定について

ただし、前述の構成だと、別のLaravelプロジェクトを追加した場合に、公開するLaravelプロジェクトを都度切り替える必要が出てきます。
あまりないシチュエーションかもしれませんが、気軽にプロジェクトを作成し、いつでも閲覧可能な状態を維持するため、ここではLaravelプロジェクトをサブディレクトリ配下に設置する構成を組みます。

具体的には、nginxの公開ディレクトリに、各Laravelプロジェクトのpublicディレクトリへのシンボリックリンクを設置し、nginxに必要な設定を行います。
これにより、ブラウザでhttp://localhost/app01/にアクセスすることで、Laravelプロジェクトに閲覧できるようにします。

設定手順

  1. Laravelプロジェクト公開ディレクトリの準備
    nginxの公開ディレクトリを作成し、そこにLaravelプロジェクトの公開ディレクトリへのシンボリックリンクを作成します。

    laradock@e75c46668111:/var/www$ mkdir public
    laradock@e75c46668111:/var/www$ cd public/
    laradock@e75c46668111:/var/www/public$ ln -s ../example-app01/public/ app01
    laradock@e75c46668111:/var/www/public$ ls -l
    total 2
    lrwxr-xr-x 1 laradock laradock 1067 Sep 16 13:37 app01 -> ../example-app01/public/
    laradock@e75c46668111:/var/www/public$ cd /var/www
    laradock@e75c46668111:/var/www$ 
    
  2. nginxのdefault.conf設定ファイルの修正
    default.confのLaravelの設定をサブディレクトリの構成に変更します。

    laradock@e75c46668111:/var/www$ cd laradock/nginx/sites/
    laradock@e75c46668111:/var/www$ cp -p default.conf default.conf.org
    laradock@e75c46668111:/var/www$ vi default.conf
    

    変更内容は以下です。

    laradock@e75c46668111:/var/www/laradock/nginx/sites$ diff -u2 default.conf.org default.conf
    --- default.conf.org    2021-09-16 13:07:44.183087200 +0900
    +++ default.conf        2021-09-16 14:18:24.855682700 +0900
    @@ -14,7 +14,10 @@
        index index.php index.html index.htm;
    
        location / {
    -         try_files $uri $uri/ /index.php$is_args$args;
    +        return 403;
    +    }
    +    location /app01/ {
    +        try_files $uri $uri/ /app01/index.php$is_args$args;
        }
    
        location ~ \.php$ {
    
    変更後のdefault.conf 一部抜粋
    <前略>
        location / {
            return 403;
        }
        location /app01/ {
            try_files $uri $uri/ /app01/index.php$is_args$args;
        }
    <後略>
    
  3. dockerホスト側からnginxを再起動
    設定を反映するため、nginxを再起動します。コンテナ内部からではなく、dockerホスト側で再起動コマンドを実行します。

    workspace/laradock (master)$ docker-compose restart nginx
    

これで、nginxの設定は完了です。

(4) Laravelプロジェクトの動作確認

さて、公開したLaravelプロジェクトの動作確認をしていきます。

  1. Laravelのwelcome画面が表示されるか
    まずは、Laravelプロジェクトのリソースを変更しないままアクセスしてみます。

    ブラウザで以下のURLにアクセスします。
    http://localhost/app01/

    以下のようなロゴ・タイトルの画面、すなわちWelcome画面が表示されれば、公開ディレクトリの設定は問題ありません。
    logoLaravel

  2. LaravelのWEB設定の動作確認
    前述のようにWelcome画面が表示されたとしても、まだLaravelが正しく設置できているとは限りません。

    例えばdefault.confの try_files がコメントアウトされていても、http://localhost/app01/でWelcome画面は表示されます。

    location /app01/ {
        # try_files $uri $uri/ /app01/index.php$is_args$args;
    }
    

    ※実際に試す場合には、docker-compose restart nginx をお忘れなきよう

    そこで、example-app01プロジェクトのWEBルート設定に動作確認用の定義を記載し、ブラウザからアクセスして確認します。

    WEBルート設定は、以下のファイルです。
    /var/www/example-app01/routes/web.php
    こちらに以下を追記します。

    Route::get('/test', function () {
        return view('welcome');
    });
    

    ブラウザで以下のURLにアクセスします。
    http://localhost/app01/test/

    先ほどのWelcome画面が表示されればOKです。

  3. LaravelのAPI設定の動作確認用定義
    ここまでの確認ができていれば、基本的な設定に問題はないと思います。
    最後に、APIの動作確認をしますが、APIにアクセスするためのURIさえ分かれば問題なく確認できると思います。

    WEB設定と同様に、APIルート設定に動作確認用の定義を記載します。
    APIルート設定は、web.phpと同じディレクトリにあるapi.phpファイルです。
    /var/www/example-app01/routes/api.php
    こちらに以下を追記します。

    Route::get('/test', function () {
        return response()->json(['message' => 'test'], 200);
    });
    
  4. LaravelのAPI設定の動作確認
    ブラウザでも動作確認できますが、せっかくなのでRESTクライアントで動作確認します。
    (面倒な方はブラウザでhttp://localhost/app01/api/test/にアクセスして、以下の7のJSONデータが表示されればOKです)

    ここでは、RESTクライアントの Insomnia を利用して確認します。

    1. ダッシュボードで、「Create」をクリックし、「Request Collection」をクリック、「Example App01」など適当に名前を入力して「Create」をクリックする。
    2. 作成したCollectionをクリックして開く
    3. 左側のペインの(+)アイコンをクリックしてメニューを開き、「New Request」をクリックする。
    4. 適切なNameで、GETのRequestをCreateする。
    5. 中央のペインのURL入力欄に、http://localhost/app01/api/test/を入力する。
    6. URL右側の「Send」をクリックして実行し、右側のペインの実行結果を確認する。
    7. 以下のJSONデータが表示されればOKです。
      {
          "message": "test"
      }
      

今回はここまでです。おつかれさまでした。

Discussion