Node Panel Install

Documentation

Install, update and look after Node Panel. Every command you need on the server is on this page, ready to copy.

1Install

Log in to a fresh server over SSH as root and run this one command. It downloads Node Panel and starts the installer, which takes about 5 to 15 minutes.

curl -fsSL https://nodepanel.putulmail.com/nodepanel.tar.gz -o nodepanel.tar.gz && mkdir -p nodepanel-src && tar xzf nodepanel.tar.gz -C nodepanel-src && cd nodepanel-src && sudo bash install.sh

At the end the installer prints the panel address. Open it in your browser (see First login).

Requirements

  • Ubuntu 22.04 or 24.04, Debian 12, or AlmaLinux / Rocky Linux 8 or 9. A fresh server is best.
  • Root access, and a root password (you log in to the panel with it).
  • At least 1 GB of RAM; 2 GB or more for WordPress, mail and several apps.
  • Open in your cloud provider's firewall: 80, 443, 53 (TCP and UDP) and the panel port 2083. The server's own firewall is opened by the installer.

Options

Use another panel port than 2083:

cd nodepanel-src && sudo PANEL_PORT=7800 bash install.sh

AlmaLinux / Rocky with SELinux enforcing: the panel's PHP cannot start its root helper until you allow it. Either write your own policy, or make only the web server's domain permissive:

cd nodepanel-src && sudo NP_SELINUX_PERMISSIVE_HTTPD=1 bash install.sh

2First login

  1. Open https://YOUR-SERVER-IP:2083 in your browser.
  2. The panel starts with a self-signed certificate, so the browser warns once: choose Advanced, then Proceed. Add a domain for the panel later under Security to get a real certificate.
  3. Sign in as root with the server's root password. The panel has no separate admin password: change the root password and the panel login changes with it.
If root has no password yet (some providers only give an SSH key), set one first with passwd.

3Update

Every panel checks once a day for a new release. When one is out, the bell at the top of the panel shows it (and your alert e-mail or Telegram, if you set them up on the Monitoring page).

From the panel (easiest)

  1. Open Server > System updates.
  2. Read what's new in the Node Panel card and click Update now.
  3. The panel downloads the release, checks its checksum and signature, and runs the installer in update mode. It restarts on the way; the page follows along and shows the log. Reload when it says it is done.

Not seeing the new version yet? Click Check now on the same card.

Over SSH

The install command is also the update command: on a server that already has Node Panel, the installer sees it and runs in update mode.

curl -fsSL https://nodepanel.putulmail.com/nodepanel.tar.gz -o nodepanel.tar.gz && rm -rf nodepanel-src && mkdir nodepanel-src && tar xzf nodepanel.tar.gz -C nodepanel-src && cd nodepanel-src && sudo bash install.sh

It prints Existing installation found — update mode near the start. It still walks through every step, so the output looks like an install, but steps that are already done are left alone.

What an update keeps and replaces

Kept

  • Panel settings, port and database password (config.php)
  • Apps, sites and their files (/home/np_*)
  • All databases (MariaDB, PostgreSQL)
  • Domains, DNS zones, SSL certificates
  • E-mail domains and mailboxes
  • Backups (/var/nodepanel/backups)
  • Users, monitoring history, activity log

Replaced

  • The panel's own code: /opt/nodepanel/panel and /opt/nodepanel/bin
  • The panel's nginx config (same port)
  • New database tables or columns are added; nothing is dropped
  • PHP-FPM and nginx restart: the panel is away for a minute or two, sites keep running
Files you put inside /opt/nodepanel/panel or /opt/nodepanel/bin by hand are removed by an update (those folders are made identical to the release). Keep your own files elsewhere.

4Commands

Run these over SSH as root (or with sudo).

Login and access

CommandWhat it does
passwdChanges the root password, which is also the panel login. You can change it from the panel too: Settings > Users > Change password.
nodepanel-unlockEmergency unlock when the panel keeps you out: clears the panel IP allowlist, turns off two-factor login, clears login rate limits and all fail2ban bans.
nodepanel-unlock --ssh-passwordThe same, and turns SSH password login back on if the panel had switched it off.
ufw allow 2083/tcpOpens the panel port in the firewall (Ubuntu / Debian).
firewall-cmd --permanent --add-port=2083/tcp && firewall-cmd --reloadThe same on AlmaLinux / Rocky.
fail2ban-client status sshdShows the IPs banned for failed SSH logins. fail2ban-client unban 1.2.3.4 lets one back in.

Services

