docker-composeでminioを構築してSSL化する
経緯
元々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