本教程将指导你如何使用 Docker Compose 部署 MinIO,并通过 Nginx Proxy Manager (NPM) 进行反向代理,实现安全的公网访问。

使用这个教程可以让Cloudflare来反代,最后达到的效果流量依然走CF的CDN,同时还实现了类似于云厂方的子域名bucket.domain.com 访问的效果。可惜Cloudflare不为免费套餐提供三级泛解析域名的证书,否则甚至可以使用三级域名来实现,比如bucket.us.domain.com来访问的效果。

搭配 sanyue 的 Cloudflare-IMGHUB 可以再一次套娃,最终的效果如下。

图床

我是采用的docker部署教程:https://cfbed.sanyue.de/deployment/docker.html 来部署的图床,当然你也可以用cloudflare worker的部署方式来部署。

核心思路

  1. MinIO 容器:将端口(如 9000, 9001)直接映射到宿主机上。
  2. NPM 容器:通过反向代理,将公网域名的请求转发到宿主机的 IP 和映射的端口上。
  3. 通信路径用户 -> NPM -> 宿主机IP -> MinIO容器

📋 第1步:准备 docker-compose.yml.env 文件

创建一个目录(例如 ~/minio),并在其中创建以下两个文件。

1. .env 文件
用于存储敏感信息,避免硬编码。

# MinIO 访问凭证 (请务必修改)
MINIO_ROOT_USER=myadmin
MINIO_ROOT_PASSWORD=Your-Complex-Password-123

# MinIO 公网域名配置 (请修改为你的域名)
MINIO_DOMAIN=your-domain.com
MINIO_SERVER_URL=https://your-domain.com
MINIO_BROWSER_REDIRECT_URL=https://minio-console.your-domain.com

2. docker-compose.yml 文件
这个配置将 MinIO 的端口直接暴露在宿主机上。

services:
  minio:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
    container_name: minio-server
    restart: unless-stopped
    
    # 将容器端口直接映射到宿主机端口
    ports:
      - "9000:9000" # API 端口
      - "9001:9001" # Console (Web UI) 端口
        
    # 从 .env 文件加载环境变量
    environment:
      - MINIO_ROOT_USER=${MINIO_ROOT_USER}
      - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
      - MINIO_DOMAIN=${MINIO_DOMAIN}
      - MINIO_SERVER_URL=${MINIO_SERVER_URL}
      - MINIO_BROWSER_REDIRECT_URL=${MINIO_BROWSER_REDIRECT_URL}
          
    # 持久化数据和配置
    volumes:
      - ./data:/data
      - ./config:/root/.minio
          
    # 启动命令
    command: server /data --console-address ":9001"
        
    # 健康检查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 1m30s
      timeout: 20s
      retries: 3
      start_period: 3m

🚀 第2步:启动 MinIO 服务

docker-compose.yml 文件所在的目录中,运行以下命令:

# 启动服务,并在后台运行
docker-compose up -d

启动后,你可以通过 http://<你的服务器IP>:9001 访问 MinIO 的控制台,使用 .env 文件中设置的用户名和密码登录。


🌐 第3步:在 NPM 中配置反向代理

登录你的 Nginx Proxy Manager 管理界面,创建两个代理主机。

代理主机 1: MinIO API

用于对象存储的 API 访问,实现 https://bucket.your-domain.com/file.jpg 的访问。

  • Details 选项卡:

    • Domain Names: *.your-domain.com (或者你想要的子域名)
    • Scheme: http
    • Forward Hostname / IP: 172.17.0.1 (Docker 默认网关,即宿主机IP)
    • Forward Port: 9000
    • Block Common Exploits: Enable
  • SSL 选项卡:

    • SSL Certificate: 为你的域名申请一个 SSL 证书(推荐使用 Let's Encrypt 通配符证书 *.your-domain.com)。
    • Force SSL: Enable (强制将 HTTP 重定向到 HTTPS)
    • HSTS Enabled: Enable (提高安全性)

代理主机 2: MinIO Console

用于访问 MinIO 的 Web 管理界面。

  • Details 选项卡:

    • Domain Names: minio-console.your-domain.com
    • Scheme: http
    • Forward Hostname / IP: 172.17.0.1
    • Forward Port: 9001
    • Block Common Exploits: Enable
  • SSL 选项卡:

    • SSL Certificate: 为 minio-console.your-domain.com 申请 SSL 证书。
    • Force SSL: Enable
    • HSTS Enabled: Enable

✅ 完成!

现在,你就可以通过以下方式访问你的 MinIO 服务了:

  • Web 管理界面: https://minio-console.your-domain.com
  • 对象文件: https://<bucket-name>.your-domain.com/<object-path>

这个方案非常稳定,因为它不依赖于复杂的 Docker 自定义网络配置,非常适合快速部署和维护。

标签: Cloudflare, Minio, Nginx Proxy Manager

评论已关闭