Setup MinIO di VPS Linux
Self-Hosted S3 Object Storage

AWS S3 kompatibel, gratis, dan jalan di VPS kamu sendiri.

± 20 menit baca SufaNet
Setup MinIO Self-Hosted S3 di VPS Linux

Pendahuluan

Hampir semua aplikasi modern butuh tempat untuk menyimpan file: gambar upload, PDF, video, backup database.

AWS S3 adalah standar industry untuk object storage. Tapi biayanya bisa signifikan untuk project kecil, dan semua data ada di server AWS.

MinIO adalah solusinya: S3-compatible object storage yang jalan di VPS kamu sendiri, gratis, dan bisa diintegrasikan dengan aplikasi yang sudah pakai AWS SDK.

Apa Itu MinIO?

  • Object storage open source berkinerja tinggi
  • 100% kompatibel dengan AWS S3 API
  • Bisa pakai SDK S3 yang sama (aws-sdk, boto3, dll)
  • Punya web console yang clean dan mudah digunakan
  • Support encryption dan versioning

Install MinIO dengan Docker Compose

Buat direktori dan file konfigurasi:

mkdir -p /opt/minio/data
nano /opt/minio/docker-compose.yml
version: '3.8'

services:
  minio:
    image: minio/minio:latest
    container_name: minio
    restart: unless-stopped
    ports:
      - "9000:9000"   # S3 API
      - "9001:9001"   # Web Console
    volumes:
      - /opt/minio/data:/data
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: password_kuat_min_8_karakter
    command: server /data --console-address ":9001"
cd /opt/minio
docker compose up -d
docker compose logs -f

Akses Web Console MinIO

Buka browser ke http://IP_VPS_KAMU:9001. Login dengan username dan password yang kamu set di environment.

Dari console kamu bisa:

  • Buat bucket baru
  • Upload dan kelola file
  • Set bucket policy (public/private)
  • Buat access key untuk aplikasi
  • Monitor penggunaan storage

Nginx Reverse Proxy + SSL untuk MinIO

Agar MinIO bisa diakses via domain dengan HTTPS:

server {
    listen 80;
    server_name storage.domain-kamu.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name storage.domain-kamu.com;

    ssl_certificate /etc/letsencrypt/live/storage.domain-kamu.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/storage.domain-kamu.com/privkey.pem;

    # S3 API
    location / {
        proxy_pass http://localhost:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        client_max_body_size 100M;
    }
}

server {
    listen 443 ssl;
    server_name console.storage.domain-kamu.com;

    ssl_certificate /etc/letsencrypt/live/console.storage.domain-kamu.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/console.storage.domain-kamu.com/privkey.pem;

    # Web Console
    location / {
        proxy_pass http://localhost:9001;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Integrasi MinIO dengan Laravel

Install package AWS SDK untuk Laravel:

composer require league/flysystem-aws-s3-v3

Konfigurasi di .env:

FILESYSTEM_DISK=s3

AWS_ACCESS_KEY_ID=ACCESS_KEY_MINIO_KAMU
AWS_SECRET_ACCESS_KEY=SECRET_KEY_MINIO_KAMU
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=nama-bucket-kamu
AWS_URL=https://storage.domain-kamu.com
AWS_ENDPOINT=https://storage.domain-kamu.com
AWS_USE_PATH_STYLE_ENDPOINT=true

Sekarang bisa pakai Storage facade seperti biasa:

Storage::put('file.jpg', $fileContent);
$url = Storage::url('file.jpg');

Integrasi MinIO dengan Node.js

npm install @aws-sdk/client-s3
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

const s3 = new S3Client({
  region: "us-east-1",
  endpoint: "https://storage.domain-kamu.com",
  credentials: {
    accessKeyId: "ACCESS_KEY",
    secretAccessKey: "SECRET_KEY",
  },
  forcePathStyle: true,
});

await s3.send(new PutObjectCommand({
  Bucket: "nama-bucket",
  Key: "folder/file.jpg",
  Body: fileBuffer,
}));

Konfigurasi Bucket Policy

Untuk file yang perlu diakses publik (misal: gambar produk), set bucket policy ke public via console atau CLI:

# Install MinIO client
docker exec -it minio mc alias set myminio http://localhost:9000 admin password_kamu

# Set bucket public
docker exec -it minio mc anonymous set public myminio/public-bucket

Kenapa VPS SufaNet Cocok untuk MinIO?

  • Storage bisa di-upgrade sesuai kebutuhan
  • SSD NVMe — I/O cepat untuk file besar
  • Bandwidth besar untuk download/upload asset
  • Harga storage VPS jauh lebih murah dari AWS S3

Kontrol penuh atas data kamu

File kamu tidak ada di server orang lain. Data compliance, GDPR, atau regulasi lokal jadi lebih mudah dikelola.

🚀 Lihat VPS Singapore SufaNet

FAQ

MinIO cocok untuk menyimpan berapa banyak data?

MinIO dirancang untuk petabyte data. Untuk VPS, batasannya adalah kapasitas disk VPS kamu.

Bisa dipakai sebagai CDN?

MinIO sendiri bukan CDN, tapi bisa dikombinasikan dengan Cloudflare untuk caching edge. Aktifkan Cloudflare proxy untuk domain MinIO kamu.

Bagaimana cara backup data MinIO?

Gunakan mc mirror untuk sync ke bucket lain atau rclone untuk sync ke Google Drive / Backblaze B2 sebagai backup.

Kesimpulan

MinIO menghadirkan pengalaman AWS S3 lengkap ke VPS kamu sendiri. Aplikasi yang sudah pakai AWS SDK tidak perlu ubah kode — cukup ganti endpoint.

Setup 20 menit, hemat biaya storage seumur hidup project.