Server lưu trữ đối tượng nói chuẩn Amazon S3 API, tự host, miễn phí, có web console tiếng Việt.
Dùng thay MinIO: cùng cổng 9000 (S3 API) / 9001 (console), chấp nhận cả biến môi trường MINIO_ROOT_USER / MINIO_ROOT_PASSWORD.
Tags: latest, 0.2.0 · Nền tảng: linux/amd64
Tạo file docker-compose.yml:
services:
khos3:
image: omtvn/minio-custom:latest # nên ghim phiên bản khi chạy thật, vd: omtvn/minio-custom:0.2.0
container_name: khos3
restart: unless-stopped
ports:
- "9000:9000" # S3 API (ứng dụng kết nối vào đây)
- "9001:9001" # Web console (mở bằng trình duyệt)
environment:
KHOS3_ROOT_USER: admin
KHOS3_ROOT_PASSWORD: doi-mat-khau-nay # tối thiểu 8 ký tự — BẮT BUỘC đổi
TZ: Asia/Ho_Chi_Minh
# KHOS3_SERVER_URL: https://s3.example.com # URL công khai của S3 API (dùng cho link chia sẻ khi chạy sau reverse proxy)
# KHOS3_REGION: us-east-1
# KHOS3_PROMETHEUS_AUTH_TYPE: public # mở số liệu Prometheus tại /khos3/metrics
volumes:
- ./data:/data # toàn bộ dữ liệu + cấu hình nằm ở đây
logging:
driver: json-file
options:
max-size: "20m"
max-file: "5"
Chạy:
docker compose up -d
docker compose ps # cột STATUS chuyển sang "healthy" sau vài giây
docker compose logs -f # xem log, Ctrl+C để thoát
http://<ip-máy-chủ>:9001 — đăng nhập bằng KHOS3_ROOT_USER / KHOS3_ROOT_PASSWORDhttp://<ip-máy-chủ>:9000Không muốn để mật khẩu trong file? Dùng Docker secrets: đặt
KHOS3_ROOT_PASSWORD_FILE: /run/secrets/khos3_root_password(tương tự choKHOS3_ROOT_USER_FILE).
Ví dụ dùng 2 tên miền: s3.example.com cho S3 API và console.example.com cho web console. Caddy tự xin chứng chỉ HTTPS.
docker-compose.yml:
services:
khos3:
image: omtvn/minio-custom:latest
container_name: khos3
restart: unless-stopped
environment:
KHOS3_ROOT_USER: admin
KHOS3_ROOT_PASSWORD: doi-mat-khau-nay
KHOS3_SERVER_URL: https://s3.example.com
TZ: Asia/Ho_Chi_Minh
volumes:
- ./data:/data
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
depends_on:
- khos3
volumes:
caddy_data:
Caddyfile:
s3.example.com {
reverse_proxy khos3:9000
}
console.example.com {
reverse_proxy khos3:9001
}
Lưu ý khi dùng Nginx thay Caddy: giữ nguyên header Host (proxy_set_header Host $http_host;), đặt
client_max_body_size 0; và proxy_request_buffering off; — chữ ký S3 phụ thuộc vào Host.
Luôn bật path-style, region us-east-1. Nên tạo access key riêng cho từng ứng dụng trong console (mục Access Keys)
thay vì dùng tài khoản root.
// C# (AWSSDK.S3)
var s3 = new AmazonS3Client("ACCESS_KEY", "SECRET_KEY", new AmazonS3Config {
ServiceURL = "http://<ip-máy-chủ>:9000", ForcePathStyle = true, AuthenticationRegion = "us-east-1" });
# Python (boto3)
s3 = boto3.client("s3", endpoint_url="http://<ip-máy-chủ>:9000",
aws_access_key_id="ACCESS_KEY", aws_secret_access_key="SECRET_KEY", region_name="us-east-1")
// Laravel config/filesystems.php
's3' => ['driver' => 's3', 'key' => 'ACCESS_KEY', 'secret' => 'SECRET_KEY', 'region' => 'us-east-1',
'bucket' => 'ten-bucket', 'endpoint' => 'http://<ip-máy-chủ>:9000', 'use_path_style_endpoint' => true],
| Biến | Mặc định | Ý nghĩa |
|---|---|---|
KHOS3_ROOT_USER / KHOS3_ROOT_PASSWORD | minioadmin / minioadmin | Tài khoản quản trị gốc. Hỗ trợ ..._FILE (Docker secrets) |
KHOS3_SERVER_URL | tự suy ra | URL công khai của S3 API, dùng khi tạo link chia sẻ |
KHOS3_REGION | us-east-1 | Region báo cho client |
KHOS3_DOMAIN | — | Bật virtual-host style bucket.<domain> |
KHOS3_BROWSER | on | off để tắt web console |
KHOS3_API_CORS_ALLOW_ORIGIN | * | Origin cho phép (CORS) với bucket chưa cấu hình riêng |
KHOS3_PROMETHEUS_AUTH_TYPE | — | public để mở /khos3/metrics |
KHOS3_FSYNC | on | off để bỏ fsync (nhanh hơn, kém an toàn khi mất điện) |
KHOS3_TRACE | off | on để ghi log từng request |
Các tên MINIO_* tương ứng cũng được chấp nhận, nên có thể giữ nguyên file cấu hình cũ của MinIO.
9000/tcp | S3 API |
9001/tcp | Web console |
/data | Dữ liệu, cấu hình bucket, người dùng (/data/.khos3) |
| Healthcheck | Có sẵn trong image (/minio/health/live) |
Sao lưu: sao chép thư mục ./data khi container dừng (hoặc snapshot ổ đĩa). Bắt buộc giữ cả
./data/.khos3/iam.key — thiếu file này sẽ không giải mã được secret key của người dùng.
docker compose pull
docker compose up -d
Chạy KhoS3 song song rồi sao chép bằng MinIO client:
mc alias set minio http://may-cu:9000 USER PASS
mc alias set kho http://may-moi:9000 USER PASS
mc mirror --preserve minio/ kho/
Content type
Image
Digest
sha256:e6df86d12…
Size
86.7 MB
Last updated
24 days ago
docker pull omtvn/minio-custom