Hubungkan ke penyimpanan S3
Konfigurasi kredensial kompatibel S3, CORS, dan bucket privat.
Untuk storage, Anda hanya perlu variabel S3_* dan bucket privat. TurboJet berbicara ke provider lewat AWS SDK dengan forcePathStyle: true, jadi endpoint yang kompatibel S3 apa pun bisa dipakai.
Variabel environment
Tambahkan ke .env root (lihat Environment):
S3_ACCESS_KEY_ID="your-access-key"
S3_SECRET_ACCESS_KEY="your-secret-key"
S3_ENDPOINT="https://your-endpoint"
S3_BUCKET="your-bucket"
S3_REGION="auto" # Opsional; default auto di client
# S3_PUBLIC_URL="https://pub-….r2.dev" # Opsional; untuk /api/storage/public| Key | Wajib | Catatan |
|---|---|---|
S3_ACCESS_KEY_ID | Ya | Access key provider |
S3_SECRET_ACCESS_KEY | Ya | Secret provider |
S3_ENDPOINT | Ya | Endpoint API S3 |
S3_BUCKET | Ya | Satu bucket untuk semua objek |
S3_REGION | Tidak | Default auto |
S3_PUBLIC_URL | Tidak | Base URL publik untuk GET /api/storage/public |
Tanpa key wajib, route storage mengembalikan 503 (Storage is not configured).
Satu bucket, path ber-namespace
Tidak ada packages/storage/config.ts dengan banyak nama bucket. Semua masuk ke S3_BUCKET. API menamespace objek sebagai users/{userId}/{uuid}.{ext} agar file terisolasi per pengguna.
Jaga bucket tetap privat
Nonaktifkan akses publik pada bucket. TurboJet menerbitkan URL terpresign berumur pendek untuk unggah dan unduh, dan menegakkan kepemilikan di API. Setel S3_PUBLIC_URL hanya jika Anda sengaja mengekspos objek lewat CDN publik atau URL r2.dev.
CORS
Konfigurasi CORS pada bucket agar browser bisa mengunggah dari origin marketing (NEXT_PUBLIC_MARKETING_URL). Allow list tipikal:
- Method:
PUT,GET,HEAD(plusPOST/DELETEjika provider mewajibkannya) - Header: sertakan
Content-Type - Origin: URL marketing produksi dan origin marketing lokal (misalnya
http://localhost:3001)
Langkah per provider:
Langkah berikutnya
Setelah env dan CORS siap, ikuti Unggah file untuk menguji API.