GeoNetAgent, LDAPWeb, server-audit, server-connection
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

14 KiB

🗺 ROADMAP & PRIORITAS PENGERJAAN

Fase 1 — Fondasi Komunikasi (Sekarang)

Prerequisite untuk semua fitur notifikasi dan ticketing

# Tugas Estimasi Dependency
1 Install & konfigurasi Mailcow (Docker, LDAP, multi-domain) 2-3 hari -
2 Install & konfigurasi Zammad (Docker, LDAP, kategori, SLA) 2-3 hari Mailcow (notif email)
3 FE Ticketing (/ticketing di my.gisportal.id) 3-5 hari Zammad running

Fase 2 — Push Notification

Setelah Zammad aktif sebagai sumber event utama

# Tugas Estimasi Dependency
4 Build geonet-push service (FastAPI + VAPID) 2-3 hari Zammad webhook
5 FE Push (subscribe, Service Worker, notif center) 1-2 hari geonet-push running

Fase 3 — Infrastruktur Pendukung

# Tugas Estimasi Dependency
6 Mikrotik — PPP login via LDAP 1 hari -
7 Windows Server AD — LDAP SSO + SAML 2-3 hari -
8 Thunderbird — konfigurasi IMAP ke Mailcow, simpan ke NAS 1 hari Mailcow

Fase 4 — FE Lanjutan (setelah Fase 1-2)

# Tugas Estimasi Dependency
9 Monitoring alert detail dialog (standar UI) 1 hari -
10 Mail UI (Inbox, Sent, Draft, Contacts, dll) 5-7 hari Mailcow API

| 11 | Content/Posting Service — thumbnail, posting, engagement (view/like/comment) | 4-6 hari | - | | 12 | FE Home Feed — halaman home superapp tampilkan posting/thumbnail | 2-3 hari | Content Service |


Mulai dari: ① Mailcow → ② Zammad → ③ FE Ticketing → ④ Push Notification


ADR — Standar Dialog Preview / Edit (UI Pattern)

Aturan Wajib

  • Semua dialog preview/edit WAJIB menggunakan <Dialog> dari @/components/ui/dialog (bukan Sheet/Drawer)
  • Ukuran: sm:max-w-lg (detail lebar) atau sm:max-w-md (form pendek)
  • Struktur wajib:
    1. Header berwarna (gradient) — berisi ikon, judul, sub-judul
    2. Body dengan overflow-y-auto max-h-[65dvh] — scrollable
    3. Footer sticky dengan border-t bg-muted/30 — tombol Batal + Simpan
  • Untuk dialog yang punya preview DAN edit, gunakan 2 tab (tab "Detail" + tab "Edit")
  • Tab menggunakan komponen <Tabs> dari @/components/ui/tabs
  • Info 2-kolom: grid grid-cols-[160px_1fr] untuk label–value

Referensi Implementasi

  • src/app/(app)/profile/page.tsx<Dialog> Edit Profil & Ganti Password
  • src/components/asset-management/asset-detail-dialog.tsx — Dialog Asset (2 tab)

Komponen yang Mengikuti Standar Ini

  • Edit Profil (/profile)
  • Ganti Password (/profile)
  • Asset Detail & Edit (/asset-management)
  • Ticketing detail/edit
  • Monitoring alert detail
  • Mail compose

Ticketing Microservice

Platform: Zammad (Rekomendasi Production)

  • Docker di server 10.100.1.24, domain: zammad.gisportal.id
  • LDAP Auth terintegrasi ke AD 10.100.1.40
  • REST API digunakan oleh FE Next.js di /ticketing

Setup Zammad

  • Install Zammad via Docker Compose
  • Konfigurasi LDAP Auth (10.100.1.40)
  • Mapping LDAP Group → Zammad Role (IT-Admin, IT-Staff, Management, dll)
  • Konfigurasi email notifikasi via Mailcow
  • Setup SLA (response time & escalation)
  • Konfigurasi webhook/trigger: auto-assign by category → group
  • Setup public customer portal (untuk end user eksternal)

Kategori Tiket

  • Hardware: Komputer, Laptop, Printer, Server, Jaringan, dll
  • Software:
    • ESRI (ArcGIS Desktop, ArcGIS Pro, ArcGIS Online, ArcGIS Enterprise, Extension)
    • BlueMarble (Global Mapper, Geographic Calculator, dll)
    • DataEast (MapInfo, dll)
    • Microsoft (Office, Windows, Server, dll)
    • Lainnya (input bebas)
  • Asset Request (Pengadaan): Permohonan pembelian hardware/software baru
  • Issue Umum: Gangguan layanan, akses, dll

Alur Tiket (Workflow)

Open → In Progress → Pending (menunggu user/pihak lain) → Resolved → Closed
                   ↓
              Escalate (jika SLA breach)
  • Setiap transisi status tercatat di log timeline (audit trail)
  • Assignee: user LDAP atau group LDAP (IT-Admin/IT-Staff/divisi terkait)
  • Requester: user internal (SSO LDAP) atau guest publik (email + nama)

