Self-hosted server monitoring & control panel untuk VPS Anda. Next.js 14 + Prisma + NextAuth + Recharts + systeminformation.
Demo: panel.indoplatform.id Mirror: github.com/indoplatform/panel
- 🖥️ VPS Metrics real-time — CPU, RAM, disk, network, load average
- 🔄 Service manager — start / stop / restart systemd service via SSH
- 📜 Log viewer — tail
journalctl&nginx access.logvia SSE stream - 🌐 Cloudflare DNS manager — list, add, delete A record (pakai CF API token)
- 📈 Uptime monitor — HTTP HEAD check untuk URL publik Anda (multi-target)
- 🔐 Audit log — siapa ngapain, kapan, dari IP mana
- 🚨 Alert opsional — Telegram / Brevo email kalau CPU/RAM/disk tinggi atau service down
- 🎨 Theme "Heritage Premium" — Navy + Gold, konsisten dengan rental.indoplatform.id
- Node.js 20+
- PostgreSQL 14+
- (Opsional) systemd di Linux + SSH key
cd apps/Panel
pnpm install# Create database
psql -U postgres -c "CREATE DATABASE panel;"
# Copy env
cp .env.example .env
# Edit .env — minimal: DATABASE_URL, NEXTAUTH_SECRET, NEXTAUTH_URLpnpm db:generate
pnpm db:migrate
pnpm db:seedAkun default: admin@panel.local / admin123 (ganti setelah login pertama!)
pnpm dev
# → http://localhost:3003pnpm build
pnpm startLihat .env.example untuk dokumentasi lengkap.
Wajib:
DATABASE_URL— PostgreSQL connection stringNEXTAUTH_SECRET— random 32-byte (generate:openssl rand -base64 32)NEXTAUTH_URL— URL publik panel Anda
Opsional (per fitur):
CLOUDFLARE_*— DNS managerBREVO_*— email alertTELEGRAM_*— Telegram alertSSH_*— jika Panel monitor VPS remote (bukan localhost)
- Ganti password default admin setelah login pertama
- Enable 2FA (planned V1.1 — pakai authenticator app)
- Set IP whitelist jika Panel di belakang VPN
- Setup SSH key pair khusus untuk Panel (JANGAN pakai root key pribadi)
- Setup sudoers terbatas jika Panel monitor localhost:
# /etc/sudoers.d/panel paneluser ALL=(ALL) NOPASSWD: /usr/bin/systemctl start *, /usr/bin/systemctl stop *, /usr/bin/systemctl restart *, /usr/bin/journalctl *
- Reverse proxy (nginx/Caddy) + HTTPS (Let's Encrypt / Cloudflare)
- Set firewall: hanya port 80/443 publik, 3003 internal
- Audit log retention: minimal 90 hari (config via
AUDIT_RETENTION_DAYS)
| Layer | Tools |
|---|---|
| Framework | Next.js 14.2 (App Router), React 18, TypeScript strict |
| Auth | NextAuth v5 beta (Credentials + JWT) |
| ORM | Prisma 5.22 + PostgreSQL 14+ |
| UI | Tailwind 3 + Radix UI + lucide-react + framer-motion |
| Chart | Recharts (lazy require) |
| System | systeminformation 5.x (CPU/RAM/disk/network/process) |
| Remote SSH | child_process + ssh-key-based auth |
| Brevo SMTP (opsional) |
┌─────────────────────────────────────────────────────────────┐
│ Browser User (auth: NextAuth JWT) │
└────────────────────┬────────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ Next.js App (port 3003) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │Dashboard │ │ Services │ │ Logs │ │ DNS / Audit │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌────▼────────────▼────────────▼──────────────▼───────┐ │
│ │ Service Layer (lib/system, lib/cloudflare, etc) │ │
│ └────┬────────────┬────────────┬───────────────────────┘ │
└───────┼────────────┼────────────┼────────────────────────────┘
▼ ▼ ▼
systemctl journalctl Cloudflare API
(via SSH or (local or (HTTPS)
local exec) SSH)
# 1. Build lokal
pnpm build
# 2. Tar + upload
tar -czf /tmp/panel.tar.gz --exclude=node_modules --exclude=.next .
scp /tmp/panel.tar.gz user@your-vps:/tmp/
# 3. Di VPS: extract + install
ssh user@your-vps
sudo mkdir -p /opt/panel
sudo chown $USER:$USER /opt/panel
cd /opt/panel
tar -xzf /tmp/panel.tar.gz
pnpm install --prod
pnpm db:generate
# 4. Setup systemd
sudo tee /etc/systemd/system/panel.service <<EOF
[Unit]
Description=Indoplatform Panel
After=network.target postgresql.service
[Service]
Type=simple
User=panel
WorkingDirectory=/opt/panel
Environment=NODE_ENV=production
Environment=PORT=3003
EnvironmentFile=/opt/panel/.env
ExecStart=/usr/bin/node node_modules/next/dist/bin/next start -p 3003 -H 127.0.0.1
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now panel
# 5. Setup cron untuk metrics + uptime
crontab -e
# Tambah:
# */1 * * * * cd /opt/panel && /usr/bin/node scripts/cron-runner.js metrics
# */1 * * * * cd /opt/panel && /usr/bin/node scripts/cron-runner.js uptimeLihat ROADMAP.md.
- V1.0 — Dashboard + service manager + log viewer + DNS manager + audit log
- V1.1 — 2FA (TOTP), alert rules UI, deploy trigger per-app
- V1.2 — Multi-server (panel monitor banyak VPS sekaligus)
- V2.0 — SaaS multi-tenant (jual ke klien)
MIT — bebas digunakan, dimodifikasi, dan didistribusikan. Attribusi appreciated: "Indoplatform Panel by CreatorB"
- systeminformation
- Recharts
- shadcn/ui (inspirasi)
- Next.js
