IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    超简单!5分钟用群晖搭建 MinIO + Caddy 对象存储

    ysicing (i@ysicing.me)发表于 2025-05-01 18:12:00
    love 0

    对象存储和 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
    

    更多场景可结合 restic,rclone,下载服务等

    写在最后

    通过 MinIO 和 Caddy 的组合,你可以快速搭建一个高性能、安全的对象存储服务。本文提供的配置仅供参考,MinIO 还有更多玩法等待探索!




沪ICP备19023445号-2号
友情链接