Web control panel for Ubuntu/Debian VPS — CloudPanel-style, but with what CloudPanel never had: first-class SQLite management (browse tables, edit rows, run SQL, import/export, per-site backups).
Stack: Node.js >= 22.13 (built-in node:sqlite), Express 5, vanilla-JS SPA. Two deps total
(express, busboy). Manages: Linux site users, nginx vhosts, PHP-FPM pools, Let's Encrypt,
cron, MySQL/MariaDB, file manager, logs, backups.
curl -fsSL https://raw.githubusercontent.com/wausin/jilakepanel/main/bin/install.sh | bashOr manual:
node --version # >= 22.13, else: apt install nodejs via NodeSource
git clone https://github.com/wausin/jilakepanel.git /opt/jilakepanel
cd /opt/jilakepanel && npm install --omit=dev
JLP_ADMIN_USER=admin JLP_ADMIN_PASSWORD='change-me-123' node src/server.jsPanel on port 9443. Access via IP, then lock down: firewall to your admin IPs, or front it with
nginx + basic auth. Put behind TLS ASAP (self-signed fine: openssl req -x509 -newkey rsa:2048 ...
in front via nginx proxy_pass).
bin/jilakepanel.service ships ready — copy to /etc/systemd/system/, set
EnvironmentFile=/etc/jilakepanel.env, systemctl enable --now jilakepanel.
npm install
JLP_DRYRUN=1 npm start # FakeSystem: no real OS calls; UI + API + SQLite all real
npm test # 47 tests, no root neededWindows PowerShell: $env:JLP_DRYRUN='1'; npm start. Linux/macOS/nginx/PHP/user ops need a real
Ubuntu/Debian box — dev on Windows covers UI + API + panel DB + SQLite management only.
JLP_PORT JLP_HOST JLP_DATA_DIR JLP_SITES_DIR JLP_VHOST_DIR JLP_VHOST_ENABLED_DIR
JLP_FPM_POOL_DIR JLP_LOG_DIR JLP_ADMIN_USER JLP_ADMIN_PASSWORD JLP_DRYRUN=1
Architecture, API contract, conventions: AGENTS.md.