MicroPanel — Documentation

Single-binary control panel for 1-core / 1 GB VPSes. Micro control plane + MicroPanel edge, Caddy for TLS & static files. Deploy like Vercel, host like cPanel — under 150 MB idle.

Quick start

On any supported Linux VPS (root or sudo):

curl -sSL https://micropanel.febriandev.my.id/dist/install.sh | sudo bash

That one line auto-detects your distro and installs: 2 GB swap (swappiness=10), firewall (UFW / firewalld / iptables), Caddy + fail2ban, the static binaries, and init services (systemd or OpenRC). Then:

# 1. log in to the Web UI  →  https://panel.yoursite.my.id
# 2. create your first tenant + site
micropanel tenant create acme
micropanel project create blog
micropanel token create --project blog

Requirements

Item Minimum
CPU 1 core
RAM 1 GB
Disk 10 GB
OS Ubuntu 20.04+ · Debian 11+ · CentOS Stream 8/9 · Rocky 8/9 · AlmaLinux 8/9 · Fedora 38+ · Amazon Linux 2/2023 · openSUSE Leap 15.5+ · Alpine 3.18+ · Arch Linux
Domain 1 A-record

Architecture

Three cooperating layers. Everything is static or pre-compiled — no build ever runs on the VPS.

Layer Role
Control plane daemon, DB, API, CLI, deploy logic, Caddy config, edge config
Edge / data plane traffic absorb, rate-limit, load-balance to Caddy, hot-reload
Web server & TLS auto-SSL (Let’s Encrypt), static file serving, reverse proxy for binary/flow sites
Not in scope: no npm/cargo build on the VPS, no Docker, no mail server, no DNS management. CI tools build elsewhere; the box only serves files.

Deploy flow (zero downtime)

  1. CI (GitHub Actions/GitLab) builds your app and zips the output.
  2. CI POSTs the zip to the panel webhook (Bearer-token protected).
  3. Panel backs up the old folder and extracts the zip under /var/www/vhosts/<tenant>/<project>.
  4. Panel points the domain (Caddy API) at the new current dir; Caddy issues/reuses TLS.
  5. MicroPanel edge reloads routes over the control socket — no dropped connections.

Target: webhook received → live in under 5 seconds.

Tenants & sites

Tenant = a customer/account with disk + bandwidth quotas, isolated under /var/www/vhosts/<tenant>/.

Site = a project inside a tenant. Types:

CLI reference

The micropanel binary is dual-mode: command line (CLI) or background daemon. CLI talks to the daemon over a Unix domain socket.

micropanel tenant create <name>            # new tenant + quota
micropanel project create <name>           # new static site
micropanel project delete <name>
micropanel token create --project <name>   # deploy token (shown once)
micropanel token revoke <id>
micropanel domain add --project <name> --domain example.com
micropanel ci-template --project <name> github   # pre-filled workflow
micropanel status                          # CPU / RAM / disk / edge
micropanel update [--check-only]           # self-update from dist
micropanel daemon --foreground             # run as service

Webhook contract

POST https://panel.yoursite.my.id/webhook/deploy
Headers: Authorization: Bearer <token>
         X-MicroPanel-Project: <project>
Body:    multipart/form-data  file=<your-zip>

200 = deployed. Non-200 body explains why (bad token, over quota, unknown project). Templates in templates/ci/ (GitHub Actions, GitLab, deploy.sh) — or fetch a pre-filled one with micropanel ci-template.

Self-healing routing

The panel database is the source of truth for domains. On daemon boot — and on every health tick (30s) — bound domains are replayed into Caddy's route table. If Caddy restarts and loads its static Caddyfile (dropping dynamic API routes), the missing routes are re-pushed automatically, so a proxy restart can't take your sites offline.

Need it back instantly? System → Repair routing force-resyncs every domain on demand (POST /api/system/caddy/resync).

Software Updates

Keep your application up to date using the built-in Update feature, which allows you to update to the latest available version directly from the Web UI.

Monitoring

CPU, RAM, disk via sysinfo; edge traffic/connection stats via the MicroPanel edge. Live dashboard in the Web UI, JSON via micropanel status.

Security model

FAQ

Can I bind any domain to a site?

Yes. Add the domain to the site (CLI or Web UI), point an A record at the VPS IP, and Caddy issues TLS automatically. Each site can host multiple domains; each domain gets its own certificate.

Does the panel build my app?

No. Builds run in your CI. The VPS only stores and serves deploy outputs.

Which Linux distros are supported?

The installer auto-detects the package manager and init system:

FamilyDistrosPackage managerFirewall
DebianUbuntu 20.04/22.04/24.04, Debian 11/12aptUFW
RHELCentOS Stream 8/9, Rocky 8/9, AlmaLinux 8/9, Fedora 38+, Amazon Linux 2/2023dnf / yumfirewalld
SUSEopenSUSE Leap 15.5+, Tumbleweedzypperfirewalld
AlpineAlpine 3.18+apkiptables
ArchArch LinuxpacmanUFW

Alpine uses OpenRC; all others use systemd. Caddy is installed from its official repository on each distro.

Which architectures are supported?

x86_64 ships today. aarch64 is paused in the release matrix pending a experimental target-parsing fix for the ring crate.

Where is the code?

Public roadmap in todo.md, full requirements in prd.md. Sample CI templates in templates/ci/.