🎁
Bonus Top-up 50%!Promo Terbatas
Upvote
buckets3miniostoragetutorial

Deploy S3-Compatible Bucket di Helipod dan Akses dari Local

Tim Helipod

7 menit baca

Panduan lengkap cara deploy MinIO S3-compatible bucket di Helipod, konfigurasi environment variables, generate magic domain, lalu akses dan upload file langsung dari terminal lokal kamu menggunakan AWS CLI — termasuk path-style addressing dan konfigurasi lanjutan MinIO.

Butuh object storage yang kompatibel dengan S3 API tanpa perlu setup server sendiri? Helipod menyediakan Bucket service berbasis MinIO — S3-compatible, siap pakai dalam hitungan menit, dan bisa langsung diakses dari aplikasi maupun terminal lokal kamu.

Di artikel ini kita akan deploy bucket, konfigurasi variabel, generate domain publik, lalu langsung coba upload file dari terminal menggunakan AWS CLI. Termasuk penjelasan tentang path-style vs virtual-hosted-style dan opsi konfigurasi MinIO lainnya.

Yang Kamu Butuhkan

Sebelum mulai, pastikan kamu sudah punya:

  • Akun Helipod (daftar gratis di helipod.io)
  • AWS CLI terinstall di lokal (panduan install)
  • Project yang sudah dibuat di Helipod

Langkah 1: Tambah Service Bucket

Buka project kamu di dashboard Helipod, lalu klik + Add Service di pojok kanan atas canvas.

Di dialog New deployment yang muncul, pilih Bucket — deskripsinya: S3-compatible bucket for managing files, media, and assets.

Helipod akan otomatis membuat service MinIO dan menambahkannya ke canvas project kamu.

Langkah 2: Konfigurasi Environment Variables

Setelah service bucket terbuat, klik service tersebut di canvas lalu buka tab Variables.

Variabel Wajib

Tiga variabel ini harus selalu diset:

MINIO_ROOT_USER=nama-user-kamu
MINIO_ROOT_PASSWORD=password-yang-kuat
MINIO_API_CORS_ALLOW_ORIGIN=*

Tips keamanan: Gunakan password yang kuat untuk MINIO_ROOT_PASSWORD — minimal 8 karakter. Nilai ini akan menjadi Secret Access Key kamu saat mengakses bucket via AWS CLI. Variabel di Helipod dienkripsi at rest dan tidak pernah muncul di build logs.

Variabel Opsional dan Konfigurasi Lanjutan

MinIO mendukung banyak variabel environment untuk menyesuaikan perilakunya. Berikut opsi-opsi yang paling sering dibutuhkan:

Addressing Style: Path-Style vs Virtual-Hosted-Style

Ini adalah pengaturan yang paling penting untuk kompatibilitas dengan berbagai SDK dan tool.

Virtual-hosted-style (default AWS): bucket name menjadi subdomain.

https://my-bucket.nama-bucket.helipod.app/object.jpg

Path-style: bucket name menjadi bagian dari path URL.

https://nama-bucket.helipod.app/my-bucket/object.jpg

Karena Helipod menggunakan satu magic domain (bukan wildcard subdomain), path-style adalah pilihan yang lebih praktis — tidak memerlukan konfigurasi DNS tambahan per bucket.

Untuk mengaktifkan path-style di MinIO, set variabel berikut:

MINIO_API_SELECT_PARQUET=off
MINIO_DOMAIN=nama-bucket.helipod.app

Lalu saat menggunakan AWS CLI dari lokal, tambahkan flag --no-sign-request untuk bucket publik, atau gunakan config s3.addressing_style:

# Cara 1: flag per-command
aws s3 ls s3://my-bucket \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

# Cara 2: set addressing style di config AWS CLI (direkomendasikan)
aws configure set s3.addressing_style path --profile minio

Dengan addressing_style = path, AWS CLI akan selalu menggunakan path-style tanpa perlu flag tambahan.

Atau edit langsung file ~/.aws/config:

[profile minio]
region = us-east-1
output = json

