在這篇教學文章中,我將分享如何透過 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。
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!