Lưu file dưới dạng object trong một bucket và truy cập từng file bằng URL — nơi lưu mở rộng, bền vững cho upload, ảnh, và backup ngoài VPS của bạn.
← / → để chuyển slide · chuyển EN/VI bên dưới
Quên đi thư mục và ổ đĩa. Bạn đặt file vào một container và dịch vụ lưu trữ trả về một link.
Object là file kèm metadata (kích thước, content-type, tag) — lưu thành một đơn vị.
Bucket là một không gian tên phẳng chứa object. Không có thư mục thật, chỉ có đường dẫn trong key.
Mỗi object được truy cập bằng một URL HTTP thường, nên trình duyệt, CDN, và dịch vụ khác tải về trực tiếp được.
Ảnh, file user upload, video, backup đều hợp — bất cứ thứ gì bạn muốn phân phối qua internet.
Bạn nói chuyện với nó qua mạng bằng một API — upload, liệt kê, tải về, xóa. Nó tự mở rộng và bền vững.
REST/S3 API: put một object, get lại, list bucket, delete. Chạy được từ CLI, SDK, hay HTTP thô.
Key là tên object (vd uploads/101.png). URL là địa chỉ ổn định để phân phối nó.
Nó trải trên hàng nghìn ổ đĩa ở nhiều máy. Bạn không bao giờ phải tính capacity — thêm hàng tỷ object vẫn chạy.
Thường rẻ hơn ổ đĩa VPS, và dữ liệu được nhân bản nên sống sót khi phần cứng hỏng (S3 cam kết độ bền 11 số chín).
Mọi thứ trong object storage chỉ là bốn ý tưởng này.
Bốn cái tên, một mô hình trong đầu. Học thuộc là hiểu cả hệ thống.
Container có tên (không gian tên) chứa object. vd myapp-uploads. Một tài khoản có thể có nhiều.
Một file kèm metadata (content-type, kích thước, tag tùy chỉnh). Đúng thứ bạn lưu.
Tên object trong bucket — đường dẫn bạn thấy. vd avatars/101.png. Phải duy nhất trong bucket.
Địa chỉ HTTP phân phối object. vd https://myapp.s3.../avatars/101.png. Đây là thứ bạn đưa vào app.
Bucket chứa các object; key của mỗi object trở thành một phần URL của nó. Đó là toàn bộ hệ thống.
Khi file của bạn không nên nằm trên ổ đĩa VPS, đây là câu trả lời.
Lưu những gì user upload ngoài ổ app, rồi phân phối bằng URL — không bao giờ làm phình to VPS.
Video, audio, báo cáo được tạo ra, font — mọi thứ lớn mà user tải trực tiếp.
Sao chép DB dump và config sang nơi bền vững, để ổ VPS chết không kéo theo dữ liệu của bạn.
Nó được thiết kế để tải qua internet; đặt một CDN ở phía trước là phân phối nhanh toàn cầu.
Một là classic trên cloud, một là bạn tự chạy trên VPS.
Bản gốc và là chuẩn. Simple Storage Service — API mà tất cả dịch vụ khác sao chép. Có free tier, trả theo mức dùng.
Mở nguồn, tự host, tương thích S3. Chạy trong container trên VPS của bạn và dùng y hệt các tool S3.
Vì MinIO nói được S3, code viết cho S3 chạy với MinIO mà không đổi gì — chỉ cần trỏ endpoint sang VPS.
S3 = thuê từ AWS. MinIO = tự sở hữu trên máy bạn. Cùng mô hình trong đầu, cùng lệnh, khác chủ nhà.
Cùng API, cùng lệnh — khác biệt thật sự duy nhất là ai chạy nó.
| Điểm | AWS S3 | MinIO |
|---|---|---|
| Chạy ở | Cloud AWS — bạn thuê | Trên VPS của bạn — bạn tự host |
| Chi phí | Trả theo GB lưu + request | Chỉ hóa đơn VPS bạn đang có |
| API | S3 — the original | S3-compatible — same SDKs / CLI |
| Cài đặt | Tạo bucket, trỏ sang | Chạy 1 container, tạo bucket |
| Phù hợp | Production, không cần lo, không ops | VPS, kiểm soát hoàn toàn, dữ liệu là của bạn |
aws s3 cp là lệnh một dòng bạn dùng nhiều nhất: đường dẫn local vào, đường dẫn bucket ra.
# copy a local file into a bucket (this is the whole upload)
aws s3 cp ./avatar.png s3://myapp-uploads/avatars/101.png
# make a public bucket, then list what's inside it
aws s3 mb s3://myapp-uploads --acl public-read
aws s3 ls s3://myapp-uploads/avatars/
Trỏ các lệnh y hệt này sang MinIO bằng cách đặt endpoint URL — không gì khác thay đổi.
Tạo bucket, upload một object, liệt kê — và đây là URL của nó.
put_object là toàn bộ phần upload trong Python. Đổi client sang endpoint MinIO và đúng code này chạy trên VPS.
import boto3
s3 = boto3.client("s3")
s3.put_object(
Bucket="myapp-uploads",
Key="posts/778.jpg",
Body=open("post.jpg", "rb").read(),
)
# now it's live — the same S3 API works against MinIO too:
print("https://myapp-uploads.s3.amazonaws.com/posts/778.jpg")
Với MinIO: boto3.client("s3", endpoint_url="http://your-vps:9000", ...).
Phần thưởng là một link thường. Ba cách bạn thực sự dùng để phân phối.
Nếu bucket cho phép đọc công khai, https://myapp-uploads.s3.../key hoạt động — đưa thẳng vào <img src>. Đơn giản, nhưng ai cũng thấy được.
Với bucket riêng, sinh một link ký có hạn thời gian để user tải — không cần truy cập công khai.
Cấu hình production phổ biến: S3 (hay MinIO) sau một CDN — nó cache và phân phối object nhanh từ gần mỗi user.
Đặt cạnh ổ đĩa VPS là thấy ngay lý do dùng.
Một ổ, một máy. Đầy dần, và nếu nó chết thì upload, ảnh, backup của bạn mất theo. Bạn tự lo capacity.
Ổn cho code. Không phải nhà đúng cho file mà người dùng tải về.
Một bucket các object, mỗi object một URL. Tự mở rộng, được nhân bản nên bền, và CDN phía trước làm nó nhanh.
Nhà ngoài VM cho upload và media.
Object storage là file của bạn ngoài VM — một bucket các object, mỗi cái một URL, tự mở rộng.
Tiếp theo: đặt một CDN phía trước để phân phối nhanh toàn cầu.