Installation guide

Deploy NNOP Panel on your own server

This guide covers a practical single-server setup: install the panel, configure the environment, start the service, and create your first managed access key.

A Linux server with root or sudo access.

Node.js 22+ and npm.

A local server core installation on the same server.

A public domain or IP address that points to your server.

1. Prepare the server

Ubuntu 22.04/24.04 or another Linux server with root/sudo access is enough. Point your domain to the server IP first.

sudo apt update
sudo apt install -y curl git nginx
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
sudo mkdir -p /opt/nnop-panel
sudo chown "$USER":"$USER" /opt/nnop-panel
cd /opt/nnop-panel
wget https://nn-cloud.top/panel/releases/nnop-panel-1.0.0-source.tar.gz
tar -xzf nnop-panel-1.0.0-source.tar.gz --strip-components=1
npm install
cp .env.example .env.local

2. Configure the environment

Open .env.local, set the admin login, a strong password, a random session secret, and the public HTTPS panel URL.

NNOP_PANEL_ADMIN_USERNAME=admin
NNOP_PANEL_ADMIN_PASSWORD=change-this-password-now
NNOP_PANEL_SESSION_SECRET=replace-with-a-long-random-secret
NNOP_PANEL_PUBLIC_BASE_URL=https://panel.example.com
NNOP_PANEL_CORE_BINARY_PATH=/usr/local/bin/secure-core
NNOP_PANEL_CORE_CONFIG_PATH=/usr/local/etc/secure-core/config.json
NNOP_PANEL_CORE_SERVICE_NAME=secure-core
# For UI-only testing without applying server changes:
# NNOP_PANEL_DISABLE_CORE_APPLY=1

3. Test the local run

Build once and start the panel on a local port before creating the production service.

npm run build
PORT=3010 npm run start

4. Create a systemd service

Save this block as /etc/systemd/system/nnop-panel.service, then enable the service.

[Unit]
Description=NNOP Panel
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/nnop-panel
Environment=NODE_ENV=production
Environment=PORT=3010
ExecStart=/usr/bin/npm run start
Restart=always
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target

5. Put Nginx in front

This example proxies your domain to the local panel port. Add HTTPS with certbot after Nginx is working.

server {
    listen 80;
    server_name panel.example.com;

    location / {
        proxy_pass http://127.0.0.1:3010;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

6. Update and backup

Back up data/db.json before updating. This file stores local settings and created access keys.

cd /opt/nnop-panel
cp data/db.json /root/nnop-panel-db-backup.json
npm install
npm run build
sudo systemctl restart nnop-panel

Create your first key

  1. 01Open the panel and sign in with the admin account from .env.local.
  2. 02Set the public server address and local server core parameters in panel settings.
  3. 03Create an access key, then copy the import token or import link.
  4. 04In NNOP, open Settings and the source page if you need to repeat the deployment on your own server.