💬

ローカルDockerのnginxとRails(puma)でSSL対応したのでメモ

2024/01/31に公開

いきなり本題

業務で外部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