NPM 反向代理 MinIO 简易部署教程
本教程将指导你如何使用 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的部署方式来部署。
核心思路
- MinIO 容器:将端口(如 9000, 9001)直接映射到宿主机上。
- NPM 容器:通过反向代理,将公网域名的请求转发到宿主机的 IP 和映射的端口上。
- 通信路径:
用户 -> 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.com2. 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
- Domain Names:
SSL 选项卡:
- SSL Certificate: 为你的域名申请一个 SSL 证书(推荐使用 Let's Encrypt 通配符证书
*.your-domain.com)。 - Force SSL:
Enable(强制将 HTTP 重定向到 HTTPS) - HSTS Enabled:
Enable(提高安全性)
- SSL Certificate: 为你的域名申请一个 SSL 证书(推荐使用 Let's Encrypt 通配符证书
代理主机 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
- Domain Names:
SSL 选项卡:
- SSL Certificate: 为
minio-console.your-domain.com申请 SSL 证书。 - Force SSL:
Enable - HSTS Enabled:
Enable
- SSL Certificate: 为
✅ 完成!
现在,你就可以通过以下方式访问你的 MinIO 服务了:
- Web 管理界面:
https://minio-console.your-domain.com - 对象文件:
https://<bucket-name>.your-domain.com/<object-path>
这个方案非常稳定,因为它不依赖于复杂的 Docker 自定义网络配置,非常适合快速部署和维护。
评论已关闭