MinIO adalah solusi object storage yang kompatibel dengan API Amazon S3 dan mendukung seluruh fitur inti S3. Dirancang untuk fleksibilitas dan kinerja tinggi, MinIO dapat dijalankan di berbagai lingkungan — mulai dari public cloud, private cloud, bare-metal infrastructure, hingga edge computing.
Instalasi MinIO #
Menggunakan Docker #
Untuk menginstal MinIO menggunakan Docker, jalankan perintah berikut:
docker run -dit \
-p 9000:9000 \
-p 9090:9090 \
--name minio \
-v storage:/data \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
quay.io/minio/minio server /data --console-address ":9090"
Menggunakan Docker Compose #
Atau, Anda juga bisa menggunakan docker-compose
dengan konfigurasi berikut:
services:
traefik:
image: traefik:latest # Versi spesifik
container_name: traefik
environment:
- CF_API_EMAIL=${CLOUDFLARE_EMAIL}
- CF_DNS_API_TOKEN=${CLOUDFLARE_API_KEY}
command:
- "--configFile=/etc/traefik/traefik.yml"
ports:
- "80:80"
- "443:443"
volumes:
- ./traefik/traefik.yml:/etc/traefik/traefik.yml
- ./traefik/custom:/etc/traefik/custom
- ./letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
networks:
- external
security_opt:
- no-new-privileges:true
labels:
# Autentikasi untuk dashboard Traefik
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`${DOMAIN_TRAEFIK}`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.tls.certresolver=${CERTRESOLVER}"
- "traefik.http.routers.traefik.middlewares=traefik-auth"
- "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_PASSWORD}" # Ganti dengan user:password hash
minio:
image: minio/minio:RELEASE.2025-02-07T23-21-09Z
container_name: minio
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=${MINIO_ROOT_USER} # Gunakan environment variable
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}
- MINIO_BROWSER_REDIRECT_URL=https://${DOMAIN_MINIO}
volumes:
- ./minio-data:/data
restart: unless-stopped
networks:
- internal
- external
labels:
- "traefik.enable=true"
# MinIO Console
- "traefik.http.routers.${APP_NAME}-console.rule=Host(`${DOMAIN_MINIO}`)"
- "traefik.http.routers.${APP_NAME}-console.entrypoints=websecure"
- "traefik.http.routers.${APP_NAME}-console.service=${APP_NAME}-console"
- "traefik.http.routers.${APP_NAME}-console.tls.certresolver=${CERTRESOLVER}"
- "traefik.http.services.${APP_NAME}-console.loadbalancer.server.port=9001"
# Middleware keamanan tambahan
- "traefik.http.routers.${APP_NAME}-console.middlewares=security-headers@file,compress@file"
# MinIO API (opsional)
- "traefik.http.routers.${APP_NAME}-api.rule=Host(`${DOMAIN_MINIO_API}`)"
- "traefik.http.routers.${APP_NAME}-api.entrypoints=websecure"
- "traefik.http.routers.${APP_NAME}-api.service=${APP_NAME}-api"
- "traefik.http.routers.${APP_NAME}-api.tls.certresolver=${CERTRESOLVER}"
- "traefik.http.services.${APP_NAME}-api.loadbalancer.server.port=9000"
- "traefik.docker.network=${NETWORK}"
# Network khusus untuk isolasi
networks:
internal:
name: ${APP_NAME}
external:
external: true
name: ${NETWORK}
Kemudian buat file .env
seperti berikut.
# Minio
MINIO_ROOT_USER=secure_username
MINIO_ROOT_PASSWORD=strong_password_123!
DOMAIN_MINIO=minio.yourdomain.com
DOMAIN_MINIO_API=minio-api.yourdomain.com
# Trefik
## htpasswd -nb admin secure_password | sed -e s/\\$/\\$\\$/g
TRAEFIK_PASSWORD=admin:$$apr1$$KNBNzB4i$$HYhKfWmaHrFTAtcR4eJmX.
DOMAIN_TRAEFIK=traefik.yourdomain.com
CERTRESOLVER=letsencrypt
[email protected]
CLOUDFLARE_API_KEY=your_secret
APP_NAME=minio
NETWORK=traefik
Untuk konfigurasi traefik dapat Anda lihat di repo GitHub
Jalankan stack minio.
docker compose up -d
Akses MinIO Console #
Setelah kontainer berjalan, Anda dapat mengakses MinIO Console melalui:
http://<IP-address>:9090
Contoh tampilan:

