Tự host lưu trữ S3 trên VPS: chọn phần mềm nào sau MinIO?
Hướng dẫn tự host lưu trữ S3 trên VPS năm 2027 - so sánh Garage, SeaweedFS, Ceph sau khi MinIO ngừng bản cộng đồng, cách cài, bảo mật và khi nào không nên.

Ý chính
- Tự host lưu trữ S3 là chạy phần mềm tương thích API S3 như Garage hay SeaweedFS trên server của bạn.
- Kho mã MinIO bản cộng đồng đã được lưu trữ (archive) ngày 25/4/2026 và chỉ còn phát hành dạng mã nguồn.
- Garage nhẹ nhưng chưa hỗ trợ versioning và object lock, nên không thay được kho lưu trữ chống ransomware.
- Bucket nằm cùng server với website không phải là bản sao lưu off-site.
Tự host lưu trữ S3 nghĩa là chạy một phần mềm nói được API của Amazon S3 ngay trên VPS của bạn, để website và ứng dụng ghi ảnh, file tải lên, bản sao lưu vào bucket bằng đúng SDK và plugin đang dùng với AWS. Năm 2027, ba lựa chọn mã nguồn mở đáng cân nhắc là Garage (nhẹ, dễ vận hành), SeaweedFS (nhiều tính năng) và Ceph RGW (cho cụm lớn). MinIO, cái tên quen thuộc nhất, đã ngừng duy trì bản cộng đồng.
Bài viết giải thích khi nào nên và không nên tự host S3, so sánh các phần mềm theo tiêu chí cụ thể, hướng dẫn những điểm cần làm đúng khi cài thủ công, và cách ZoPanel cấp bucket S3 cho từng khách hàng hosting chỉ bằng vài cú nhấp.
Lưu trữ đối tượng S3 là gì, vì sao nên tự host?
Lưu trữ đối tượng (object storage) không có thư mục theo nghĩa thông thường: mỗi file là một "object" nằm trong một "bucket", được đọc ghi qua HTTP. API S3 của Amazon đã trở thành chuẩn chung, nên hàng nghìn công cụ nói được nó: plugin WP Offload Media, driver S3 của Laravel, AWS SDK, rclone, restic.
Tự host có vài lợi ích rõ ràng:
- Không tốn phí băng thông ra (egress) theo GB như nhiều dịch vụ đám mây. Bạn chỉ trả tiền VPS và ổ đĩa.
- Dữ liệu nằm trên server bạn kiểm soát, ở trung tâm dữ liệu bạn chọn, kể cả ở Việt Nam.
- Độ trễ thấp khi website và bucket ở cùng nơi.
- Mỗi khách hàng một bucket, một khoá riêng nếu bạn bán hosting: thêm một dịch vụ có giá trị mà không phụ thuộc bên thứ ba.
Khi nào không nên tự host S3?
Đây là phần mà nhiều bài hướng dẫn bỏ qua.
Không dùng làm bản sao lưu duy nhất cho chính server đó. Bucket nằm trên cùng VPS với website thì khi VPS hỏng, bị xoá nhầm hay bị mã hoá tống tiền, bản sao lưu đi theo. Nguyên tắc 3-2-1 (3 bản, 2 loại phương tiện, 1 bản ở nơi khác) vẫn áp dụng: bản off-site phải ở server hoặc nhà cung cấp khác.
Một ổ đĩa là không có dự phòng. Dịch vụ như Amazon S3 sao chép dữ liệu qua nhiều thiết bị và nhiều trung tâm. Một VPS đơn lẻ thì độ bền dữ liệu chỉ bằng ổ đĩa và chính sách snapshot của nhà cung cấp. Muốn dự phòng thật, bạn cần cụm nhiều node.
Cần object lock để chống ransomware. Bản sao lưu "bất biến" (không ai xoá được trong N ngày, kể cả người có khoá) cần tính năng object lock. Không phải phần mềm tự host nào cũng có (xem bảng dưới).
Dữ liệu cực lớn, tăng nhanh. Từ vài chục TB trở lên, chi phí vận hành cụm lưu trữ (thay ổ, cân bằng lại dữ liệu, giám sát) thường lớn hơn khoản tiết kiệm.
Chọn phần mềm tự host lưu trữ S3 nào?
Chuyện gì đã xảy ra với MinIO?
MinIO từng là lựa chọn mặc định. Theo kho mã chính thức trên GitHub, kho bản cộng đồng đã được lưu trữ (archive) ngày 25/4/2026, README ghi rõ không còn được duy trì, bản cộng đồng chỉ phát hành dạng mã nguồn, và các bản binary cũ không nhận cập nhật nữa. MinIO hướng người dùng sang sản phẩm thương mại AIStor (có bản AIStor Free với giấy phép riêng). Server đang chạy MinIO cũ vẫn hoạt động, nhưng sẽ không nhận bản vá bảo mật. Nếu đang lên kế hoạch mới, hãy chọn phần mềm khác hoặc đọc kỹ giấy phép AIStor.
So sánh các lựa chọn (tại thời điểm viết, tháng 10/2026)
| Tiêu chí | Garage | SeaweedFS | Ceph RGW |
|---|---|---|---|
| Giấy phép | AGPL v3 | Apache 2.0 | Mã nguồn mở |
| Độ phức tạp vận hành | Thấp | Trung bình | Cao |
| Phù hợp | 1 server tới vài node, nhiều địa điểm | Từ 1 server tới cụm lớn, nhiều file nhỏ | Cụm lớn, đội vận hành chuyên trách |
| Versioning | Chưa có | Có | Có |
| Object lock | Chưa có | Có | Có |
| Presigned URL, multipart, CORS | Có | Có | Có |
| Lifecycle (tự xoá) | Một phần (hết hạn, dọn upload dở) | Có | Có |
Nguồn: bảng tương thích S3 của Garage, README của SeaweedFS. Các dự án cập nhật thường xuyên, hãy kiểm tra lại phiên bản bạn định dùng.
Garage do nhóm Deuxfleurs phát triển, nhắm tới máy cấu hình khiêm tốn (trang chủ dự án nêu khoảng 1 GB RAM) và cụm phân tán qua nhiều địa điểm có mạng không hoàn hảo. Nó không dùng chính sách bucket kiểu AWS mà cấp quyền theo cặp khoá và bucket, đơn giản và khó cấu hình sai. Điểm trừ: chưa có versioning và object lock. Giấy phép AGPL v3 nghĩa là nếu bạn sửa mã nguồn Garage và cung cấp nó như dịch vụ mạng, bạn phải công bố phần sửa đổi; dùng nguyên bản thì không ảnh hưởng gì.
SeaweedFS nhiều tính năng hơn hẳn (versioning, object lock, IAM), giấy phép Apache 2.0 thoáng, được thiết kế cho số lượng rất lớn file nhỏ. Đổi lại có nhiều thành phần hơn (master, volume, filer, S3 gateway) và cần thời gian để hiểu.
Ceph RGW là lựa chọn của các nhà cung cấp lưu trữ lớn. Trên một VPS đơn lẻ thì quá nặng; chỉ cân nhắc khi bạn có cụm nhiều server và người vận hành Ceph.
Với đa số trường hợp "một VPS, cần bucket cho website và ứng dụng", Garage là điểm khởi đầu hợp lý. Cần object lock thì chọn SeaweedFS, hoặc dùng dịch vụ S3 thương mại cho riêng phần sao lưu bất biến.
Cài đặt thủ công: những điểm phải làm đúng
Chúng tôi không chép lại toàn bộ hướng dẫn cài, vì lệnh thay đổi theo phiên bản; hãy theo quick start chính thức của Garage. Dù chọn phần mềm nào, các điểm sau quyết định bucket của bạn an toàn hay không.
1. API chỉ nghe trên 127.0.0.1
Chạy container với cổng publish dạng -p 127.0.0.1:3900:3900 (3900 là cổng S3 mặc định của Garage). Docker đi vòng qua UFW khi publish cổng, nên -p 3900:3900 sẽ lộ API ra internet mà không có SSL. Bài chạy ứng dụng Docker trên VPS an toàn giải thích chi tiết.
2. Đưa ra ngoài qua nginx có SSL
server {
listen 443 ssl;
server_name s3.example.com;
# ssl_certificate ... (Let's Encrypt)
client_max_body_size 0; # không giới hạn kích thước upload
proxy_request_buffering off; # stream upload, không đệm ra đĩa
location / {
proxy_pass http://127.0.0.1:3900;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
client_max_body_size 0 cần thiết vì mặc định nginx chỉ nhận 1 MB mỗi request. Giữ nguyên header Host, vì chữ ký S3 (SigV4) tính cả tên host; sai header là mọi request bị từ chối với lỗi chữ ký.
3. Dùng path-style addressing
Trên server tự host, URL dạng https://s3.example.com/ten-bucket/file (path-style) đơn giản hơn nhiều so với https://ten-bucket.s3.example.com/file (virtual-host), vốn cần DNS và chứng chỉ wildcard. Bật path-style ở phía client. Với AWS CLI:
aws configure set default.s3.addressing_style path
aws --endpoint-url https://s3.example.com s3 ls s3://ten-bucket
4. Mỗi ứng dụng một khoá, chỉ cho một bucket
Đừng dùng một khoá quản trị cho mọi ứng dụng. Khoá của plugin WordPress chỉ nên đọc ghi được bucket media của website đó. Khi một website bị chiếm, kẻ tấn công không lấy được dữ liệu của bucket khác.
5. Sao lưu chính kho S3
Bucket là dữ liệu như mọi dữ liệu khác. Sao lưu sang nơi khác (rclone sync sang nhà cung cấp khác là cách phổ biến), và thử khôi phục.
Tự host lưu trữ S3 với ZoPanel
ZoPanel có thành phần Lưu trữ S3 dùng engine Garage chạy trong container (cần Docker). Theo tài liệu Kho ứng dụng và lưu trữ S3:
Quản trị viên cài một lần:
- Mở Lưu trữ S3, bấm Cài đặt (hoặc cài Lưu trữ S3 trong Thành phần). Dữ liệu nằm ở
/var/lib/zopanel-storage. - API S3 chỉ nghe trên 127.0.0.1. Để dùng từ bên ngoài, trỏ bản ghi A của một tên miền về server rồi bấm Mở ra tên miền: ZoPanel tạo website reverse proxy kèm SSL tự động.
- Ứng dụng kết nối tới
https://<tên miền đó>với regionus-east-1và bật path-style addressing.
Mọi tài khoản hosting tự tạo bucket tại Lưu trữ S3 → Tạo bucket:
- Mỗi bucket có khoá truy cập riêng, chỉ dùng được cho bucket đó. Secret chỉ hiện một lần; mất thì Xoay khoá, khoá cũ ngừng hoạt động ngay.
- Mỗi bucket giới hạn bằng dung lượng đĩa của gói hosting; mỗi tài khoản tối đa 10 bucket.
- Cài đặt bucket cho phép khai báo origin CORS và Tự xóa file sau (ngày), hợp cho log hay bản sao lưu xoay vòng. Upload dang dở luôn được dọn sau 7 ngày.
- Duyệt file để tải lên, tải xuống, xoá và tạo Link chia sẻ có thời hạn.
- Tích Công khai để phục vụ ảnh website trực tiếp tại
https://<tên miền lưu trữ>/<bucket>/<file>.
Khoá bucket dùng được với WP Offload Media, driver S3 của Laravel hay AWS SDK. Gói Free dùng được thành phần lưu trữ S3 với 1 bucket; gói Pro bỏ giới hạn số bucket. Gỡ cài đặt chỉ xoá container; dữ liệu được giữ trừ khi bạn tích ô xoá luôn dữ liệu.
Còn sao lưu off-site? Đó là việc của tính năng khác: Cài đặt → Sao lưu từ xa (gói Pro) mã hoá bản sao lưu trên server rồi mới đẩy lên kho S3 bên ngoài như AWS, Cloudflare R2, Backblaze B2, Wasabi hay MinIO, có tuỳ chọn path-style. Xem tài liệu sao lưu. Một cách hợp lý là: bucket S3 trên server để phục vụ website, còn bản sao lưu đi sang nhà cung cấp hoặc server khác. Bạn có thể đọc thêm trong bài sao lưu VPS lên S3.
Kết luận
Tự host lưu trữ S3 đáng làm khi bạn cần bucket cho media, file tải lên và ứng dụng, muốn dữ liệu ở gần và không muốn trả phí băng thông. Sau khi MinIO ngừng bản cộng đồng, Garage là lựa chọn nhẹ nhàng cho một server, SeaweedFS khi cần versioning và object lock. Dù chọn gì, hãy giữ API ở 127.0.0.1, đưa ra ngoài qua SSL, mỗi ứng dụng một khoá, và đừng coi bucket trên cùng server là bản sao lưu.
Muốn cấp bucket S3 cho khách hàng hosting mà không tự dựng proxy, khoá và giới hạn? Cài ZoPanel bằng curl -fsSL https://get.zopanel.net | sudo bash; gói Free cho 1 bucket để thử, gói Pro không giới hạn bucket, xem bảng giá.
Câu hỏi thường gặp
MinIO còn dùng được không?
Bản đã cài vẫn chạy, nhưng kho mã bản cộng đồng đã được lưu trữ ngày 25/4/2026 và không còn được duy trì, nên sẽ không có bản vá bảo mật mới. Với hệ thống mới, nên chọn Garage, SeaweedFS hoặc xem xét giấy phép của AIStor.
Tự host S3 trên một VPS có an toàn cho dữ liệu không?
An toàn về truy cập nếu bạn cấu hình đúng (SSL, khoá riêng từng bucket, API không lộ ra ngoài). Về độ bền, dữ liệu chỉ an toàn bằng ổ đĩa của VPS, nên vẫn cần sao lưu sang nơi khác.
Garage có thay được Amazon S3 không?
Cho phần lớn nhu cầu thông thường (upload, tải xuống, multipart, presigned URL, CORS) thì có. Garage chưa hỗ trợ versioning, object lock và chính sách bucket kiểu AWS, nên các tính năng phụ thuộc vào chúng sẽ không chạy.
Vì sao client S3 báo lỗi chữ ký (SignatureDoesNotMatch)?
Thường do reverse proxy đổi header Host, client dùng virtual-host thay vì path-style, hoặc sai region. Giữ nguyên Host, bật path-style và dùng đúng region mà server yêu cầu (với ZoPanel là us-east-1).
Có nên dùng S3 tự host làm nơi lưu bản sao lưu?
Có, nếu kho S3 nằm trên server khác với dữ liệu được sao lưu. Bucket trên cùng một VPS chỉ bảo vệ bạn khỏi lỗi xoá nhầm, không bảo vệ khỏi việc mất cả server.
Đọc tiếp

Backup VPS lên S3: hướng dẫn sao lưu mã hoá, tự động, khôi phục được
Cách backup VPS lên S3 (AWS, Cloudflare R2, Backblaze B2, Wasabi) bằng restic - mã hoá, tăng dần, có lịch và thử khôi phục - hoặc chỉ vài cú bấm với ZoPanel.

Chiến lược sao lưu website 3-2-1: áp dụng thực tế cho VPS
Chiến lược sao lưu website 3-2-1 cho VPS: sao lưu gì, bao lâu một lần, lưu ở đâu, chống ransomware, thử khôi phục, kèm lệnh restic và cách làm trên ZoPanel.

Chạy ứng dụng Docker trên VPS an toàn: 9 việc cần làm đúng
Cách chạy ứng dụng Docker trên VPS an toàn - cổng chỉ mở nội bộ, user namespace, giới hạn RAM, cách ly mạng, SSL - kèm cấu hình mẫu và cách làm với ZoPanel.