Generic, Multi-Tenant, High-Performance Dynamic Image Processing Worker for MinIO / S3 Object Storage.
MinIO Image Worker là một giải pháp background worker chuyên dụng được thiết kế cho hệ sinh thái MinIO / S3 Object Storage (Synology NAS, Cloud S3, AWS S3).
Giải pháp giải quyết triệt để bài toán: Khi ứng dụng Web/App di động upload ảnh gốc dung lượng lớn (3MB - 10MB), việc truy xuất danh sách sẽ làm đơ giật giao diện và tốn hàng GB băng thông.
minio-image-worker chạy độc lập 24/7 dưới dạng Docker Container, tự động phát hiện các ảnh mới trong MinIO và nén/tạo biến thể tĩnh WebP siêu nhẹ (thumbnail, preview,...) trong thời gian thực.
- ⚡ Siêu Nhanh & Nhẹ (Powered by Sharp): Chuyển đổi định dạng ảnh gốc (
.jpg,.png) sang WebP thế hệ mới, giảm dung lượng lên đến 95% nhưng giữ nguyên chất lượng hiển thị. - 🔄 Incremental Scan (Quét Tăng Trưởng Thông Minh): Theo dõi trạng thái nén bằng
ETag. Không bao giờ scan lại hoặc nén lại các file đã làm -> Tiết kiệm 99% CPU/RAM cho máy chủ. - 📁 Multi-Tenant & Multi-Folder Support: Hỗ trợ quét tự động toàn bộ Bucket hoặc danh sách nhiều thư mục dự án cùng lúc (
avatars/,documents/,vehicle-images/,...). - ⚙️ Config-Driven Architecture: Dễ dàng tùy chỉnh kích thước (
width,height), độ nén (quality), định dạng (webp,avif) hoàn toàn qua fileconfig.jsonmà không cần sửa code. - 🐳 Docker & Synology NAS Native: Đóng gói sẵn Dockerfile siêu nhỏ gọn (Alpine Node 22), dễ dàng deploy qua Synology Container Manager hoặc Docker Compose.
minio-image-worker/
├── config/
│ └── config.json # File cấu hình quy định biến thể, prefix & concurrency
├── data/
│ └── state.json # Lưu trữ trạng thái ETag đã nén (Incremental Scan)
├── src/
│ └── worker.js # Core Worker Logic (MinIO S3 Client + Sharp Engine)
├── Dockerfile # Lightweight Production Dockerfile (Node 22 Alpine)
├── docker-compose.yml # File mẫu deploy Container Manager / Docker Compose
└── package.json
{
"source": {
"prefix": "",
"extensions": [".jpg", ".jpeg", ".png", ".webp"]
},
"variants": {
"thumbnail": {
"width": 320,
"height": 320,
"fit": "cover",
"format": "webp",
"quality": 75
},
"preview": {
"width": 1280,
"height": 1280,
"fit": "inside",
"format": "webp",
"quality": 82
}
},
"worker": {
"interval": 5000,
"concurrency": 2
}
}docker build -t minio-image-worker:1.0.0 .Tạo file docker-compose.yml:
version: '3.8'
services:
image-worker:
image: minio-image-worker:1.0.0
container_name: minio-image-worker
restart: unless-stopped
environment:
TZ: Asia/Ho_Chi_Minh
MINIO_ENDPOINT: 192.168.100.223:9000
MINIO_ACCESS_KEY: your_access_key
MINIO_SECRET_KEY: your_secret_key
MINIO_SECURE: "false"
MINIO_BUCKET: files
volumes:
- ./config:/app/config:ro
- ./data:/app/data- Giấy phép: ISC License