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.
 
 
 
 
 
 

22 KiB

🗺 ROADMAP & PRIORITAS PENGERJAAN

Status: 🔴 Belum dimulai | 🟡 Sedang berjalan | 🟢 Selesai


Sudah Selesai

Microservice & Infrastruktur yang Sudah Running di Server (10.100.1.24)

Service Domain Keterangan Terintegrasi ke Super Apps?
my-portal (Next.js) my.gisportal.id FE Super Apps Ya — ini super apps
geonet-console (Laravel) console.gisportal.id Backend API: auth, LDAP, permission Ya — API utama
geonet-collector (FastAPI) collector.gisportal.id / agent.gisportal.id Asset management, GeoNetAgent Ya — asset management
Grafana + Loki + Promtail grafana.gisportal.id Monitoring & log aggregation <EFBFBD> Belum terintegrasi FE
Uptime Kuma uptime.gisportal.id Service uptime monitoring 🔶 Belum terintegrasi FE
n8n n8n.gisportal.id Workflow automation 🔶 Standalone
Node-RED node-red.gisportal.id IoT/flow automation 🔶 Standalone
Dockge dockge.gisportal.id Docker stack manager 🔶 Internal ops
Zabbix zabbix.gisportal.id Network monitoring (10.100.1.42) 🔶 Belum terintegrasi FE
Gitea git.gisportal.id Git server (10.100.1.41:3000) 🔶 Source control
Jira jira.gisportal.id Project management (10.100.1.55) 🔶 Existing ticketing lama
PostgreSQL (2x) internal DB untuk console & collector Ya
QNAP OSS file.gisportal.id / obj.gisportal.id S3 storage avatar & file Ya

Catatan penting:

  • jira.gisportal.id → sudah ada Jira di 10.100.1.55. Pertimbangkan apakah Zammad akan menggantikan atau paralel dengan Jira.
  • zabbix.gisportal.id → sudah ada monitoring. Integrasi alert Zabbix ke Push Notification bisa jadi prioritas di Fase 4.
  • grafana.gisportal.id → sudah ada, bisa digunakan untuk dashboard monitoring di FE super apps.

Yang Sudah Dibangun di Super Apps (my.gisportal.id)

Fitur
🟢 Auth (login LDAP, logout, session)
🟢 Profile (edit, ganti password, avatar OSS, device card)
🟢 Asset Management UI — list, detail, edit meta, assign owner
🟢 Admin: LDAP User & Group management (phone, dept, title, dll)
🟢 Admin: Permission management berbasis LDAP Group
🟢 GeoNet Collector — agent, snapshot, asset read service + owner info
🟢 Permission guard FE (sidebar, bottom-nav filter by permission)

🔴 Fase 1 — Content & Home Feed (Mulai sekarang — tidak ada dependency)

Dashboard home saat ini kosong. Content service adalah nilai tambah langsung terlihat user.

# Tugas Estimasi
1 Backend geonet-content — FastAPI, Post, Like, Comment, thumbnail OSS 4-6 hari
2 FE Home Feed — grid thumbnail di dashboard, Post Card (view/like/comment) 2-3 hari
3 FE Post Detail — halaman /posts/:slug, rich text, komentar bersarang 1-2 hari
4 FE Admin: Create/Edit Post — Tiptap editor, upload thumbnail, jadwal publish 2-3 hari
5 FE Admin: Manage Posts — reorder priority, bulk status, konfigurasi tampilan 1-2 hari

🔴 Fase 2 — Mail Server (Prerequisite Ticketing & Mail UI)

# Tugas Estimasi
6 Install Mailcow — Docker, multi-domain (geonet.co.id, gegeo.my.id) 2-3 hari
7 Konfigurasi LDAP Mailcow — SSO ke AD 10.100.1.40 1 hari
8 Thunderbird — konfigurasi IMAP, simpan data ke NAS 1 hari

🔴 Fase 3 — Ticketing (Butuh Mailcow untuk notif email)

# Tugas Estimasi
9 Install Zammad — Docker, LDAP, kategori (Hardware/Software/ESRI/dll), SLA 2-3 hari
10 Konfigurasi Zammad — group mapping, webhook, auto-assign, public portal 1 hari
11 FE Ticketing — list, form buat tiket, detail+log timeline, dashboard IT 3-5 hari
12 Integrasi Tiket ↔ Asset — tiket bisa dikaitkan ke asset spesifik 1 hari

🔴 Fase 4 — Push Notification (Butuh Zammad webhook sebagai sumber event)

# Tugas Estimasi
13 Backend geonet-push — FastAPI + VAPID, subscribe per user LDAP 2-3 hari
14 FE Push — Service Worker handler, permission UI, notif center navbar 1-2 hari
15 Trigger: Zammad → push, Collector alert → push, broadcast IT 1 hari

🔴 Fase 5 — Gitea Integration (Tidak ada dependency — bisa mulai kapanpun)