[profile minio.s3]
addressing_style = path

Konfigurasi Storage & Performa

# Batas ukuran upload multipart (default: 16MB per part)
MINIO_API_REPLICATION_WORKERS=10

# Set timezone untuk timestamp logs
TZ=Asia/Jakarta

# Aktifkan compression untuk objek yang disimpan (hemat storage)
MINIO_COMPRESS_ENABLE=on
MINIO_COMPRESS_EXTENSIONS=.txt,.log,.csv,.json,.xml
MINIO_COMPRESS_MIME_TYPES=text/plain,application/json,text/csv

Konfigurasi CORS Spesifik

Untuk production, hindari * dan gunakan domain spesifik:

# Izinkan dari satu domain
MINIO_API_CORS_ALLOW_ORIGIN=https://app.kamu.com

# Izinkan dari beberapa domain (pisahkan dengan koma)
MINIO_API_CORS_ALLOW_ORIGIN=https://app.kamu.com,https://staging.kamu.com

Site & Region

# Set nama region (opsional, untuk kompatibilitas dengan SDK tertentu)
MINIO_SITE_REGION=ap-southeast-3
MINIO_SITE_NAME=helipod-bucket

Ringkasan Semua Variabel

Variabel Default Keterangan
MINIO_ROOT_USER Wajib. Username / Access Key ID
MINIO_ROOT_PASSWORD Wajib. Password / Secret Access Key (min 8 karakter)
MINIO_API_CORS_ALLOW_ORIGIN Wajib. * untuk semua origin
MINIO_DOMAIN Set jika ingin virtual-hosted-style dengan domain sendiri
MINIO_BROWSER on Set off untuk nonaktifkan Console UI
MINIO_SITE_REGION us-east-1 Region identifier
MINIO_COMPRESS_ENABLE off Aktifkan kompresi objek
TZ UTC Timezone untuk logs

Klik + New variable untuk menambahkan variabel yang kamu butuhkan, lalu klik Deploy untuk menerapkan perubahan.

Langkah 3: Generate Magic Domain dan Point ke Port 9000

MinIO berjalan di port 9000 untuk S3 API. Kamu perlu memastikan domain publik sudah diarahkan ke port ini.

Buka tab Settings pada service bucket, lalu scroll ke bagian Networking & Domains.

Kamu akan melihat dua entry:

  • Internal DNS — hostname privat untuk komunikasi antar pod di dalam cluster, tidak perlu diubah
  • Magic domain — domain publik yang otomatis digenerate Helipod, format: nama-bucket.helipod.app

Pastikan routing magic domain sudah menunjuk ke port :9000:

Internet :443 → Traefik → :9000 your app

Magic domain inilah yang akan kita gunakan sebagai S3 endpoint dari terminal lokal.

Langkah 4: Akses dari Terminal Lokal via AWS CLI

Bucket kamu sudah live dan bisa diakses dari luar. Saatnya connect dari terminal lokal.

Setup Credentials dan Config

Buat profile khusus untuk MinIO agar tidak bentrok dengan konfigurasi AWS lain:

aws configure --profile minio

Isi saat diminta:

  • AWS Access Key ID: nilai MINIO_ROOT_USER kamu
  • AWS Secret Access Key: nilai MINIO_ROOT_PASSWORD kamu
  • Default region name: us-east-1
  • Default output format: json

Lalu set path-style addressing agar tidak perlu flag tambahan setiap perintah:

aws configure set s3.addressing_style path --profile minio

Test Koneksi

aws s3 ls \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

Operasi Dasar

# Buat bucket
aws s3 mb s3://my-first-bucket \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

# Upload file
aws s3 cp ./foto.jpg s3://my-first-bucket/ \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

# Upload seluruh folder
aws s3 sync ./assets s3://my-first-bucket/assets \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

# Download file
aws s3 cp s3://my-first-bucket/foto.jpg ./foto-download.jpg \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

# List isi bucket
aws s3 ls s3://my-first-bucket \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

