Laravel Sail環境のhttps化まとめ

## はじめに
前回の[Laravel環境お引越し記事](https://qiita.com/motuneko253/items/12ef476031c2fa389384)のサーバのSSL化をまとめました。

## 環境
環境は前回に引き続きメインで使用しているLaravel10を使用していきます。
### バージョン情報
```ruby:コマンド
$ sail php artisan --version
Laravel Framework 10.48.16
```

## HTTPS化の設定
今回HTTPS化するに辺り、以下の記事を大いに参考にさせて頂きました。

https://qiita.com/namazu777/items/56ee560c8c22e4ef6ef3


環境の差異なのか若干詰まったところもあるので、そちらも纏めていきます。
基本的には参考サイト通りに導入できています。
### SailのSSL化用パッケージの追加
```ruby:コマンド
# パッケージの取得
$ sail composer require ryoluo/sail-ssl --dev
./composer.json has been updated
Running composer update ryoluo/sail-ssl
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
  - Locking ryoluo/sail-ssl (v1.3.2)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Downloading ryoluo/sail-ssl (v1.3.2)
  - Installing ryoluo/sail-ssl (v1.3.2): Extracting archive
~省略~
No security vulnerability advisories found.
Using version ^1.3 for ryoluo/sail-ssl

# インストールの実行
$ sail artisan sail-ssl:install
Nginx container successfully installed in Docker Compose.
```

インストールが完了すると、「docker-compose.yml」にNginxの設定が追加されていました。
今回私は家で既に構築済みのLet's EncryptのSSLサーバ証明書があるため、そちらを読み込ませるようにしました。
NginxのvolumesにSSLサーバ証明書のパスを指定し、コンテナ側でも読み込むように設定しました。
```ruby:docker-compose.yml
        volumes:
            - 'sail-nginx:/etc/nginx/certs'
            - './vendor/ryoluo/sail-ssl/nginx/templates:/etc/nginx/templates'
            - './vendor/ryoluo/sail-ssl/nginx/generate-ssl-cert.sh:/docker-entrypoint.d/99-generate-ssl-cert.sh'
★追加       - '/etc/nginx/certs/privkey.pem:/etc/nginx/certs/server.key'
★追加       - '/etc/nginx/certs/cert.pem:/etc/nginx/certs/server.pem'
```
また、元々Laravel側で80をListenしているのですが、Nginxの設定と噛み合っておらず、80にアクセスしても443にリダイレクトされませんでした。
そのため、Laravelの元々の80のポートを削除し、Nginx側で80をLISTENするように修正しました。
うまく記載できず申し訳ないです。これは参考のソースとして末尾に記載のgitに更新しておきます。
```ruby:docker-compose.yml
    nginx:
        image: 'nginx:latest'
        ports:
削除            - '${HTTP_PORT:-8000}:80'
追加            - '${HTTP_PORT:-80}:80'
            - '${SSL_PORT:-443}:443'

    laravel.test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.3
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
                MYSQL_CLIENT: mariadb-client
        image: sail-8.3/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
削除            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
```

影響があるかわからなかったですが、念のため再ビルドもしておきました。
```ruby:コマンド
$ sail npm run build

> build
> vite build

vite v5.3.3 building for production...
✓ 54 modules transformed.
public/build/manifest.json             0.27 kB x gzip:  0.15 kB
public/build/assets/app-DrEXVF1d.css  35.79 kB x gzip:  6.69 kB
public/build/assets/app-Cs0QkU1O.js   78.50 kB x gzip: 29.14 kB
✓ built in 1.30s
```

また、参考サイトにあるように、AppServiceProviderにも設定を追加しておきます。
これを入れないとレイアウトが崩れたので内部的には必要っぽいです。
```ruby:app/Providers/AppServiceProvider.php
// 追加
use Illuminate\Support\Facades\URL;

    public function boot(): void
    {
        // 追加
        URL::forceScheme('https');
    }
```
この状態で起動した所、無事HTTPSでアクセスでき、HTTPにアクセスしてもHTTPSにリダイレクトされました！

以下のgitで編集したソースは公開しています！

https://github.com/motuneko253/test-project-v10

## 最後に
ここ数日記事を書く意欲が突然湧いてきて色々楽しいです。
今度はOpenVPNやLet's Encryptのコンテナ化なども検証し記事にまとめていきたいです！

## 参考サイト
・Laravelのsail 開発環境をhttps化
https://qiita.com/namazu777/items/56ee560c8c22e4ef6ef3