Cloudflare TunnelとNginxを使ってMinIOを建てる

固定IPアドレスがないのでCloudflare TunnelとリバースプロキシにNginxを使って自宅にMinIOを建てる。

自宅サーバーにMinIOを建てたいのですが、固定IPアドレスがないのでCloudflare TunnelとリバースプロキシにNginxを使うという話のメモ書きです。

環境

  • Ubuntu 22.04
  • Cloudflared version 2025.1.0
  • Nginx version: nginx/1.26.2
  • MinIO Version: RELEASE.2025-01-20T14-49-07Z

MinIOを建てる

Dockerで動かすため、以下のようなcompose.ymlを用意します。
ポート番号やデータ保管のボリュームやパスワードは好みで調整してください。
私は環境都合上、 network_mode: "host" を使っていますが、ポートマッピングで良いと思います。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
services:
  minio:
    image: minio/minio:latest
    container_name: minio
    network_mode: "host"
#    ports:
#      - "9000:9000" # MinIO API 用ポート
#      - "9090:9090" # MinIO コンソール用ポート
    environment:
      MINIO_ROOT_USER: "minio-user"
      MINIO_ROOT_PASSWORD: "minio-password"
      MINIO_DOMAIN: "example.com"
      MINIO_BROWSER_REDIRECT_URL: "http://example.com/console"
    command: server /data --console-address ":9090"
    restart: unless-stopped
    volumes:
      - /mnt/minio:/data

Nginxの設定

Configure NGINX Proxy for MinIO Server — MinIO Object Storage for Linuxを参考に、Nginxの設定を行います。
/consoleでWebコンソールにアクセスできるようにします。
client_max_body_sizeを設定しないと、大きなファイルのアップロードができないかもしれません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
server {
    listen 80;
    server_name example.com;

    ignore_invalid_headers off;
    proxy_buffering off;
    proxy_request_buffering off;
    client_max_body_size 100m;


    location / {
        proxy_pass http://127.0.0.1:9000/;
        proxy_set_header Host $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;

    }

    location /console/ {
        
        proxy_pass http://127.0.0.1:9090/;
        proxy_set_header Host $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;
        # WebSocket対応
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        chunked_transfer_encoding off;
        # リダイレクトで余計なスラッシュを防ぐ
        rewrite ^/console(/.*)$ $1 break;
    }
}

Cloudflare Tunnelの設定

Cloudflaredをインストールします。
Create a locally-managed tunnel (CLI) · Cloudflare Zero Trust docsを参考にします。

インストールを終えたら、Cloudflareのダッシュボードで、トンネルの設定をします。
メニューの場所はよく変わるのですが、この記事を書いている時点ではZero Trustのネットワーク、Tunnelsにあります。
トンネルを作成し、ウィザードに沿ってパブリックホスト名を設定します。
設定したドメインでMinIOにアクセスできれば完了です。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。