超简单!5分钟用群晖搭建 MinIO + Caddy 对象存储
对象存储和 Web 服务是开发者必备工具。MinIO 凭借高性能和 S3 兼容性成为存储领域的“顶流”,Caddy 则以自动 HTTPS 和极简配置深受开发者喜爱。结合 Docker Compose,只需 5 分钟,你就能搭建一个安全、高效的对象存储服务!本文手把手教你部署 MinIO + Caddy。
前提要求
- 群晖/大盘鸡(大硬盘 VPS):运行 MinIO 服务。
- 大带宽机器(如腾讯云锐驰 200):运行 Caddy,代理 MinIO 服务。
- 组网服务(如
Tailscale
/EasyTier
):确保内网互联互通
我的网络环境通过组网服务实现全链路打通,家里的群晖与腾讯云锐驰无缝互联,Caddy 代理内网 MinIO 服务,借助锐驰大带宽对外提供高效访问。
为啥选择 MinIO + Caddy
- MinIO:开源、S3 兼容、支持分布式存储,轻松应对海量数据。
- Caddy:自动 HTTPS、配置简洁,专为高并发优化,支持丰富插件。
- Docker Compose:一键部署多容器,省时省力。
组合优势:Caddy 为 MinIO 提供安全访问和负载均衡,Docker Compose 确保部署简单,完美适配静态文件托管、API 服务或私有云存储。
5 分钟快速部署
根据需求,可选择在同一机器上部署或分布式部署。我因跨机器需求,选择分布式部署。
部署 MinIO
群晖已支持 Docker Compose,通用配置如下:
- docker-compose.yaml
version: "3"
services:
minio:
image: bitnami/minio:2025
# image: ccr.ccs.tencentyun.com/k7scn/minio:2025
container_name: minio
restart: always
environment:
- MINIO_ROOT_USER=homes4
- MINIO_ROOT_PASSWORD=aiy0ooCheephai0ohNahmu3Aijee6eiv
- MINIO_DEFAULT_BUCKETS=homes4
ports:
- '9000:9000'
- '9001:9001'
volumes:
- '/volume1/docker/minio/data:/bitnami/minio/data'
注意:可能遇到目录权限问题,可运行以下命令解决:
chmod 777 /volume1/docker/minio/data -R
访问 MinIO 管理界面
在浏览器输入 http://NAS_IP:9001
或 http://域名:9001
,进入 MinIO 登录页面,使用 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
登录。
安装客户端
提供 Linux/amd64 的 mc 客户端下载链接:
https://c.ysicing.net/oss/tiga/linux/amd64/mc
或从官网获取最新客户端 Install mc
部署 Caddy
- docker-compose.yaml
services:
caddy:
image: ysicing/caddy2
# image: ccr.ccs.tencentyun.com/k7scn/caddy2
container_name: caddy
restart: always
# 可选host或者端口映射
network_mode: host
volumes:
- '/data/caddy/cfg:/etc/caddy'
- '/data/caddy/data:/data'
- '/data/caddy/config:/config'
- '/data/caddy/log:/var/log/caddy'
此 Caddy 镜像为我的定制版,内置以下常用插件:
xcaddy build \
--with github.com/caddy-dns/cloudflare \
--with github.com/caddy-dns/tencentcloud \
--with github.com/caddy-dns/alidns \
--with github.com/caddy-dns/dnspod \
--with github.com/ysicing/caddy2-geocn \
--with github.com/mholt/caddy-l4 \
--with github.com/mholt/caddy-ratelimit
Caddy 配置
配置文件位于 /data/caddy/cfg
,目录结构如下:
/data/caddy/cfg# tree
.
├── Caddyfile
├── load.sh
└── site
├── cr.caddy
├── dev.caddy
├── hub.caddy
├── http.caddy
└── minio.caddy
Caddyfile 示例
(LOG) {
log {
output file "{args[0]}" {
roll_size 50M
roll_uncompressed
roll_local_time
roll_keep 3
roll_keep_for 7d
}
format json
}
}
(COMCFG) {
encode zstd gzip
}
(ERR) {
handle_errors {
# 异常重定向
redir https://dxgw-{err.status_code}.caddy.local
}
}
{
debug
# admin off
}
(TLS) {
tls {
dns tencentcloud {
secret_id AKID***
secret_key CH85***
}
}
}
import /etc/caddy/site/*.caddy
MinIO 配置
minio.caddy
域名 {
import ERR
# 如果是内网域名可以设置import TLS开启dns签发证书
# import TLS
import LOG "/var/log/caddy/minio.log"
@rootPath {
path /
}
handle @rootPath {
respond "EdgeONE 451 Forbidden" 451
}
# 内网minio地址
reverse_proxy 100.90.80.2:9000
}
同理,minio 控制台也是一样,通常控制台不对外开放,仅限内网访问。
minio-api.caddy
域名 {
import ERR
# 如果是内网域名可以设置import TLS开启dns签发证书
# import TLS
import LOG "/var/log/caddy/minio-api.log"
@denied not remote_ip 192.168.1.0/24
respond @denied "Access Denied" 403
# 内网minio api地址
reverse_proxy 100.90.80.2:9001
}
重新加载配置
curl "http://localhost:2019/load" -H "Content-Type: text/caddyfile" --data-binary @Caddyfile
使用 MinIO
配置 MinIO 客户端(mc)以访问服务:
# 内网
mc alias set home http://100.90.80.2:9000 homes4 aiy0ooCheephai0ohNahmu3Aijee6eiv
# 外网
mc alias set home https://域名 homes4 aiy0ooCheephai0ohNahmu3Aijee6eiv
写在最后
通过 MinIO 和 Caddy 的组合,你可以快速搭建一个高性能、安全的对象存储服务。本文提供的配置仅供参考,MinIO 还有更多玩法等待探索!
