🐳

docker-composeでminioを構築してSSL化する

2024/05/06に公開

経緯

元々Nextcloudを使っていたのですが、ファイルの読み込みが遅くminioに乗り換えることにしました。今回はnginxのリバースプロキシとDDNSのサブドメインを利用し、443ポートでwebコンソールとAPIエンドポイントを同時にlistenさせます。

minioの構築

まず、docker用のディレクトリを作成します。

mkdir minio && cd minio

その下にデータ用のディレクトリとdocker-compose.ymlを作成します。

mkdir data

docker-compose.ymlは以下の通りです。ユーザー名やパスワードなどは環境に合わせて置き換えてください。

version: '3.9'

services:
  minio:
    image: quay.io/minio/minio:latest
    container_name: s3-minio
    environment:
      MINIO_ROOT_USER: ユーザー名
      MINIO_ROOT_PASSWORD: パスワード
    command: server --address :9000 -console-address ":9090" /data
    volumes:
      - ./data:/data
    ports:
      - 9000:9000
      - 9090:9090

保存したら

sudo docker-compose up -d

でコンテナを作成します。

作成できたら、http://ipアドレス:9090でコンソールにアクセスできるか確認してください。ユーザー名とパスワードはdocker-compose.ymlで定義したものです。

その後webコンソールからバケットを作成してください。

SSL証明書の取得

今回はLet's Enctyptから証明書を取得します。自己証明書でもよいのですが、一部のS3クライアントでは認証が通らないこともあるので注意してください。

まずcertbotをインストールします。

sudo apt install certbot

次に、証明書を取得します。ワイルドカードでサブドメイン全体の証明書を取得できます。

sudo certbot -d example.com -d *.example.com

nginxの設定

最後にリバースプロキシの設定を行います。
今回は、minio.〇〇.comをAPIエンドポイント用に、console.〇〇.comをwebコンソール用にします。以下の設定をご自身の環境に合わせて書き換えて/etc/nginx.confに追加してください。


server {
   listen       443 ssl;
   listen  [::]:443 ssl;
   server_name  minio.〇〇.com;
   ssl_certificate /etc/letsencrypt/live/ドメイン/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey.pem;

   ignore_invalid_headers off;
   client_max_body_size 0;
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_connect_timeout 300;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      chunked_transfer_encoding off;

      proxy_pass http://localhost:9000/;

   }
}


server {

   listen       443 ssl;
   listen  [::]:443 ssl;
   server_name  console.〇〇.com;
   ssl_certificate /etc/letsencrypt/live/ドメイン/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/ドメイン/privkey.pem;

   ignore_invalid_headers off;
   client_max_body_size 0;
   proxy_buffering off;
   proxy_request_buffering off;

   location / {
      proxy_set_header Host $http_host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-NginX-Proxy true;

      real_ip_header X-Real-IP;

      proxy_connect_timeout 300;

      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      chunked_transfer_encoding off;

      proxy_pass http://localhost:9090/; 
   }
}

保存したら、sudo systemctl start nginxでnginxを起動させます。
クライアントからアクセスできれば構築は完了です。

最後に

nginx.confのやつをconf.d/に分けたらよかったかもしれないです。

Discussion