# Hapus file
aws s3 rm s3://my-first-bucket/foto.jpg \
  --endpoint-url https://nama-bucket.helipod.app \
  --profile minio

Buat Alias agar Lebih Ringkas

Tambahkan ke ~/.zshrc atau ~/.bashrc:

alias s3pod='aws s3 --endpoint-url https://nama-bucket.helipod.app --profile minio'

Setelah source ~/.zshrc:

s3pod ls
s3pod mb s3://my-bucket
s3pod cp ./file.txt s3://my-bucket/
s3pod sync ./folder s3://my-bucket/folder

Integrasi dengan Aplikasi di Helipod

Jika kamu punya service lain (misalnya Laravel, Node.js, atau Python) di project yang sama, gunakan internal DNS — lebih cepat dan tidak keluar ke internet publik.

Format internal hostname bisa ditemukan di tab Settings → Networking & Domains dengan label "Internal only".

# Internal network (untuk service di project yang sama — direkomendasikan)
S3_ENDPOINT=http://heli-xxxxxxxx.env-xxxx.svc.cluster.local
S3_ACCESS_KEY=nama-user-kamu
S3_SECRET_KEY=password-kamu
S3_REGION=us-east-1
S3_BUCKET=my-first-bucket
S3_PATH_STYLE=true

# Public endpoint (untuk akses dari luar Helipod)
S3_ENDPOINT=https://nama-bucket.helipod.app

Penting: Saat menggunakan internal DNS, selalu set S3_PATH_STYLE=true (atau ekuivalennya di SDK kamu) karena internal hostname bukan wildcard subdomain. Ini berlaku untuk Laravel Flysystem, boto3, aws-sdk-js, dan lainnya.

Baca lebih lanjut di Panduan Internal Network Helipod.

Troubleshooting Umum

Error "Token has expired and refresh failed" AWS CLI kamu memiliki SSO session lama yang aktif. Gunakan --profile minio agar CLI memakai credentials yang benar:

aws s3 ls --endpoint-url https://nama-bucket.helipod.app --profile minio

Atau lewati credentials langsung via environment variable:

AWS_ACCESS_KEY_ID=user AWS_SECRET_ACCESS_KEY=password \
  aws s3 ls --endpoint-url https://nama-bucket.helipod.app

Error "PermanentRedirect" atau bucket tidak ditemukan Ini biasanya masalah addressing style. Pastikan path-style sudah aktif:

aws configure set s3.addressing_style path --profile minio

Error "Connection refused" atau timeout Pastikan routing di Settings sudah mengarah ke port :9000. MinIO S3 API berjalan di port 9000 — bukan 80 atau 443.

Error "Access Denied" Periksa nilai MINIO_ROOT_USER dan MINIO_ROOT_PASSWORD di tab Variables — pastikan sama persis dengan yang dimasukkan saat aws configure.

CORS error saat akses dari browser Pastikan MINIO_API_CORS_ALLOW_ORIGIN sudah diset dan service sudah di-redeploy setelah variabel ditambahkan. Perubahan variabel baru berlaku setelah deployment ulang.

SDK melaporkan "invalid region" Set MINIO_SITE_REGION di Variables sesuai nilai yang kamu pakai di SDK (misalnya ap-southeast-3), lalu redeploy.

Kesimpulan

Deploy S3-compatible bucket di Helipod hanya butuh beberapa menit. Kunci yang sering diabaikan adalah path-style addressing — karena Helipod menggunakan satu domain per service (bukan wildcard subdomain), mengaktifkan path-style via aws configure set s3.addressing_style path atau flag setara di SDK kamu akan mencegah sebagian besar error kompatibilitas.

Dari sana, semua tool yang kompatibel dengan S3 API bisa langsung digunakan: AWS CLI, Laravel Flysystem, boto3, aws-sdk untuk Node.js, dan lainnya.

Punya pertanyaan? Hubungi kami di support@helipod.io atau bergabung ke komunitas di hangar.helipod.io.

Siap coba Helipod?

Deploy aplikasi kamu sekarang. Gratis, tanpa kartu kredit.

Mulai Gratis →