在這篇教學文章中,我將分享如何透過 Docker 部署 MinIO 搭配 Caddy 作為反向代理伺服器,自動處理 HTTPS 憑證,快速建立一套安全又易於管理的 S3 相容物件儲存服務。本文適用於中小型團隊、自架私有雲、或希望低成本建置 S3 儲存系統的開發者。
部署目標與需求
- API 網域:
s3.example-storage.com提供 S3 API 存取,支援應用程式直接讀寫物件儲存。 - 管理 Console 網域:
console.s3.example-storage.com提供 MinIO Web 管理介面。 - 自動化 HTTPS 憑證: 使用 Caddy 自動簽發與續約 Let’s Encrypt 憑證。
- API 與 Console 完全分流: 避免 API domain 被自動轉導至管理介面。
- 資料卷規劃: 所有 Volume 掛載於專案資料夾,便於備份與維護。
部署架構設計
部署架構主要包含兩個容器:
- MinIO 物件儲存服務:提供標準 S3 API 相容接口。
- Caddy 反向代理伺服器:自動申請 HTTPS 憑證並反向代理 MinIO API 與管理介面。
示意架構:Client → Caddy (HTTPS) → MinIO (API / Console)
網域分工:
- API domain:
s3.example-storage.com - Console domain:
console.s3.example-storage.com
docker-compose.yml 配置範例
version: '3.8'
services:
minio:
image: minio/minio:latest
container_name: minio
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin123
command: server /data --address ":9000" --console-address ":9001"
volumes:
- ./minio_data:/data
networks:
- minio_net
caddy:
image: caddy:latest
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
networks:
- minio_net
networks:
minio_net:
Caddyfile 配置範例
http://console.s3.example-storage.com {
redir https://console.s3.example-storage.com{uri}
}
http://s3.example-storage.com {
redir https://s3.example-storage.com{uri}
}
console.s3.example-storage.com {
reverse_proxy minio:9001
}
s3.example-storage.com {
reverse_proxy minio:9000
}
最佳實踐與提醒
- MinIO 預設帳號密碼應更換,避免資安風險。
- 資料持久化建議:定期備份
minio_data目錄。 - Caddy 資料夾權限:確認
caddy_data、caddy_config權限正確。 - DNS 設定:請將 API 與 Console 網域指向 Caddy 主機 IP。