2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Sail環境のhttps化まとめ

Last updated at Posted at 2024-07-16

はじめに

前回のLaravel環境お引越し記事のサーバのSSL化をまとめました。

環境

環境は前回に引き続きメインで使用しているLaravel10を使用していきます。

バージョン情報

コマンド
$ sail php artisan --version
Laravel Framework 10.48.16

HTTPS化の設定

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

環境の差異なのか若干詰まったところもあるので、そちらも纏めていきます。
基本的には参考サイト通りに導入できています。

SailのSSL化用パッケージの追加

コマンド
# パッケージの取得
$ 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サーバ証明書のパスを指定し、コンテナ側でも読み込むように設定しました。

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に更新しておきます。

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}'

影響があるかわからなかったですが、念のため再ビルドもしておきました。

コマンド
$ 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にも設定を追加しておきます。
これを入れないとレイアウトが崩れたので内部的には必要っぽいです。

app/Providers/AppServiceProvider.php
// 追加
use Illuminate\Support\Facades\URL;

    public function boot(): void
    {
        // 追加
        URL::forceScheme('https');
    }

この状態で起動した所、無事HTTPSでアクセスでき、HTTPにアクセスしてもHTTPSにリダイレクトされました!

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

最後に

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

参考サイト

・Laravelのsail 開発環境をhttps化
https://qiita.com/namazu777/items/56ee560c8c22e4ef6ef3

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?