CommandWhat it does
systemctl status nginxWeb server and reverse proxy. nginx -t checks its configuration, systemctl reload nginx applies it.
systemctl status php8.3-fpmRuns the panel (and PHP sites). On AlmaLinux / Rocky it is php83-php-fpm.
systemctl restart nginx php8.3-fpmRestarts the panel when it does not answer.
systemctl status mariadb pdnsDatabase server and DNS server.
ls /etc/cron.d/nodepanel*The panel's scheduled jobs: backups, monitoring, traffic, update check.

Easier: Server > Services in the panel shows every service with Start, Restart and Stop buttons.

Apps

Each app runs as its own Linux user np_NAME and systemd service np-NAME (NAME is the app's name in the panel).

CommandWhat it does
systemctl status np-NAMEIs the app running, and its last lines of output.
systemctl restart np-NAMERestarts it (the same as Restart in the panel).
journalctl -u np-NAME -fFollows the app's log live. Ctrl+C to stop.
systemctl list-units 'np-*'All app services and their state.
ls /home/np_NAMEThe app's files.

Node.js versions

Install several Node.js versions side by side and pick one per app. Manage them in the panel under Applications > Node.js versions. They are kept in /opt/nodepanel/node/<version>.

  • Install — choose a version from the nodejs.org list (or type a custom version) and press Install. It is downloaded and SHA256-verified.
  • Make default — sets the server-wide default used by new apps and by the node / npm commands on the shell.
  • Uninstall — press the trash button next to a version to remove it from the server.
A version cannot be uninstalled while it is the default (set another one as default first), or while an app still uses it — the panel names those apps so you can move them to another version first.

Logs

FileWhat is in it
/var/log/nodepanel/apps/Output of every app.
/var/log/nodepanel/panel-php.logErrors of the panel itself.
/var/log/nodepanel/auth.logPanel sign-ins and failures (read by fail2ban).
/var/log/nodepanel/panel-update.logThe last panel update started from the panel.
/var/log/nodepanel/apt.logSystem package updates started from Server > System updates.
/var/log/nginx/error.logWeb server errors.
# the last 50 lines, then follow new ones
tail -n 50 -f /var/log/nodepanel/panel-php.log

Updates

CommandWhat it does
grep NP_VERSION /opt/nodepanel/panel/inc/bootstrap.phpThe installed panel version.
php /opt/nodepanel/bin/update-check.php nowAsks for the latest release right away (the panel does it once a day).
systemctl status nodepanel-self-updateIs an update started from the panel still running.
tail -f /var/log/nodepanel/panel-update.logFollows that update's output.
apt update && apt upgradeSystem packages on Ubuntu / Debian (dnf upgrade on AlmaLinux / Rocky). The panel's System updates page does the same.

5Files and folders

PathWhat it is
/opt/nodepanel/panelThe panel (web part). config.php in it holds the database password: keep it private.
/opt/nodepanel/binThe panel's root helper and background jobs.
/opt/nodepanel/node/Installed Node.js versions.
/home/np_NAMEOne app or site: its files and home folder.
/etc/nodepanel/env/Each app's environment variables (root only).
/var/nodepanel/backupsLocal backups.
/etc/nginx/conf.d/np-*.confOne nginx file per domain, written by the panel: change sites in the panel, not here.
/var/log/nodepanelPanel and app logs.

6Troubleshooting

The panel does not open in the browser

Check the cloud provider's firewall first (port 2083), then the server's own:

ufw allow 2083/tcp; systemctl restart nginx php8.3-fpm

Still nothing? nginx -t shows a broken configuration, systemctl status php8.3-fpm shows whether the panel's PHP runs.

I am locked out (IP allowlist, two-factor, too many attempts)
sudo nodepanel-unlock

Then sign in again and set up the allowlist or two-factor login on the Security page.

I forgot the panel password

It is the server's root password. Log in over SSH (or your provider's web console) and set a new one:

passwd
An update failed

The log shows the step that stopped:

tail -n 80 /var/log/nodepanel/panel-update.log

Your apps and data are not touched by a failed update. Fix what the log says (often a full disk or a package mirror that was down) and run the update again, from the panel or over SSH.

An app is down
systemctl status np-NAME
journalctl -u np-NAME -n 100

The last lines usually name the error (a missing module, a wrong environment variable, the port in use). Fix it in the app's page in the panel and press Restart.

7Update check and privacy

Once a day each panel asks nodepanel.putulmail.com for the latest release. With it, the panel sends: a random install ID, the panel version, the hostname, the operating system, the panel port, the number of apps, and the result of its last self-update. Nothing else: no domains, no files, no passwords.

Turn the report off in Settings > General > Panel updates > Report this server. The panel then only reads the latest version, and the bell still tells you about new releases.

Every release is signed. A panel installs an update only when the signature matches the Node Panel release key, so a package changed by anyone else is refused.