docker-compose, nginx, mkcert で HTTPS(SSL)化
はじめに
nginx on docker(docker-compose) を FiloSottile/mkcert で生成した自己生成証明書(オレオレ証明書)で HTTPS(SSL)化する方法。
証明書はホストマシン上で作成。
TL;DR
- ホストマシンに FiloSottile/mkcert をインストール
- 証明書はホストマシン上(Amazon Linux 2)で生成
docker-compose.yml
のvolumes
でマウント- ポートフォワーディング設定を変更
- nginx のコンフィグファイルで SSL を有効化
目次
環境・条件
1 | # ホストマシン |
詳細
証明書作成まで
セットアップ
FiloSottile/mkcert の Installation に従って設定。
nss-tools
nss-tools
をインストール
1 | $ yum install -y nss-tools |
Homebrew on Linux
homebrew
をインストール(mkcert
を brew install
でインストールするので)
参考: Homebrew on Linux — Homebrew Documentation
1 | # インストール |
設定追加など
1 | $ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv) |
動作確認
1 | $ brew install hello |
mkcert
mkcert
をインストール
1 | # ホスト |
証明書作成
すべてホスト上で実行。
生成されるファイルについている +1
というのは、「localhost
以外にもう一つ(127.0.0.1
)有効な名前があるよ」という意味。
1 | $ mkcert -install |
Docker 設定変更
証明書のマウント
今回はホストの ./cert
をコンテナの /etc/nginx/ssl/cert
にマウントするので、ディレクトリ作ってファイルを移動しておく。
1 | $ mkdir cert |
docker-compose.yml
を変更
1 | version: '3' |
nginx 設定変更
nginx-default.conf
(/etc/nginx/conf.d/default.conf
に配置されるファイル) を変更
1 | server { |
動作確認
コンテナを再作成して https
でアクセスすると、証明書について警告されるので「詳細設定」→「xxxx にアクセスする」でページが表示されれば OK。
まとめ
- ホストマシンに FiloSottile/mkcert をインストール
- 証明書はホストマシン上(Amazon Linux 2)で生成
docker-compose.yml
のvolumes
でマウント- ポートフォワーディング設定を変更
- nginx のコンフィグファイルで SSL を有効化
その他・メモ
Nuxt with Nginx on Docker(Docker-Compose) という構成で、Nginx 箇所で SSL 化するようにしたが、色々と調べた感じだと他レイヤ(他箇所)で SSL 化する方法もあるっぽい。
なお、見ただけで試してないのでそれぞれの優劣(メリット/デメリット)は分からない。以下、参考文献を参照。
参考文献
色々と見て回ったので列挙しておくが、分類は適当(精査しきれてない)なのであしからず。
記事と関係あり
mkcert
- FiloSottile/mkcert: A simple zero-config tool to make locally trusted development certificates with any names you’d like.
- Homebrew on Linux — Homebrew Documentation
- ローカルでも valid な証明書が使いたい! - Qiita
- ローカル環境でSSLをオレオレ証明書で行っていて警告が出てる人に朗報 - Qiita
- 数分でできる!mkcertでローカル環境へのSSL証明書設定 | Hivelocity (ハイベロシティ) デジタルでビジネスを最適化
- mkcertで簡単にオレオレ証明書を発行する | RE:ENGINES
nginx
- Docker Compose上のNginxをHTTPS対応する - rinoguchiのメモブログ
- DockerでNginxのコンテナを作成し、https化してWebページやサービスを公開する方法 | Black Everyday Company
- EC2,Docker,NginxでLet’s Encryptを使ってSSLを導入する方法 - ソロメイカー
- ゼロからEC2+DockerでWordpressをnginx-proxyを利用してサブドメインに構築(SSL対応) - Qiita
- How to enable HTTPS on AWS EC2 running an NGINX Docker container? - Stack Overflow
- Nginx and Let’s Encrypt with Docker in Less Than 5 Minutes
- Nginx版:mkcertを使ってローカル環境でもDockerでも楽々SSL - Qiita
- dockerでnginx導入と複数サービスの展開 - Qiita
- 自己署名証明書でhttpsアクセスができるコンテナ - Qiita
- NginxにSSL証明書をインストールする手順 - Qiita
- SSLサーバ証明書 : Nginx サーバ証明書のインストール方法 | DigiCert(デジサート)
- SSL証明書の設定 Nginx | BestSSL
- nginx で ssl 設定をする - dogmap.jp
- Configuring HTTPS servers
- nginxのserver_nameとSSLの設定についてのメモ
- nginx で http でのアクセスを https にリダイレクト - Qiita
- nginxでのSSL通信 | ハックノート
記事と関係なし
docker-compose: https-portal
- docker内でhttps化・SSL通信をできるようにする - Qiita
- https-portalで既存のdocker環境をhttps化 | RE:ENGINES
- 既存環境に手を加えずにサクッとHTTPS化する (NAT配下でもok) - 水底
Nuxt
- 【Nuxt.js】ローカル環境をhttpsで起動する方法 - Qiita
- Nuxt.jsでlocalhostをSSL化する方法 - Qiita
- Nuxt.jsでSSL(https)化する方法 - もぐもぐプログラミング
- Nuxtのlocalhostを
https://ローカルIP:port
にする – webdev - localhost を https にする方法が結構簡単だった(Nuxt)|F.Shibusawa|note
- nuxt.jsのdevelopをhttpsで立ち上げる - Qiita
axios
関連記事
- Docker(Ubuntu) で Node.js バージョン指定インストール時に「Version 'x.y.z-1nodesource1' for 'nodejs' was not found」「returned a non-zero code 100」となる場合の対処法
- docker-lambda を使って AWS Lambda Function を開発する方法
- docker-lambda + sharp で画像変換する AWS Lambda Function
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)
- Laravel で現在の URL 取得方法まとめ
- Laravel で Cookie を使う(参照/設定/削除)