Spesifikasi Teknis
Halaman ini ditujukan untuk Admin, IT, dan pengembang yang memerlukan detail teknis implementasi geoMDB-hub.
Stack Teknologi
| Komponen | Teknologi |
|---|
| Framework | Next.js (App Router) — server-side rendering + API routes |
| Database | PostgreSQL 15+ |
| ORM | Prisma 7.x |
| Object Storage | MinIO (kompatibel S3) — penyimpanan PDF |
| Cache / Rate Limiting | Redis (via CacheService) |
| Tanda Tangan Digital | node-signpdf (PKI), BSRE API (TTE BSSN) |
| PDF Generation | @react-pdf/renderer |
| CSW Provider | Built-in (custom) atau pycsw (Docker) |
| Auth | Session-based, cookie HTTP-only |
| Lisensi | AGPL-3.0 |
Standar Metadata yang Diimplementasikan
| Standar | Versi | Implementasi |
|---|
| ISO 19115-1 | 2014 | Model data internal (elemen inti) |
| SNI ISO 19115-3 | 2016 | Ekspor XML MDB (format utama) |
| ISO 19115-3 | 2018 | Ekspor XML MDB 2018 |
| ISO 19139 | 2007 | Ekspor XML GMD (legacy, kompatibilitas luas) |
| ISO 19157 | 2013 | Elemen kualitas data (DQ) untuk QC/QE |
| OGC CSW | 2.0.2 | Layanan katalog (GetCapabilities, GetRecords, GetRecordById) |
| Dublin Core | 1.1 | Output schema alternatif untuk CSW |
Format Ekspor XML
| Format | Slug | Skema | Keterangan |
|---|
| GMD | gmd | http://www.isotc211.org/2005/gmd | Legacy, dukungan GIS paling luas |
| MDB 2016 | mdb2016 | SNI ISO 19115-3:2016 | Default, format nasional |
| MDB 2018 | mdb2018 | ISO 19115-3:2018 | Internasional terbaru |
| XSLT | — | Custom via Saxon-JS | Hanya bila XSLT dikonfigurasi Admin |
Batas & Kuota
| Item | Batas |
|---|
| Upload dokumen (QC/QE/QA/SPD) | 10 MB per file (PDF) |
| Upload logo instansi | 5 MB (PNG/JPG/SVG) |
| Upload sertifikat PKI | 2 MB (.p12/.pfx) |
| Kata kunci per metadata | Tidak dibatasi |
| Kontak per metadata | Tidak dibatasi |
| Paginasi CSW GetRecords | Maks. 500 record |
| Rate limit verify | 20 req/menit/IP |
Format Token
| Token | Algoritma | Panjang | TTL |
|---|
| Token konfirmasi atasan | HMAC-SHA256 → base64url | 43 karakter | 14 hari |
| Token verifikasi TTE | HMAC-SHA256 → base64url | 43 karakter | Permanen |
| OTP login | 6 digit numerik | 6 karakter | ~5 menit |
| Reset password | UUID v4 | 36 karakter | 1 jam |
Variabel Environment Utama
| Variabel | Keterangan | Wajib |
|---|
DATABASE_URL | PostgreSQL connection string | ✅ |
REDIS_URL | Redis connection string (rate limiting, cache) | ✅ |
MINIO_ENDPOINT | MinIO/S3 endpoint | ✅ |
MINIO_ACCESS_KEY | MinIO access key | ✅ |
MINIO_SECRET_KEY | MinIO secret key | ✅ |
MINIO_BUCKET | Nama bucket MinIO | ✅ |
SESSION_SECRET | Secret untuk enkripsi session | ✅ |
HMAC_SECRET | Secret untuk generasi token HMAC | ✅ |
SYSTEM_CERT_P12_PATH | Path file sertifikat PKI sistem | Opsional |
SYSTEM_CERT_PASSWORD | Passphrase sertifikat PKI sistem | Opsional |
NEXT_PUBLIC_APP_URL | URL publik aplikasi (untuk link email, QR) | ✅ |
NEXT_PUBLIC_BASE_PATH | Base path bila deploy di sub-path | Opsional |
EXT_SERV_URL | URL layanan eksternal (email/WA sender) | Opsional |
Arsitektur Direktori (Utama)
src/
app/
(app)/ — halaman dashboard (requires login)
(auth)/ — halaman login/register
api/ — API routes Next.js
dokumentasi/ — halaman dokumentasi publik
katalog/ — halaman katalog publik
verify/ — halaman verifikasi TTE
lib/
auth.ts — session management
db.ts — Prisma client
notify/ — email & WA notification
pdf/ — PDF generation
sign/ — PKI, BSRE, auto-sign, token
verify-data.ts — logic verifikasi TTE
repositories/ — data access layer
services/ — business logic services
components/ — shared UI components
prisma/
schema.prisma — database schema
seed-docs.ts — source dokumentasi (update via db:seed:docs)
Konfigurasi CSP (Content Security Policy)
Header CSP dikonfigurasi untuk mencegah XSS. Kunci:
default-src 'self'
- Script hanya dari domain sendiri + nonce untuk inline scripts Next.js
- Image dari domain sendiri + data URIs (thumbnail)
- Koneksi API ke domain sendiri + CDN yang diizinkan
Deployment
Aplikasi mendukung deployment sebagai:
- Standalone Next.js (
output: 'standalone') — single process, deploy via PM2/Docker
- Docker Compose — stack lengkap (app + PostgreSQL + MinIO + Redis + pycsw opsional)
Lihat deploy.sh dan docker-compose.yml di repositori untuk detail deployment.