Instalasi MinIO Client (mc) #
MinIO Client (mc
) memungkinkan Anda untuk mengelola bucket dan object storage melalui command line.
Unduh dan Instal MinIO Client #
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/mc
Konfigurasi mc
agar Terhubung ke MinIO Server
#
Gunakan perintah berikut untuk menambahkan alias koneksi ke MinIO server lokal:
mc alias set local http://127.0.0.1:9000 {MINIO_ROOT_USER} {MINIO_ROOT_PASSWORD}
{MINIO_ROOT_USER}
dan {MINIO_ROOT_PASSWORD}
sesuai dengan environment variable yang Anda tetapkan saat menjalankan container MinIO.
Tes Koneksi ke Server #
Untuk memastikan mc
berhasil terhubung, jalankan perintah berikut:
mc admin info local
Contoh output:
● 127.0.0.1:9000
Uptime: 25 minutes
Version: 2023-06-29T05:12:28Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1
Pools:
1st, Erasure sets: 1, Drives per erasure set: 1
1 drive online, 0 drives offline
Basic Usage MinIO Client #
Membuat Bucket #
Untuk membuat satu bucket:
mc mb local/wordpress
Membuat Beberapa Bucket Sekaligus #
mc mb local/user-1 local/user-2 local/user-3
Menampilkan Daftar Bucket #
mc ls local
Contoh output:
[2023-06-30 14:36:42 WIB] 0B user-1/
[2023-06-30 14:36:42 WIB] 0B user-2/
[2023-06-30 14:36:42 WIB] 0B user-3/
[2023-06-30 14:32:41 WIB] 0B wordpress/
Mengunggah File atau Folder ke Bucket #
Untuk mengunggah seluruh isi direktori root (gunakan hati-hati!):
mc cp -r /* local/wordpress
Memindahkan Objek dari Satu Bucket ke Bucket Lain #
untuk memindahkan semua objek dari bucket wordpress
ke user-1
.
mc mv -r local/wordpress/ local/user-1
Menyinkronkan Objek ke Bucket #
Menyinkronkan seluruh isi direktori lokal ke bucket wordpress
. Perubahan pada lokal akan dicerminkan di bucket.
mc mirror ./ local/wordpress
Mencari Objek Berdasarkan Nama #
Mencari file index.php
di seluruh bucket yang terdaftar pada alias local
.
mc find local --name "index.php"
Mengirim Data dari STDIN ke Objek di Bucket #
Mengirim isi file ISO ke objek gnuos.iso
di bucket user-2
. Berguna untuk upload streaming atau integrasi pipeline.
cat debian-8.2.iso | mc pipe local/user-2/gnuos.iso
Menampilkan Isi Objek #
Menampilkan isi file index.php
langsung di terminal.
mc cat local/wordpress/index.php
Melihat Metadata Objek #
Menampilkan metadata dari objek atau bucket wordpress
.
mc stat local/wordpress
Mengecek Penggunaan Disk pada Bucket #
Menunjukkan total penggunaan ruang pada bucket wordpress
.
mc du local/wordpress
Membuat URL untuk Mengunduh Objek #
Menghasilkan URL temporer untuk mengunduh objek atau isi bucket.
mc share download local/wordpress
Menetapkan Kuota pada Bucket #
Membatasi penggunaan ruang pada bucket user-3
sebesar 52 MB.
mc quota set local/user-3 --size 52M
Mengatur Akses Bucket (Publik/Privat) #
Menjadikan bucket wordpress
dapat diakses secara publik. Gunakan private
untuk membatasi akses.
mc anonymous set public local/wordpress
Mengatur Replikasi Bucket #
Menyinkronkan bucket wp1
ke remote bucket backup
.
mc replicate add local/wp1 --remote-bucket http://admin:[email protected]:9000/backup
--with-versioning
.