Skip to content
NexPanel
Docs/Getting started/Installation

Getting started

Installation

Every NexPanel release is installed with one script, install.sh, from downloads.nexpanel.app. Run one command as root on a fresh server:

curl -fsSLO https://downloads.nexpanel.app/install/install.sh && bash install.sh --all-in-one --email you@example.com

1. What is checked automatically

The NexPanel release key is built into the installer. Before it runs anything, the installer:

  1. downloads install.sh.sig and checks its own file against the key, so a corrupted, outdated or altered copy stops with an error;
  2. checks the signature of the release manifest that names the current versions;
  3. checks both the SHA-256 and the signature of every package it downloads.

If a check fails, it stops and nothing has been installed. When the script is piped (curl … | bash), there is no file to check, so it checks the published copy instead and says so — download it to a file as above to have your exact copy checked.

Verify it yourself first (optional)

For an independent check before anything runs as root, download the installer, its signature and the public key, and compare the key with the fingerprint published on nexpanel.app/download:

curl -fsSO https://downloads.nexpanel.app/install/install.sh
curl -fsSO https://downloads.nexpanel.app/install/install.sh.sig
curl -fsSO https://downloads.nexpanel.app/keys/nexpanel-release.pub
openssl pkey -pubin -in nexpanel-release.pub -outform DER | sha256sum
openssl pkeyutl -verify -pubin -inkey nexpanel-release.pub -rawin -in install.sh -sigfile install.sh.sig

The sha256sum line must print 471253db7961a1b2554230e7ba8e65f53805d1f88d45328e1b5826274199e6da and openssl must say Signature Verified Successfully. If either check fails, stop. More detail: Verify a release. You can also read the script first: less install.sh.

2. Choose an install mode

All-in-one

The controller and a hosting node on the same server — the quickest start.

curl -fsSLO https://downloads.nexpanel.app/install/install.sh && bash install.sh --all-in-one --email you@example.com

When it finishes:

  • Admin panel: https://<server-ip>:2087/admin
  • Customer panel: https://<server-ip>:2083/panel
  • The admin login and password are saved in /root/nexpanel-credentials.txt (root only). Change the password after the first login.

Useful options:

Option Default Meaning
--web-server NAME nginx nginx, apache, nginx-apache or openlitespeed
--php "8.2 8.3" 8.2 8.3 PHP versions to install for customers
--admin-allow CIDR – Only allow the admin panel from these addresses (repeat for more)
--no-lve – Skip the LVE resource manager
--version X.Y.Z latest Install a specific release
--yes – Do not ask for confirmation
--no-telemetry – Do not send anonymous install statistics (details)
--skip-self-check – Do not check the installer's own signature (development only)

Until you install phpMyAdmin with SSL on the server's IP (Admin › Nodes › phpMyAdmin), the panels use a self-signed certificate and the browser warns once.

Controller on its own server

For several hosting servers, run the controller on a separate small server with its own domain:

curl -fsSLO https://downloads.nexpanel.app/install/install.sh && bash install.sh --controller --domain cp.example.com --email you@example.com

This installs Nginx, PHP-FPM, PostgreSQL and Redis, and requests a Let's Encrypt certificate for cp.example.com (point the domain at the server first). The admin panel is then at https://cp.example.com/admin.

Add a hosting node

  1. In the admin panel open Servers › Nodes › Add node, give the node a name and choose its web server.
  2. The panel shows a one-time install command for that node. It downloads and checks install.sh, saves the enrollment token in a root-only file and runs:
bash install.sh --node --controller https://cp.example.com \
     --enroll-token-file /root/nexpanel-enroll-token --web-server nginx --php "8.2 8.3"
  1. Run it as root on the new server. The token works once and expires after a few hours; the installer deletes the token file when it is done.
  2. The node appears as online in Servers › Nodes within a minute.

What the installer does

  1. Checks its own signature against the release key built into it.
  2. Reads the signed release manifest (or, with --version, the signed checksum list of that release).
  3. Downloads each package it needs and checks both its SHA-256 and its own signature against the NexPanel release key built into the script.
  4. Unpacks the packages into /root/nexpanel-install/<version>/ and runs their installers.

Nothing is executed before both checks pass. After installation, updates come from Administration › Updates — see Updates.

Install paths

Path Contents
/opt/nexpanel-controller Controller application
/etc/nexpanel Agent configuration (agent.json), SSL certificates, firewall rules
/var/lib/nexpanel Agent state and work directories
/var/log/nexpanel Per-site access and error logs (domlogs/)
/opt/nexpanel/runtimes Node.js, Python and Ruby runtimes for customer apps
/usr/local/sbin/nexpanel-* Agent, CLI (nexpanelctl), cage and NexShield binaries

Wrong or missing something? Let us know.