はじめに
前回の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サーバ証明書のパスを指定し、コンテナ側でも読み込むように設定しました。
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に更新しておきます。
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にも設定を追加しておきます。
これを入れないとレイアウトが崩れたので内部的には必要っぽいです。
// 追加
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