129
126

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker × Laravel ローカル環境でHTTPS(SSL)通信する

Last updated at Posted at 2021-01-16

ローカル環境でもHTTPS通信したいという要望があり、ちょうど最近仕事でやる機会があったのでQiitaにもまとめたいと思います。

環境

  • Mac

Laravel環境

$ 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のインストール

$ brew install mkcert nss

ローカル認証局(CA: Certification Authority)の作成

$ mkcert -install

ChromeのSSL警告をlocalhostの時だけ表示しないようにする。
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が使われるのが一般的です。
ローカルでは他のコンテナと被らない番号であれば何でも良いです。

docker-compose.yml
services:
  web:
    ports:
      - target: 443
        published: ${WEB_PUBLISHED_PORT:-443}
        protocol: tcp
        mode: host

infra/docker/nginx/default.conf

下記のコードを追記する。

infra/docker/nginx/default.conf
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; # 秘密鍵

    # ... 省略
}

infra/docker/nginx/Dockerfile

下記のコードを追記する。

infra/docker/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証明書が有効化されていればokです。

129
126
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
129
126

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?