FE Integration (/ticketing di my.gisportal.id)

  • Halaman list tiket (filter by status, kategori, assignee)
  • Form buat tiket baru (kategori → sub-kategori hierarki software/hardware)
  • Detail tiket: info + log timeline + komentar (Dialog standar 2-tab)
  • Notifikasi real-time (websocket atau polling)
  • Dashboard ringkasan: open, in-progress, overdue (untuk IT Admin)
  • Integrasi dengan Asset Management: tiket bisa dikaitkan ke asset spesifik

Zammad API Client (src/lib/zammad-client.ts)

  • Auth via token (per-user token dari Zammad)
  • GET /tickets, GET /tickets/:id
  • POST /tickets (buat tiket baru)
  • PUT /tickets/:id (update status, assignee)
  • GET /ticket_articles/:ticket_id (log/komentar)
  • POST /ticket_articles (tambah komentar/update)

Push Notification Microservice

Arsitektur yang Disarankan: Web Push (VAPID) + ntfy / Superstream

Opsi Backend

Platform Protokol Docker PWA Support LDAP Nilai
ntfy HTTP Push + WebSocket (Web Push) via proxy 🥇 Ringan & simpel
Webpush custom (FastAPI) Web Push VAPID native 🥈 Full kontrol
Firebase FCM FCM self-host vendor lock-in
Apprise Multi-channel Sebagai relay saja

Rekomendasi: Custom FastAPI Push Service + Web Push VAPID

  • Self-hosted, no vendor lock-in
  • Compatible Web Push API — bekerja di browser (Chrome, Firefox, Edge, Safari iOS 16.4+)
  • PWA: Service Worker push event sudah didukung @ducanh2912/next-pwa
  • Subscription per-user (LDAP username) disimpan di DB
  • Trigger dari Zammad webhook, Collector alert, atau manual

Alur Push Notification

Event (Zammad tiket baru / Asset alert / dll)
    │
    ▼
Push Service API (FastAPI, port 17000)
    │
    ├─ Lookup subscription by user/group LDAP
    ├─ Web Push VAPID → Browser/PWA Service Worker
    └─ (opsional) relay ke ntfy/email/webhook
         │
         ▼
    Browser / PWA
    Service Worker `push` event
         │
         ▼
    Notification (judul, body, icon, action button, url)

Setup Push Service

  • Buat geonet-push service (FastAPI + pywebpush)
  • Generate VAPID key pair (public/private)
  • Endpoint: POST /subscribe — simpan push subscription per user LDAP
  • Endpoint: POST /unsubscribe — hapus subscription
  • Endpoint: POST /send — kirim notif ke user/group (internal, pakai API key)
  • Docker Compose di 10.100.1.24, domain: push.gisportal.id (internal)
  • Simpan subscription di PostgreSQL/SQLite

Sumber Event (Trigger)

  • Zammad webhook → tiket baru, update status, assign ke user/group
  • Collector / Asset Management → device offline, disk penuh, alert threshold
  • Manual broadcast → pengumuman IT Admin ke semua user atau group tertentu
  • (Future) Monitoring alert (Zabbix webhook → push service)

FE Integration (Next.js PWA)

  • src/lib/push-client.ts — subscribe/unsubscribe, kirim VAPID public key ke browser
  • Service Worker handler push event (via @ducanh2912/next-pwa custom SW)
  • Permission request UI — tombol "Aktifkan Notifikasi" di halaman profile/settings
  • Notification payload: { title, body, icon, badge, url, tag }
  • Action button pada notif: "Lihat Tiket", "Lihat Asset"
  • Notif center di navbar — in-app list notifikasi (polling atau WebSocket)

Kategori Notifikasi

  • 🎫 Ticketing: tiket baru assigned, update status, komentar baru, SLA overdue
  • 🖥 Asset Management: device offline > X menit, disk usage > 90%, tiket asset baru
  • 📢 Broadcast IT: pengumuman, maintenance, downtime
  • (Future) 📊 Monitoring: alert Zabbix

Content / Posting Microservice (geonet-content)

Saran Profesional

Gunakan pola Headless CMS + custom API — bukan CMS full seperti WordPress. Ini memberi kontrol penuh atas schema, permission berbasis LDAP group, dan integrasi ke push notification.

Stack yang Disarankan

  • Backend: FastAPI + PostgreSQL (konsisten dengan Collector)
  • Storage thumbnail/gambar: QNAP OSS (S3 bucket super-apps, path content/)
  • Rich text body: simpan sebagai HTML atau Markdown (pakai Tiptap editor di FE)
  • CDN/resize: thumbnail di-generate otomatis via Pillow saat upload (multi-resolusi: 400px, 800px)

Model Data

Post

Post
├── id (UUID)
├── title (string)
├── slug (string, unique)
├── body (text — HTML/Markdown)
├── thumbnail_url (string — OSS path)
├── status (draft | published | archived)
├── priority (int — urutan manual oleh admin)
├── published_at (datetime | null)
├── created_by (ldap_username)
├── created_at / updated_at
├── tags[] (many-to-many)
└── category (string: announcement | info | event | update | dll)

