Installation
One command, ten minutes, fresh Ubuntu or Debian.
The one-line install
On a fresh Ubuntu 22.04 / 24.04 / 26.04 or Debian 12 / 13 VPS, run:
$ curl -fsSL https://license.novapanel.dev/install.sh | sudo bash
That's it. The installer handles everything: package installs, database setup, Caddy reverse proxy, license activation, and the panel binary itself. Total time: roughly 10 minutes on a 2-CPU / 4 GB RAM VPS.
What you need before running
- A fresh Ubuntu 22.04 / 24.04 / 26.04 or Debian 12 / 13 server (not a shared host — you need root).
- At least 2 GB RAM, 2 CPU cores, 30 GB disk. More is better, especially for mail.
- A domain pointed at the server's public IP (you'll be asked for it during install).
- Ports 80, 443, 25, 110, 143, 465, 587, 993, 995, 21, 53, and the panel/tools ports 2082, 2083, 2086, 2087, 8080, 8443, 2095, 2096 reachable from the internet (the installer offers to open them via UFW). If your host has a separate cloud firewall, open them there too.
Tip: the panel runs at port2087(admin) and2083(customer), with automatic Let's Encrypt for the hostname you provide. Don't expose the panel via 443 alongside customer sites — Caddy handles that automatically.
What gets installed
- PostgreSQL 17 — panel's own database
- MariaDB — for customer-owned databases
- Caddy — reverse proxy with auto-TLS
- PHP-FPM 8.3 — for hosted sites
- Postfix + Dovecot + OpenDKIM — mail stack
- vsftpd — FTP
- PowerDNS — authoritative DNS
- ClamAV — virus scanning (Pro)
- NovaPanel binary itself, fetched from the license-gated CDN
What it asks you
The installer is interactive — it'll prompt you for:
- Hostname for the panel (e.g.
panel.example.com) - Admin email address
- Admin password
- License key, if you have a Pro/Developer one — leave blank for free Community
If you're piping curl ... | sudo bash the installer detects that, re-downloads itself to /tmp, and reattaches to your terminal automatically so prompts work properly.
Non-interactive install (for automation)
Pass --quick plus flags to skip every prompt. Arguments after bash -s -- are forwarded to the installer:
curl -fsSL https://license.novapanel.dev/install.sh | sudo bash -s -- \
--quick \
--hostname panel.example.com \
--admin-email admin@example.com \
--admin-pass 'changeme123' \
--key NOVA-XXXX-XXXX-XXXX --key is optional — omit it for the free Community tier. Leave off --quick and the flags to run interactively instead. Other useful flags: --admin-user, --ssl-domain <domain> (enable Let's Encrypt for the panel), and --no-mail / --no-dns / --no-ftp / --no-clamav / --no-php / --no-nodejs / --no-python / --skip-waf to skip components. Run with --help to see them all.
After install
NovaPanel follows the cPanel port convention — each panel has an HTTPS port (used with a domain) and a matching HTTP port (used by IP):
- With a hostname (HTTPS):
https://<your-hostname>:2087(admin) andhttps://<your-hostname>:2083(customer) - By IP, no domain yet (HTTP):
http://<your-ip>:2086(admin) andhttp://<your-ip>:2082(customer)
The HTTP-by-IP ports always work — so if you installed on an IP, or your domain/certificate isn't ready yet, you can still get straight in on :2086 / :2082. (Requesting the HTTPS ports over plain HTTP by IP won't work — that's by design; use the HTTP ports for IP access.)
Log in with the admin email and password you set. From there: create packages, add customers, point domains.
Adding a domain later (IP install → HTTPS)
Installed on an IP and want to move onto a real domain with HTTPS? Point the domain's DNS at the server, then in the admin panel → Settings → General, enter the hostname and click Enable HTTPS for the panel. NovaPanel serves the panel over HTTPS on that hostname and Let's Encrypt issues the certificate automatically within a minute — no reinstall. The HTTP-by-IP ports keep working throughout, so you're never locked out during the switch. Once it's live, the button turns into an HTTPS active shield; visiting the hostname on its own opens the customer panel, while the admin panel stays on :2087. (This also works behind Cloudflare — the bare hostname no longer returns a 521.)
phpMyAdmin and Roundcube webmail follow the same pattern — 8443/2096 (HTTPS) and 8080/2095 (HTTP) — and open from their buttons inside the panel. If your server is behind Cloudflare, see Running behind Cloudflare.
Re-running the installer
The installer is idempotent — re-running on a server that already has NovaPanel just upgrades the binary and re-applies any missing service config. It won't wipe your data.