Skip to main content
  1. Posts/

Install MinIO di Docker

·4 mins·
minio docker minio
Table of Contents

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}
Gantilah {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
Pastikan path sumber yang Anda tentukan benar. Jika tidak, perintah di atas dapat mengunggah seluruh file sistem Anda ke bucket.

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
Agar bucket dapat direplikasi, saat membuatnya harus menyertakan opsi --with-versioning.

Related

Install Consul dengan Docker
·2 mins
consul docker consul
Configure Network Aliases Docker
·2 mins
docker docker
Using IPvlan network in Docker
·5 mins
docker docker
Using Host Network in Docker
·1 min
docker docker
Using Overlay Network in Docker
·2 mins
docker docker
Building Docker Images with Dockerfiles
·1 min
docker docker