Home/Docs/Arsitektur Sistem

Arsitektur Sistem

Gambaran umum komponen dan interaksi antar layanan.

Komponen Utama

Panel (Go / chi)

Server pusat. Terima heartbeat & event dari agent, simpan ke PostgreSQL, relay ke browser via WebSocket, kirim notifikasi ke Telegram/Discord. Berjalan sebagai single binary ~18MB dengan frontend ter-embed (go:embed). Diakses via Cloudflare Tunnel.

Agent-Go (Go binary)

Diinstall di server yang dimonitor. Single binary, zero dependency, full-featured (Tier 0). Menjalankan 11+ modul secara paralel dalam satu proses: watcher, heartbeat, terminal PTY, tunnel, discovery, integrity, updater, filemanager, dan lain-lain.

Database (PostgreSQL 16)

Menyimpan semua data: events (JSONB payload), alerts (dedup_key), servers, commands, heartbeats, integrity baselines, sysinfo, discovery, notification channels, access logs.

Frontend (Vanilla JS SPA)

Dark terminal-style single-page app. JS per halaman (app.js, servers.js, terminal.js, filemanager.js, dll). Tidak ada framework — murni vanilla JS + CSS. Ter-embed di binary panel via go:embed, bisa override dengan env FRONTEND_DIR.

Topologi Jaringan

Browser (xterm.js / SPA)
    │ HTTPS
    ▼
Cloudflare Edge (CDN + DDoS)
    │ CF Tunnel
    ▼
Panel :8000 (Go / chi)
    │ TCP
    ▼
PostgreSQL 16 (localhost:5432)

─── WebSocket Terminal ───────────────────────────
Browser ──/ws/shell/{serverID}──► Panel ──/ws/agent/terminal──► Agent PTY ──► /bin/bash

─── Agent → Panel (HTTP API) ───────────────────────
Agent ──HTTPS──► CF Worker (primary proxy) ──► Panel /api/agent/*
             └──► Fallback direct ──────────────► Panel /api/agent/*

Jalur Koneksi

| Jalur | Protokol | Tujuan | |-------|----------|--------| | Browser → Panel | HTTPS via CF Tunnel | API + SPA | | Browser → Terminal | WebSocket /ws/shell/{id} | PTY relay | | Agent → Panel | HTTPS via CF Worker | Events, heartbeat | | Panel → Agent | WebSocket /ws/agent/terminal | Command push | | Agent PTY → bash | Unix PTY | Shell process |

Panel bertindak sebagai relay hub: browser↔panel↔agent. Tidak ada koneksi langsung browser ke agent.