Gitea v1.16.5 sudah running di git.gisportal.id (10.100.1.41:3000) dengan REST API aktif.

# Tugas Estimasi
16 Setup OAuth2 Gitea — daftarkan super apps sebagai OAuth client di Gitea 0.5 hari
17 src/lib/gitea-client.ts — API client (issues, repos, user) dengan token/OAuth 1 hari
18 FE: Gitea Issues — list issues per repo, form buat issue, detail+komentar 2-3 hari
19 FE: Repo Explorer — list repo milik user, branch, commit history, releases 2-3 hari
20 Profile: Gitea Token — simpan personal access token di profile (fallback jika tidak pakai OAuth) 0.5 hari

🔴 Fase 6 — Mail UI & Monitoring (Butuh Mailcow API)

# Tugas Estimasi
21 Mail UI — Inbox, Sent, Draft, Contacts, Calendar, Tasks, Rules 5-7 hari
22 Monitoring alert detail dialog (standar UI ADR) 1 hari

🔴 Fase 7 — Infrastruktur (Bisa paralel kapanpun)

# Tugas Estimasi
23 Mikrotik — PPP login via LDAP 1 hari
24 Windows Server AD — LDAP SSO + SAML 2-3 hari

Urutan pengerjaan: ① Content/Home Feed② Mailcow③ Zammad+Ticketing④ Push Notif⑤ Gitea⑥ Mail UI⑦ Infra

(Gitea Fase 5 bisa dikerjakan paralel dengan Fase 2-4 karena tidak ada dependency)


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

Gitea Integration (git.gisportal.id)

Status

  • Gitea v1.16.5 sudah running di 10.100.1.41:3000 → domain git.gisportal.id
  • REST API aktif (/api/v1/) — tidak perlu install apapun, langsung integrasi
  • Swagger UI tersedia di git.gisportal.id/api/swagger

Auth Strategy

Pilihan: OAuth2 (rekomendasi)

  • Daftarkan super apps sebagai OAuth Application di Gitea (Settings → Applications → OAuth2)
  • Callback URL: https://my.gisportal.id/auth/gitea/callback
  • Flow: user klik "Hubungkan Gitea" → redirect OAuth → dapat access token → simpan di session/DB
  • Fallback: user input Personal Access Token manual di halaman Profile

API Endpoint yang Digunakan

Auth:
GET  /user                          — info user yang login
GET  /users/{username}              — profil user

Issues:
GET  /repos/{owner}/{repo}/issues   — list issues (filter: state, label, assignee)
POST /repos/{owner}/{repo}/issues   — buat issue baru
GET  /repos/{owner}/{repo}/issues/{index}         — detail issue
PATCH /repos/{owner}/{repo}/issues/{index}        — update (close, assign, label)
GET  /repos/{owner}/{repo}/issues/{index}/comments — komentar
POST /repos/{owner}/{repo}/issues/{index}/comments — tambah komentar
GET  /repos/{owner}/{repo}/labels   — label/kategori tersedia

Repositories:
GET  /user/repos                    — semua repo milik user
GET  /repos/{owner}/{repo}          — detail repo (stars, forks, size, last push)
GET  /repos/{owner}/{repo}/branches — daftar branch
GET  /repos/{owner}/{repo}/commits  — commit history
GET  /repos/{owner}/{repo}/releases — releases / tags
GET  /repos/search?q=&topic=       — search repo

FE Tasks

Setup & Auth

  • Daftarkan OAuth2 App di Gitea admin panel
  • src/lib/gitea-client.ts — wrapper API dengan Bearer token
  • Route GET /api/gitea/callback — handle OAuth callback, simpan token
  • Profile page: tombol "Hubungkan Akun Gitea" + status connected
  • Tambah gitea_token ke user session/store

Halaman Issues (/gitea/issues)

  • List issues dari semua repo yang diikuti user (filter: open/closed, label, repo)
  • Form buat issue — pilih repo, judul, body (Markdown), label, assignee
  • Detail issue — info lengkap + thread komentar + tombol close/reopen
  • Badge count issue open di sidebar/navbar

Halaman Repo Explorer (/gitea/repos)

  • Grid/list repo milik user + starred repos
  • Detail repo — README, branch list, commit history, releases
  • Link ke Gitea web untuk operasi lebih lanjut (clone, PR, dll)

Permission (tambah ke group_permissions)

Permission Fungsi
gitea.view Lihat issue & repo (semua user yang punya akun Gitea)
gitea.create_issue Buat issue baru
gitea.manage Admin Gitea (close issue, assign, label)

Catatan

  • Issue dari super apps dan Gitea web sinkron sempurna — data disimpan di Gitea, super apps hanya read/write via API
  • Tidak perlu database tambahan di super apps untuk Gitea — semua state di Gitea
  • Bisa jadi alternatif/pelengkap Zammad untuk bug tracking development (Zammad = IT helpdesk, Gitea = dev issues)

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