Sign inSign up

omtvn/minio-custom

By omtvn

•Updated 18 days ago

Image
0

41

omtvn/minio-custom repository overview

⁠KhoS3 — object storage tương thích S3 (thay thế MinIO)

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.

  • S3 API: bucket, object, multipart, presigned URL, versioning, lifecycle, CORS, tags, bucket policy, checksum
  • Quản lý người dùng, nhóm, policy (cú pháp AWS IAM) và access key riêng cho từng ứng dụng
  • Console: dashboard, quản lý bucket (versioning, quota, quyền công khai theo thư mục), duyệt/upload/chia sẻ file, khôi phục phiên bản cũ

Tags: latest, 0.2.0 · Nền tảng: linux/amd64


⁠Chạy nhanh với Docker Compose

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
  • Web console: http://<ip-máy-chủ>:9001 — đăng nhập bằng KHOS3_ROOT_USER / KHOS3_ROOT_PASSWORD
  • S3 endpoint cho ứng dụng: http://<ip-máy-chủ>:9000

Khô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ự cho KHOS3_ROOT_USER_FILE).

⁠Chạy sau reverse proxy có HTTPS (Caddy)

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.

⁠Kết nối từ ứng dụng

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ôi trường

BiếnMặc địnhÝ nghĩa
KHOS3_ROOT_USER / KHOS3_ROOT_PASSWORDminioadmin / minioadminTài khoản quản trị gốc. Hỗ trợ ..._FILE (Docker secrets)
KHOS3_SERVER_URLtự suy raURL công khai của S3 API, dùng khi tạo link chia sẻ
KHOS3_REGIONus-east-1Region báo cho client
KHOS3_DOMAIN—Bật virtual-host style bucket.<domain>
KHOS3_BROWSERonoff để 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_FSYNConoff để bỏ fsync (nhanh hơn, kém an toàn khi mất điện)
KHOS3_TRACEoffon để 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.

⁠Cổng, volume, healthcheck

9000/tcpS3 API
9001/tcpWeb console
/dataDữ liệu, cấu hình bucket, người dùng (/data/.khos3)
HealthcheckCó 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.

⁠Nâng cấp

docker compose pull
docker compose up -d

⁠Chuyển dữ liệu từ MinIO

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/

Tag summary

Content type

Image

Digest

sha256:e6df86d12…

Size

86.7 MB

Last updated

24 days ago

docker pull omtvn/minio-custom