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 |
Deploy flow (zero downtime)
- CI (GitHub Actions/GitLab) builds your app and zips the output.
- CI POSTs the zip to the panel webhook (Bearer-token protected).
- Panel backs up the old folder and extracts the zip under
/var/www/vhosts/<tenant>/<project>. - Panel points the domain (Caddy API) at the new
currentdir; Caddy issues/reuses TLS. - 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:
static— zip deploy via CI webhook (the Vercel-like path).binary— a pre-compiled app, reverse-proxied on an assigned port (10000–19999).
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
- Uses UFW — only ports 22, 80, 443 exposed.
- Bearer-token webhook endpoint; per-tenant access control; admin vs user roles.
- Per-IP rate limit + connection caps at the MicroPanel edge (token-bucket).
- Web UI bound to
127.0.0.1, only reachable through Caddy. - Deploy keys scoped — the CI SSH user can only write
/opt/micropanel-dist.
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:
| Family | Distros | Package manager | Firewall |
|---|---|---|---|
| Debian | Ubuntu 20.04/22.04/24.04, Debian 11/12 | apt | UFW |
| RHEL | CentOS Stream 8/9, Rocky 8/9, AlmaLinux 8/9, Fedora 38+, Amazon Linux 2/2023 | dnf / yum | firewalld |
| SUSE | openSUSE Leap 15.5+, Tumbleweed | zypper | firewalld |
| Alpine | Alpine 3.18+ | apk | iptables |
| Arch | Arch Linux | pacman | UFW |
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/.