Cara Install MinIO Object Storage di Ubuntu 24.04
Object storage adalah metode penyimpanan data di mana unit data disimpan sebagai objek yang terpisah. Berbeda dengan sistem file tradisional yang menggunakan hierarki direktori, atau sistem penyimpanan berbasis blok yang menyimpan data dalam blok tetap, object storage menyimpan data dalam satu repositori yang dapat diakses secara langsung melalui ID unik. Setiap objek terdiri dari data itu sendiri, metadata, dan pengenal unik. Keuntungan utama dari object storage termasuk skalabilitas yang tinggi, kemampuan menyimpan data tidak terstruktur dalam jumlah besar, serta aksesibilitas dan manajemen yang lebih mudah melalui antarmuka program aplikasi (API).
Object storage sangat cocok digunakan ketika kita ingin menyimpan data dalam jumlah besar yang tidak terstruktur, seperti file multimedia (foto, video), backup dan arsip data, data sensor IoT, dan data aplikasi web atau mobile. Contoh penerapan object storage meliputi penyimpanan file cadangan di layanan cloud, hosting konten media, dan penyimpanan data besar untuk analisis big data atau machine learning.
Salah satu implementasi Object Storage yang populer adalah MinIO. Solusi open-source ini menawarkan fungsionalitas yang mirip dengan layanan cloud storage komersial seperti Amazon S3, namun dengan kontrol dan fleksibilitas yang lebih besar.
MinIO dapat diinstal dan dijalankan di berbagai platform, termasuk Ubuntu. Tutorial ini akan membahas langkah demi langkah dalam menginstal dan mengkonfigurasi MinIO Object Storage di Ubuntu 24.04.
Topologi Deploy MinIO
Terdapat 3 tipe topologi dalam deployment MinIO, yaitu:
- Single-Node Single-Drive (SNSD atau “Standalone”): Topologi ini adalah yang paling sederhana di antara semua deployment MinIO. Dalam mode ini, MinIO diinstal pada satu node (server) dan menggunakan satu drive (disk) untuk menyimpan data.
- Single-Node Multi-Drive (SNMD atau “Standalone Multi-Drive”): Pada topologi ini MinIO diinstal pada satu node tetapi menggunakan beberapa drive (disk) untuk menyimpan data.
- Multi-Node Multi-Drive (MNMD atau “Distributed”): Topologi ini adalah yang paling kompleks dari ketiga topologi yang disebutkan. Dalam mode ini, MinIO diinstal pada beberapa node, dan masing-masing node memiliki beberapa drive.
Tutorial Environment
Pada tutorial ini menggunakan:
- VPS Vultr 1 CPU 1 GB RAM
- Block Storage 100GB
- Sistem Operasi Ubuntu 24.04
- MiniO Open Source
- Subdomain minio-console.aminlabs.my.id dan minio-s3.aminlabs.my.id
- SSL Cloudflare
- Topologi Single-Node Single-Drive
Catatan: Daftar di sini untuk mendapatkan $100 free credit dari Vultr.
Tahapan Install MinIO Server
Tahapan install MinIO Server terbagi ke dalam 4 bagian, yaitu mount block storage, install package MinIO server, konfigurasi Nginx reverse proxy, dan pengujian.
1. Mount Block Storage
Jalankan update dan upgrade Ubuntu:
1 2 | sudo apt update sudo apt upgrade -y |
Untuk media penyimpanan MinIO disiapkan disk tersendiri. Pada tutorial ini menggunakan cloud server Vultr dan block storage 100GB sebagai disk tambahan untuk MinIO.
Menampilkan block devices:
1 | sudo lsblk |
1 2 3 4 5 6 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom vda 253:0 0 32G 0 disk ├─vda1 253:1 0 512M 0 part /boot/efi └─vda2 253:2 0 31.5G 0 part / vdb 253:16 0 100G 0 disk |
Pada hasil di atas terdapat device vdb
yang akan dipartisi, diformat, di-mount.
Mempartisi vdb
, kemudian memformat vdb1
dengan filesystem XFS:
1 2 3 | sudo parted -s /dev/vdb mklabel gpt sudo parted -s /dev/vdb unit mib mkpart primary 0% 100% sudo mkfs.xfs /dev/vdb1 |
Memverifikasi hasil perintah di atas, terdapat vdb1
:
1 | sudo lsblk |
1 2 3 4 5 6 7 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom vda 253:0 0 32G 0 disk ├─vda1 253:1 0 512M 0 part /boot/efi └─vda2 253:2 0 31.5G 0 part / vdb 253:16 0 100G 0 disk └─vdb1 253:17 0 100G 0 part |
Membuat direktori minio-storage
sebagai direktori mount untuk partisi vdb1
:
1 | sudo mkdir /mnt/minio-storage |
Mount vdb1
ke /mnt/minio-storage
:
1 | sudo mount /dev/vdb1 /mnt/minio-storage |
Memverifikasi hasil perintah di atas:
1 | df -hT |
Hasilnya, vdb1
sudah ter-mount di /mnt/minio-storage
:
1 2 3 4 5 6 7 8 9 | Filesystem Type Size Used Avail Use% Mounted on tmpfs tmpfs 96M 1.2M 95M 2% /run efivarfs efivarfs 256K 18K 234K 7% /sys/firmware/efi/efivars /dev/vda2 ext4 30G 7.0G 22G 25% / tmpfs tmpfs 478M 0 478M 0% /dev/shm tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda1 vfat 511M 6.2M 505M 2% /boot/efi tmpfs tmpfs 96M 12K 96M 1% /run/user/0 /dev/vdb1 xfs 100G 2.0G 98G 2% /mnt/minio-storage |
Membuka file konfigurasi fstab
:
1 | sudo nano /etc/fstab |
Menambahkan baris konfigurasi untuk auto-mount vdb1
:
1 | /dev/vdb1 /mnt/minio-storage xfs defaults 0 0 |
2. Install MinIO Server
Download dan install MinIO Server:
1 2 | wget https://dl.min.io/server/minio/release/linux-amd64/minio_20240626010618.0.0_amd64.deb sudo dpkg -i minio_20240626010618.0.0_amd64.deb |
Cek versi terbaru di min.io/download.
Membuat user minio-user
dan mengubah ownership direktori minio-storage
:
1 2 | sudo useradd -r minio-user -s /sbin/nologin sudo chown minio-user:minio-user /mnt/minio-storage |
Membuat file konfigurasi minio
:
1 | sudo nano /etc/default/minio |
Masukkan konfigurasi berikut:
1 2 3 4 | MINIO_VOLUMES="/mnt/minio-storage" MINIO_OPTS="--address :9000 --console-address :9001" MINIO_ROOT_USER=minioadmin MINIO_ROOT_PASSWORD=miniosecretpassword |
- MINIO_VOLUMES: lokasi penyimpanan data MinIO
- MINIO_OPTS:
--address :9000
merupakan alamat dan port layanan MinIO akanlistening
, sedangkan--console-address :9001
untuk web console administrasi MinIO - MINIO_ROOT_USER: username untuk akun root MinIO
- MINIO_ROOT_PASSWORD: password untuk akun root MinIO
Menjalankan dan menampilkan status service minio:
1 2 | sudo systemctl start minio sudo systemctl status minio |
3. Nginx Reverse Proxy
Install Nginx:
1 | sudo apt install nginx |
File sertifikat dan private key SSL untuk subdomain yang digunakan:
1 2 | /etc/ssl/minio/cert.pem /etc/ssl/minio/pvkey.pem |
Membuat file konfigurasi Nginx server block untuk reverse proxy subdomain minio-console
, web interface administrasi MinIO:
1 | sudo nano /etc/nginx/conf.d/minio-console.conf |
Masukkan konfigurasi berikut, sesuaikan subdomain dan port yang digunakan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | server { listen 443 ssl; listen [::]:443 ssl; server_name minio-console.aminlabs.my.id; ignore_invalid_headers off; client_max_body_size 0; proxy_buffering off; proxy_request_buffering off; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; real_ip_header X-Real-IP; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; chunked_transfer_encoding off; proxy_pass http://127.0.0.1:9001; } ssl_certificate /etc/ssl/minio/cert.pem; ssl_certificate_key /etc/ssl/minio/pvkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; access_log /var/log/nginx/minio-console.access.log; error_log /var/log/nginx/minio-console.error.log; } server { listen 80; listen [::]:80; server_name minio-console.aminlabs.my.id; return 301 https://$host$request_uri; } |
Membuat file konfigurasi Nginx server block untuk reverse proxy subdomain minio-s3
, akses API:
1 | sudo nano /etc/nginx/conf.d/minio-s3.conf |
Masukkan konfigurasi berikut, sesuaikan subdomain dan port yang digunakan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | server { listen 443 ssl; listen [::]:443 ssl; server_name minio-s3.aminlabs.my.id; ignore_invalid_headers off; client_max_body_size 0; proxy_buffering off; proxy_request_buffering off; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://127.0.0.1:9000; } ssl_certificate /etc/ssl/minio/cert.pem; ssl_certificate_key /etc/ssl/minio/pvkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; access_log /var/log/nginx/minio-s3.access.log; error_log /var/log/nginx/minio-s3.error.log; } server { listen 80; listen [::]:80; server_name minio-s3.aminlabs.my.id; return 301 https://$host$request_uri; } |
Restart dan menampilkan status service minio:
1 2 | sudo systemctl restart minio sudo systemctl status minio |
Membuka port 80 dan 443:
1 2 | sudo ufw allow 80 sudo ufw allow 443 |
4. Pengujian
Pengujian hasil instalasi, yang pertama mengakses web console di https://minio-console.aminlabs.my.id
, login dengan menggunakan username dan password akun root yang dikonfigurasikan sebelumnya pada file /etc/default/minio
. Uji coba membuat bucket, upload file, dan membuat user.
Pengujian kedua, mengakses API MinIO melalui aplikasi client. Instalasi aplikasi MinIO Client (mcli) format DEB:
1 2 | wget https://dl.min.io/client/mc/release/linux-amd64/mcli_20240629190846.0.0_amd64.deb sudo dpkg -i mcli_20240629190846.0.0_amd64.deb |
Untuk versi terbaru dan sistem operasi lain, cek di min.io/download.
Melakukan koneksi ke MinIO server:
1 | mcli alias set myminio/ https://minio-s3.aminlabs.my.id MYUSER MYPASSWORD |
Menampilkan semua object yang berada di myminio
dan bucket mydata
:
1 | mcli ls myminio/mydata |
Untuk informasi dan petunjuk lebih lengkap, pelajari dokumentasi resmi MinIO di min.io/docs.
Selamat mencoba 🙂