💬
ローカルDockerのnginxとRails(puma)でSSL対応したのでメモ
いきなり本題
業務で外部APIにリクエストした際にhttps通信じゃないとエラーになったのでローカルのDocker環境でSSL対応をしたのでざっくり作業メモ。無論オレオレ証明書です。
■ディレクトリ
docker-compose.yml
Dockerfile
nginx
┗ssl
| ┗コマンドで生成したssl関連ファイル
┗nginx.conf
手順
まずはdocker-compose.ymlにホストマシンの443のポートとnginxの443ポートをアタッチする。
volumesにはホスト側のnginx/sslとnginxコンテナの/etc/nginx/ssl指定する。
docker-compose.yml
version: "3.7"
services:
nginx:
image: nginx
build:
context: .
ports:
- 80:80
- 443:443
//省略
volumes:
- ./nginx/ssl:/etc/nginx/ssl
//省略
Dockerfile
FROM nginx:latest
# RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
次にnginxコンテナに入り、下記のコマンドを打つ
秘密鍵の作成
openssl genrsa -out /etc/nginx/ssl/server.key 2048
秘密鍵の署名
openssl req -new -key /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.csr
証明書
openssl x509 -days 3650 -req -signkey /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr -out /etc/nginx/ssl/server.crt
パスワードを聞かれたらテキトーに答えましょう。
他の所はenter連打でOK。
docker-compose.ymlでファイルのマウントを設定したので、ホストマシンのnginx/sslに先程のコマンドで生成されたファイルが表示されるので次回からはこれでOK.
nginx.confに下記のディレクティブを追加。server_nameは自分の環境に合わす。
server {
listen 443 ssl;
server_name *.lvh.me;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
#省略
}
}
あとは、普段と一緒でdocker-compose build
docker-compose up -d
をすればOK
Discussion