使用Laravel在本地环境中通过Docker进行HTTPS(SSL)通信
近期有一位用户提出了在本地环境中使用HTTPS通信的要求,正好最近在工作中有机会实践了一下,因此我想将这部分内容整理到Qiita上。
环境
- Mac
Laravel的设置
https://github.com/ucan-lab/docker-laravel
v.2.1.0
最強のLaravel開発環境をDockerを使って構築する【新編集版】
$ git clone git@github.com:ucan-lab/docker-laravel.git
$ cd docker-laravel
$ mkdir -p src
$ docker compose up -d
$ docker compose exec app composer create-project --prefer-dist laravel/laravel .
$ docker compose exec app php artisan key:generate
$ docker compose exec app php artisan storage:link
$ docker compose exec app chmod -R 777 storage bootstrap/cache
$ docker compose exec app php artisan migrate
认证机构,密钥准备
安装 mkcert 和 nss。
https://github.com/FiloSottile/mkcert
ローカルで信頼できる開発証明書を作成するためのツール
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
Network Security Services
FirefoxでlocalhostのSSLを有効化するために必要
$ brew install mkcert nss
创建本地认证机构(CA: Certification Authority)
$ mkcert -install
只在 localhost 时不显示 Chrome 的 SSL 警告,请在地址栏输入 chrome://flags/#allow-insecure-localhost。
将 DISABLED 修改为 ENABLED 并重新启动浏览器。
生成私钥和公钥
コマンドの実行は docker-laravel ディレクトリルートで行ってください。
$ mkcert -cert-file ./infra/docker/nginx/localhost.pem -key-file ./infra/docker/nginx/localhost-key.pem localhost
为了不将其纳入Git管理,创建一个.gitignore文件。
$ echo '*.pem' >> ./infra/docker/nginx/.gitignore
Docker的代码重写
docker-compose.yml 文件
将公开端口从80更改为443。
通常情况下,HTTPS使用443作为其众所周知的端口号。
在本地环境中,只要使用与其他容器不重复的端口号即可。
- https://ja.wikipedia.org/wiki/HTTPS
services:
web:
ports:
- target: 443
published: ${WEB_PUBLISHED_PORT:-443}
protocol: tcp
mode: host
基础设施/船外/指南针/默认.conf
请添加以下代码。
- http://nginx.org/en/docs/http/configuring_https_servers.html
server {
# listen 80;
# listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/conf.d/localhost.pem; # サーバ証明書
ssl_certificate_key /etc/nginx/conf.d/localhost-key.pem; # 秘密鍵
# ... 省略
}
基础设施/容器/引擎/Nginx/Dockerfile
下記のコードを追記する。
COPY ./infra/docker/nginx/*.pem /etc/nginx/conf.d/
- 秘密鍵、公開鍵をコピーしてます。
创建Docker镜像,重新生成容器
请在docker-laravel目录的根目录下执行命令。
$ docker compose down
$ docker compose build web
$ docker compose up -d
只要SSL证书已启用,就可以了。