MinIO 社群版(AGPLv3)已進入維護模式、官方不再提供預編譯二進位檔,2026 年自架 S3 相容物件儲存的主流答案變成兩條路:單節點用 MinIO 舊版或 AIStor Free,多節點就用 Garage(最輕量、適合跨機房)或 SeaweedFS(Apache-2.0、海量小檔首選)。
如果你只是想要一個「自己的 S3」,現在比以前更需要想清楚選型——因為預設選項(MinIO 社群版)已經停止維護,而它的替代品不像以前那樣可以無腦沿用同一套 Docker 指令。這篇把五個選項攤開比較,並且給你可以直接複製執行的 Garage 單節點實戰步驟。
一句話結論
單節點、能接受專有授權 → AIStor Free 或 MinIO 舊版映像;要多節點、要輕量、要跨機房 → Garage;海量小檔案或要 Iceberg/POSIX 掛載 → SeaweedFS;已有一整套 Ceph → Ceph RGW;不想維運 → 直接用 Cloudflare R2 或 Backblaze B2。
2026 年到底發生了什麼?MinIO 停止維護時間線
| 時間 | 事件 | 對你的影響 |
|---|---|---|
| 2025-10-15 | 最後一個社群版二進位 Release:RELEASE.2025-10-15T17-29-55Z | 這是「最後一個官方編譯檔」,之後不再更新 |
| 2025-12-03 | 官方在 README 標記進入維護模式(maintenance mode),開發重心轉向商業產品 AIStor | 功能差距開始擴大 |
| 2026-01 ~ 02 | README 正式改為「THIS REPOSITORY IS NO LONGER MAINTAINED」,並列出 AIStor Free/Enterprise 為替代方案 | 新專案不該再以社群版為預設 |
| 目前 | 社群版改為 source-only 發佈:只能用 go install 或自行 build Docker image,官方不再提供預編譯二進位檔 | 你現有的 quay.io/minio/minio 映像還能跑,但不會再有安全性修補 |
官方 README 的原文寫得很直接:這個 repo 不再維護,請改用 AIStor Free(免費授權、單節點)或 AIStor Enterprise(分散式+商業支援)。於是問題變成:AIStor Free 的限制你能接受嗎?
AIStor Free 的免費授權,限制在哪裡
依 MinIO 官方文件與 AIStor Free 授權條款(2026 年最新版):
- ✅ 允許商業生產環境使用,也可以用在個人專案、Homelab、研究與教育
- ❌ 僅限 standalone 單節點,不能組分散式叢集、沒有 HA
- ❌ 沒有 Site/Bucket 複製、沒有物件分層(tiering)與生命週期轉移、沒有特定版本刪除
- ❌ 沒有 profiling/診斷、效能測試工具、telemetry 與 console log、
mc support相關指令 - ⚠️ 授權到期機制:授權過期 30 天內是寬限期;過期 30~90 天轉唯讀(阻擋新寫入);超過 90 天進入離線模式,所有 S3 操作被封鎖(只剩管理 API 讓你更新授權)
最後那一點是自架最常被忽略的營運風險:它不是「不能更新」,而是「有一天會變成唯讀,然後連讀都讀不到」。如果你要把它當長期歸檔的儲存層,務必把授權更新排進維運排程。至於多節點的 AIStor Enterprise,社群引述的公開入門門檻大約是每年 US$96,000 起(實際報價需洽 MinIO),對中小團隊與獨立開發者並不友善。
五大自架選項完整比較
| 方案 | 授權 | 最新狀態 | 資源需求 | 冗餘機制 | 最適合 |
|---|---|---|---|---|---|
| MinIO 社群版(legacy) | AGPLv3 | 維護模式,source-only,最後 binary 2025-10-15 | 單節點 1 CPU/1GB RAM 起 | Erasure Coding | 現有部署過渡期、單節點小規模 |
| MinIO AIStor Free | 專有免費授權 | 持續更新(需註冊取得授權) | 單節點 | 無(單節點磁碟) | 單節點生產環境、要官方維護版本 |
| Garage | AGPLv3(Rust) | 活躍開發,官方 Docker 映像 dxflrs/garage:v2.3.0 | 極輕量:怠速記憶體約 20 MiB | 多副本(replication factor,建議 3) | 跨機房異地備份、VPS 小叢集(≤ 100 節點) |
| SeaweedFS | Apache-2.0(Go) | 活躍,最新版 4.47(2026-09-14) | Master/Volume/Filer 分離,核心需求低 | 副本;企業版支援自訂 EC | 海量小檔案、POSIX 掛載、Iceberg 資料湖 |
| RustFS | Apache-2.0(Rust) | 活躍,GitHub 約 3.2 萬星 | 新專案,迭代中 | 副本 | 想避開 AGPL 的 MinIO 替代實驗 |
| Ceph RGW | LGPL | 成熟穩定 | 極高:MON 5GB+ RAM、每顆 OSD 4GB 起、RGW 建議 6-8 核心/32-64GB RAM | CRUSH+副本/EC | 已有 Ceph 基礎設施的大型機房 |
社群目前的推薦排序大致是:SeaweedFS(Apache-2.0、小檔 O(1) 讀取)→ Garage(最輕量、跨機房最強)→ RustFS(新星)→ Ceph RGW(企業基石但維運極重)。而 MinIO 的社群分支(例如保留傳統 Web UI 的社群維護版本)仍然受 AGPLv3 約束,選擇前要先確認你的法務立場。
flowchart TB
Q1{"需要多節點<br/>或 HA 嗎?"}
Q1 -->|不需要| A["單節點路線<br/>MinIO 舊版映像<br/>或 AIStor Free"]
Q1 -->|需要| Q2{"主要瓶頸是?"}
Q2 -->|跨機房、機器很弱| B["Garage<br/>單一二進位、20MiB 記憶體"]
Q2 -->|海量小檔案/POSIX/Iceberg| C["SeaweedFS<br/>Apache-2.0、O(1) 尋址"]
Q2 -->|已有 Ceph 團隊與機房| D["Ceph RGW"]
Q2 -->|不想維運| E["Cloudflare R2 / Backblaze B2<br/>SaaS、egress 成本低"]實戰:Garage 單節點 Docker 部署(可直接複製)
Garage 是這一輪選型裡「手感最像舊 MinIO」的選項:單一 Rust 二進位、Docker 映像官方就有,v2.3.0 起更加了 --single-node 與 --default-bucket 兩個旗標,可以用一行指令就把單節點叢集與預設金鑰、預設 bucket 建好。
步驟 1:建立設定檔 garage.toml
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
replication_factor = 1
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "請用 openssl rand -hex 32 產生"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"
[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"
[admin]
api_bind_addr = "[::]:3903"
admin_token = "請用 openssl rand -base64 32 產生"
metrics_token = "請用 openssl rand -base64 32 產生"
產生密鑰:
echo "rpc_secret: $(openssl rand -hex 32)"
echo "admin_token: $(openssl rand -base64 32)"
echo "metrics_token: $(openssl rand -base64 32)"
echo "GK$(openssl rand -hex 16) # 這是你的 S3 Access Key ID"
步驟 2:Docker Compose(含資料持久化)
services:
garage:
image: dxflrs/garage:v2.3.0
container_name: garage
restart: unless-stopped
ports:
- "3900:3900" # S3 API
- "3901:3901" # 節點間 RPC
- "3902:3902" # 靜態網站託管
- "3903:3903" # Admin API / metrics
environment:
GARAGE_DEFAULT_ACCESS_KEY: "GKGKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
GARAGE_DEFAULT_SECRET_KEY: "請用 openssl rand -hex 32 產生"
GARAGE_DEFAULT_BUCKET: "default-bucket"
volumes:
- ./garage.toml:/etc/garage.toml:ro
- ./meta:/var/lib/garage/meta
- ./data:/var/lib/garage/data
command: ["/garage", "server", "--single-node", "--default-bucket"]
mkdir -p ~/garage/{meta,data} && cd ~/garage
# 把上面兩個檔案寫進來後:
docker compose up -d
docker exec garage /garage status
garage status 應該看到類似輸出(HEALTHY NODES、狀態為 v2.3.0)。注意:官方 quick start 的 docker 範例沒有掛 volume,容器一刪資料就沒了;上面這份 compose 已經補上持久化。
步驟 3:驗證 S3 API(aws cli)
export AWS_ENDPOINT_URL='http://localhost:3900'
export AWS_DEFAULT_REGION='garage'
export AWS_ACCESS_KEY_ID='你的 Access Key'
export AWS_SECRET_ACCESS_KEY='你的 Secret Key'
aws s3 ls
aws s3 cp ./logo.png s3://default-bucket/logo.png
aws s3 ls s3://default-bucket/
步驟 4:Python boto3 上傳(可直接執行)
import boto3
s3 = boto3.client(
"s3",
endpoint_url="http://localhost:3900", # 自架 S3 一定要指定
aws_access_key_id="你的 Access Key",
aws_secret_access_key="你的 Secret Key",
region_name="garage",
)
print(s3.list_buckets()["Buckets"])
s3.upload_file("logo.png", "default-bucket", "logo.png")
for obj in s3.list_objects_v2(Bucket="default-bucket").get("Contents", []):
print(obj["Key"], obj["Size"])
步驟 5:rclone 與 restic 接上(備份最實用)
rclone(~/.config/rclone/rclone.conf):
[garage]
type = s3
provider = Other
access_key_id = 你的 Access Key
secret_access_key = 你的 Secret Key
endpoint = http://localhost:3900
region = garage
rclone lsd garage:
rclone sync /var/backups garage:default-bucket/backups --progress
restic 直接備份到自架 S3:
export AWS_ACCESS_KEY_ID='你的 Access Key'
export AWS_SECRET_ACCESS_KEY='你的 Secret Key'
export AWS_DEFAULT_REGION='garage'
restic -r s3:http://localhost:3900/default-bucket/restic init
restic -r s3:http://localhost:3900/default-bucket/restic backup /etc /opt/app
restic -r s3:http://localhost:3900/default-bucket/restic snapshots
這套組合(Garage+restic)是家用/小型 VPS 目前很常見的備份目標方案:備份放自己的機器、又是 S3 協定,隨時可以搬到雲端。
成本試算:自架 vs 雲端 S3(以 1 TB 為例)
| 方案 | 月費概估 | 出站流量 | 備註 |
|---|---|---|---|
| Cloudflare R2(Standard) | US$15.36(1024 GB × $0.015) | 免費(不計 egress 費) | 免費額度 10 GB;Class A $4.50/百萬次、Class B $0.36/百萬次 |
| Backblaze B2 | US$6.14(1024 GB × $0.006) | 每月前 3 倍儲存量免費,超出 $0.01/GB | 免費額度 10 GB |
| 自架 Garage(單 VPS) | 約一台 VPS 費用(US$5~15 起)+你的人力 | 看 VPS 流量方案 | 資料完全自持;要自己做備份、監控與升級 |
| MinIO AIStor Enterprise | 入門約 US$96,000/年 起(社群引述,需洽業務) | — | 多節點+商業支援,中小團隊通常不適用 |
結論其實很樸素:若你只是想放 100 GB~1 TB 的備份、而且流量不小,R2 的免 egress 費用常常比自架更划算;自架的價值在「資料主權」與可搬遷性。 但如果你已經有一台 Proxmox 主機(Proxmox VE 9 完整教學),多跑一個 Garage 容器幾乎沒有額外成本,這就是自架的甜蜜點。
5 個實戰踩雷
- Presigned URL 一掛反向代理就爛掉。 自架 S3 前面加 Caddy/Nginx 時,若沒正確轉發
Host標頭、region 對不上,AWS SDK 簽出來的 URL 會回SignatureDoesNotMatch或InvalidAccessKeyId。解法:反向代理保留原始 Host,或改用與外部網址一致的 endpoint 設定。 - S3 的 key 命名跟 POSIX 檔案系統衝突。 S3 允許
foo與foo/bar同時存在,但掛載成檔案系統(s3fs、goofys)時foo不能同時是檔案又是目錄,會出現映射錯誤。 - Multipart ETag 的
-N後綴。 分片上傳的 ETag 長得像d41d8cd...-3,部分簡化實作的 S3 gateway 校驗不完整,會讓 rclone/s3cmd 的分片校驗失敗——遇到就先降到單次上傳測試。 - Garage 沒有 Erasure Coding、也少了 Raft。 它靠多副本與 CRDT 做跨機房同步(
replication_factor = 3時,寫入 quorum 2、讀取 quorum 2),硬碟成本比 EC 高;大檔高併發寫入時要留意 last-writer-wins 的覆蓋行為。 - MinIO 家族要看清授權與到期日。 社群版是 AGPLv3(商用前請評估 AGPL 的網路傳播條款風險),AIStor Free 是專有免費授權且單節點限定+授權過期會轉唯讀/離線。這兩件事都應該寫進你的維運手冊。
一句話總結
MinIO 世代結束不是災難,而是選型題回到你手上:單節點 MinIO 舊版/AIStor Free 能撐過渡期,多節點交給 Garage 與 SeaweedFS,整合層只要 S3 API 相容,boto3、rclone、restic 這類工具幾乎都能無痛搬家。先確認你的「節點數、檔案大小分布、備份目標」三個條件,答案就會自己浮出來。
延伸閱讀
- Uptime Kuma 完整教學 2026:91K 星自架監控神器,Docker 安裝、10 種監控類型與通知設定
- Proxmox VE 9 完整教學:從安裝、LXC/VM 到備份與 UPS 整合
- AList 檔案列表程式:把雲端硬碟、S3 與物件儲存統一成一個入口
原始來源
- MinIO GitHub:minio/minio README(已標示 repo 不再維護、source-only 發佈)
- MinIO 官方文件:Licenses(AIStor 授權狀態與到期行為)
- MinIO:AIStor Free Tier License Agreement
- Garage 官方文件:Quick Start(單節點 Docker 與
--single-node/--default-bucket) - SeaweedFS GitHub:seaweedfs/seaweedfs
- Cloudflare:R2 Pricing
