Nexa Intelligence Docs
Data & Storage

MinIO

Spesifikasi teknis Object Storage MinIO (S3 Compatible) di Nexa, partisi folder bucket 'nexa', siklus hidup raw payload, presigned URL, dan backup snapshot.

MinIO Object Storage (S3 Compatible)

MinIO menyediakan penyimpanan objek terdistribusi berkinerja tinggi yang kompatibel dengan protokol standar Amazon S3 API. MinIO digunakan oleh platform Nexa Intelligence untuk menyimpan berkas bervolume besar seperti tangkapan mentah HTML (Raw HTML), arsip JSON crawler, rekaman media sosial, snapshot Elasticsearch, dan berkas ekspor laporan intelijen (PDF/Excel).


Struktur Partisi Bucket nexa

Semua data tersentralisasi di dalam satu bucket utama nexa dengan hierarki path terstruktur:

s3://nexa/
├── raw/
│   ├── news/
│   │   └── {domain}/{YYYY-MM-DD}/{article_id}.json      # Arsip HTML & teks mentah artikel crawler A1
│   ├── lpse/
│   │   └── {source}/{year}/{tender_id}.json             # Payload data tender lelang SIRUP/INAPROC
│   └── social/
│       └── {platform}/{YYYY-MM-DD}/{post_id}.json       # Arsip percakapan & metadata medsos (TikTok/X)
├── datasets/
│   └── static/{dataset_kind}/{sha256}.csv               # Berkas dataset kurasi statis (Komoditas, Sekolah)
├── snapshots/
│   └── elasticsearch/{YYYY-MM-DD}/                     # Backup snapshot indeks Elasticsearch berkala
└── exports/
    └── reports/{report_id}.pdf                          # Berkas unduhan laporan intelijen pimpinan

1. Format Payload Dokumen Raw (raw/news/...)

Setiap dokumen yang berhasil di-crawl oleh A1 / B1 Scrapers diarsipkan dalam bentuk JSON mentah sebelum dilakukan normalisasi:

{
  "id": "e4d909c290d0fb1ca068ffaddf22cbd0",
  "url": "https://nasional.kompas.com/read/2026/09/10/kpk-periksa-saksi-lelang",
  "domain": "kompas.com",
  "title": "KPK Periksa Saksi Terkait Dugaan Korupsi Proyek Smart City",
  "author": "Fauzi Rahman",
  "published_at": "2026-09-10T14:00:00Z",
  "crawled_at": "2026-09-10T14:35:12Z",
  "http_status": 200,
  "content_type": "text/html; charset=UTF-8",
  "raw_html_size_bytes": 142050,
  "raw_html": "<!DOCTYPE html><html lang=\"id\"><head>...</body></html>"
}

2. Pola Akses & Presigned URL

Klien internal (seperti f1-api-backend dan worker Python) mengakses MinIO langsung via endpoint internal S3. Ketika pengguna frontend meminta unduhan dokumen atau laporan, backend menerbitkan Presigned URL berbatas waktu:

import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";

const s3Client = new S3Client({
  endpoint: "http://minio:9000",
  region: "us-east-1",
  credentials: {
    accessKeyId: process.env.MINIO_ACCESS_KEY!,
    secretAccessKey: process.env.MINIO_SECRET_KEY!,
  },
  forcePathStyle: true,
});

export async function generateDownloadUrl(objectKey: string): Promise<string> {
  const command = new GetObjectCommand({
    Bucket: "nexa",
    Key: objectKey,
  });

  // Presigned URL valid selama 15 menit (900 detik)
  return await getSignedUrl(s3Client, command, { expiresIn: 900 });
}

3. Kebijakan Retensi & Siklus Hidup Objek (ILM)

Bucket nexa dikonfigurasi dengan aturan retensi otomatis:

  • raw/news/* & raw/social/*: Dipertahankan selama 180 hari sebelum pengarsipan otomatis.
  • exports/reports/*: Dihapus otomatis setelah 7 hari guna mencegah penumpukan file sementara.
  • snapshots/elasticsearch/*: Disimpan permanen dengan kebijakan versioning.

On this page