使用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

 

ScreenShot 2021-01-16 15.24.23.png

认证机构,密钥准备

安装 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。

ScreenShot 2021-01-16 14.56.07.png

将 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

 

ScreenShot 2021-01-16 14.54.27.png
ScreenShot 2021-01-16 14.54.39.png

只要SSL证书已启用,就可以了。

广告
将在 10 秒后关闭
bannerAds