最近我成功部署了一套稳定、安全、高性能的对象存储服务,基于开源的 MinIO,结合 Caddy 自动反向代理和 Let's Encrypt 证书,再借助 Cloudflare CDN 提供全球访问加速和隐藏真实 IP。这个方案特别适合需要私有音视频文件托管、外链直连、兼容 S3 API 的场景。
这篇文章记录一下整个部署过程,供有类似需求的朋友参考。
💡 项目背景
我需要一个支持以下功能的存储服务:
-
支持上传和访问音频、视频等大文件
-
能通过 HTTPS 域名访问,避免暴露服务器 IP
-
能用 Markdown 外链引用(适用于博客、视频项目)
-
兼容 S3 协议,支持 CLI 工具和程序化上传
-
尽可能低成本,便于自己掌控
最终选择的方案:
-
MinIO:作为对象存储引擎,S3 兼容
-
Caddy:自动 HTTPS,反向代理 MinIO 控制台/API
-
Cloudflare:做 DNS + CDN,加速访问 + 隐藏 IP
-
Docker:部署方便、易维护
🌐 域名结构设计
为了更清晰地管理服务,我将控制台和 API 拆分为两个子域名:
|子域名|功能|映射端口|
|---|---|---|
|us.saypt.com
|MinIO 控制台|9090|
|s3.saypt.com
|S3 API 接口|9000|
这样可以:
-
让用户通过
us.saypt.com
访问 Web 控制台 -
程序使用
s3.saypt.com
上传和下载文件 -
两者都通过 Cloudflare 提供的 HTTPS 和防护服务访问,无需暴露端口
🐳 MinIO Docker 启动命令
docker run -d --name minio \
-p 9000:9000 \
-p 9090:9090 \
-e MINIO_SERVER_URL=https://s3.saypt.com \
-e MINIO_BROWSER_REDIRECT_URL=https://us.saypt.com \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin" \
-v /mnt/storage/minio-data:/data \
quay.io/minio/minio server /data --console-address ":9090"
✅ 参数说明:
-
MINIO_SERVER_URL
:MinIO 用来生成 API 外链的域名 -
MINIO_BROWSER_REDIRECT_URL
:登录后跳转到控制台的域名 -
--console-address :9090
:将控制台绑定在 9090,而非默认的 9001/随机端口 -
-v
:挂载本地 1TB 存储作为数据目录
🔧 Caddy 配置(自动 HTTPS + 反代)
我使用了 Caddy 来管理反向代理,并启用自动 HTTPS,配置如下:
us.saypt.com {
encode gzip
reverse_proxy http://localhost:9090
}
s3.saypt.com {
encode gzip
reverse_proxy http://localhost:9000
}
-
所有访问都走 443 端口
-
Cloudflare 橙色云朵代理生效,隐藏了服务器真实 IP
-
MinIO 控制台和 API 各自独立、安全可靠
🧪 上传和访问测试
使用 MinIO 命令行工具 mc
:
# 设置连接别名
mc alias set s3 https://s3.saypt.com admin admin
# 创建一个公开 bucket
mc mb s3/media
mc anonymous set download s3/media
# 上传文件
mc cp test.mp3 s3/media/
外链访问效果:
文件地址:
https://s3.saypt.com/media/test.mp3
可直接用于:
[🎵 播放音频](https://s3.saypt.com/media/test.mp3)
或:
<audio src="https://s3.saypt.com/media/test.mp3" controls></audio>
🔐 Cloudflare 设置
在 Cloudflare 控制面板中:
|类型|名称|内容|代理状态|
|---|---|---|---|
|A|us
|VPS IP|✅ 已代理|
|A|s3
|VPS IP|✅ 已代理|
确保开启了 CDN 加速(橙色云朵),并将 SSL 模式设置为“Full”或“Full(strict)”以保证 HTTPS 安全通信。
✅ 最终效果总结
我现在已经拥有了这样一个完整的对象存储服务:
-
🔐 使用 Cloudflare + Caddy 提供全程 HTTPS 安全访问
-
🌐 控制台与 API 分离,管理更清晰
-
⚙️ 兼容标准 S3 协议,支持程序自动上传
-
📦 支持 Markdown 音视频资源引用,完美适配博客或视频项目