PostEngagement (per post)
├── view_count (int, increment atomic)
├── like_count (int)
└── comment_count (int — cached, sync dari PostComment)

PostLike
├── post_id
└── ldap_username (unique per post+user)

PostComment
├── id
├── post_id
├── ldap_username
├── body (text)
├── created_at
└── parent_id (null = top-level, isi = reply)

API Endpoints

  • GET /posts — list posting (filter: status, kategori, tag; sort: date/views/likes/comments/priority)
  • GET /posts/:slug — detail + increment view_count
  • POST /posts — buat posting (butuh permission content.create)
  • PUT /posts/:id — edit posting (butuh permission content.edit atau own post)
  • DELETE /posts/:id — hapus (butuh permission content.manage)
  • POST /posts/:id/like — toggle like (user LDAP)
  • GET /posts/:id/comments — list komentar + reply
  • POST /posts/:id/comments — tambah komentar
  • PUT /admin/posts/reorder — ubah urutan priority (butuh permission content.manage)
  • POST /admin/posts/:id/thumbnail — upload + resize thumbnail ke OSS

Permission LDAP Group (tambah ke group_permissions)

Permission Fungsi
content.view Lihat posting (semua user default)
content.create Buat posting baru
content.edit Edit semua posting (moderator)
content.manage Kelola urutan, status, hapus, konfigurasi tampilan

Konfigurasi Tampilan (Admin Panel)

  • Jumlah thumbnail yang tampil di home (misal: 6, 9, 12)
  • Mode urutan default: date_created | views | likes | comments | priority
  • Tampilan grid: 2-kolom / 3-kolom / list
  • Auto-publish terjadwal (published_at di masa depan)
  • Pin post (selalu tampil di atas terlepas dari urutan)

Setup Backend

  • Buat geonet-content service (FastAPI + SQLAlchemy + PostgreSQL)
  • Model: Post, PostLike, PostComment, PostTag, ContentConfig
  • Upload thumbnail → resize via Pillow → simpan ke OSS (content/thumbnails/)
  • Atomic view_count increment (pakai UPDATE ... SET view_count = view_count + 1)
  • Docker Compose di 10.100.1.24, akses via content.gisportal.id (internal) atau lewat my.gisportal.id/api/content
  • Permission check via header X-LDAP-Username + X-LDAP-Groups (diteruskan dari geonet-console)

FE Integration (/ home & /posts)

  • Home Dashboard — feed thumbnail posting (grid responsif, lazy load)
  • Post Card: thumbnail, judul, kategori, tanggal, ikon view/like/comment count
  • Post Detail — halaman /posts/:slug dengan body rich text, komentar bersarang
  • Like button — toggle, animasi, optimistic update
  • Comment section — list + form reply, pagination
  • Admin: Create/Edit Post — form dengan Tiptap rich text editor, upload thumbnail, jadwal publish
  • Admin: Manage Posts — tabel dengan drag-and-drop reorder (priority), bulk status change
  • Admin: Config — panel jumlah tampilan, mode urutan, layout grid

Content API Client (src/lib/content-client.ts)

  • getPosts(params) — list dengan filter & sort
  • getPost(slug) — detail
  • createPost(body) / updatePost(id, body)
  • toggleLike(postId)
  • getComments(postId) / addComment(postId, body)
  • reorderPosts(orderedIds)
  • uploadThumbnail(postId, file)

FE

my.gisportal.id │ ├─ Dashboard ├─ Profile (Action : Edit Profile, Ganti Password, Test Email) ├─ Ticketing ├─ Asset Management ├─ GeoNetAgent ├─ Monitoring └─ Mail │ ├─ Inbox ├─ Sent ├─ Draft ├─ Contacts ├─ Calendar ├─ Tasks └─ Rules

Microservices

Mailserver (Mailcow)

Produk Web UI API Multi Domain Docker Enterprise Nilai
Mailcow 🥇
iRedMail 🥈
Zimbra 🥉
Modoboa
Stalwart Mail

Setup

  • Install Mailcow (Docker)
  • Configure Mailcow
  • Configure Mailcow API
  • Configure Mailcow Web UI
  • Configure Mailcow Multi Domain (geonet.co.id, gegeo.my.id)
  • Configure Mailcow Docker
  • Configure Mailcow Enterprise
  • Configure Mailcow Nilai
  • Configure Mailcow LDAP (10.100.1.40)

Install Thunderbird

  • Install Thunderbird
  • Configure Thunderbird
  • Configure Thunderbird for geonet.co.id
  • Configure Thunderbird for gegeo.my.id
  • Move Inbox from main geonet.co.id to geonet for mail server
  • save imap and pop3 file Thunderbird di NAS : untuk meringankan vm dan memastikan file tidak hilang

Mikrotik

  • Setup PPP login via LDAP

Windows Server 2012 R2 Active Directory

  • Setup LDAP SSO
  • Setup LDAP SAML