Skip to Content
🚀 We just launched! Please star us on Github!

Server Only Installation

This guide walks you through installing just the Smart Panel backend and admin interface on a server or headless device. Display panels on other devices will connect to this server over your local network.

This is the ideal setup when you want a central server with one or more displays around your home.


Prerequisites

  • A Linux device with systemd (Raspberry Pi, mini PC, NAS, VM, etc.)
  • Network connectivity (Wi-Fi or Ethernet)
  • SSH access to the device (or a local terminal)

The fastest way to get started. This script handles everything — installs Node.js if needed, downloads the Smart Panel package, and configures the systemd service.

curl -fsSL https://get.smart-panel.fastybird.com | sudo bash

The script supports several options. You can customize the port or install a specific version:

curl -fsSL https://get.smart-panel.fastybird.com | sudo bash -s -- --port 8080

Available flags: --port <port>, --version <ver>, --beta, --alpha

That’s it! Skip ahead to Post-Installation below.


Option 2: Manual NPM Install

If you prefer more control over the installation process, follow these steps.

Install Node.js

The backend requires Node.js 20 or higher. Use the official NodeSource setup script:

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs

Verify the installation:

node --version
⚠️

The output should show v20.x.x or higher. If you see an older version, remove it and reinstall using the commands above.

Install Smart Panel

Install the Smart Panel package globally via npm:

sudo npm install -g @fastybird/smart-panel

Configure and Start the Service

Use the built-in service manager to install and start Smart Panel as a systemd service:

sudo smart-panel-service install

This will:

  • Create a dedicated system user (smart-panel)
  • Set up data directories at /var/lib/smart-panel/
  • Create configuration at /etc/smart-panel/
  • Register and start a systemd service

You can customize the installation with options:

sudo smart-panel-service install \ --port 8080 \ --admin-username admin \ --admin-password mysecurepassword

Run smart-panel-service install --help for all available options.


Option 3: Manual Tarball Install

For environments where npm is not available or you prefer a self-contained installation.

Install Node.js

Follow the same Node.js installation as in Option 2 above.

Download the Release Package

Create the installation directory and download the latest release:

sudo mkdir -p /opt/smart-panel sudo chown -R ${USER}:${USER} /opt/smart-panel cd /opt/smart-panel
curl --http1.1 -L -C - -o smart-panel.tar.gz \ https://github.com/FastyBird/smart-panel/releases/latest/download/smart-panel.tar.gz tar -xzf smart-panel.tar.gz -C . rm smart-panel.tar.gz

Running this on a Raspberry Pi Zero 2W? The -C - flag tells curl to resume the download if it gets interrupted. If your connection drops, simply run the same command again.

Optional: Verify Download Integrity

curl -LO https://github.com/FastyBird/smart-panel/releases/latest/download/smart-panel.sha256 sha256sum -c smart-panel.sha256

Create Data Directory

sudo mkdir -p /var/smart-panel sudo chown -R ${USER}:${USER} /var/smart-panel

Run Database Migrations

cd /opt/smart-panel npm run migration:run

Create a Systemd Service

Create the service file:

sudo nano /etc/systemd/system/smart-panel-backend.service

Paste this configuration:

[Unit] Description=Smart Panel Backend & Admin Service After=network.target [Service] User=pi WorkingDirectory=/opt/smart-panel ExecStart=npm start Restart=always Environment=NODE_ENV=production [Install] WantedBy=multi-user.target

Enable and start the service:

sudo systemctl enable smart-panel-backend sudo systemctl start smart-panel-backend

Optional: Install InfluxDB

If you want to store time-series data (temperature history, energy usage, etc.), install InfluxDB v1.8:

wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo tee /etc/apt/trusted.gpg.d/influxdata.asc echo "deb https://repos.influxdata.com/debian bookworm stable" | sudo tee /etc/apt/sources.list.d/influxdata.list sudo apt update sudo apt install influxdb=1.8.10-1 -y sudo systemctl enable influxdb sudo systemctl start influxdb
⚠️

Make sure you install InfluxDB v1.8. InfluxDB 2.x is not compatible.

Then configure the connection in your Smart Panel environment:

sudo nano /etc/smart-panel/environment

Add:

FB_INFLUXDB_URL=http://localhost:8086 FB_INFLUXDB_DATABASE=smart_panel

Restart the service to apply:

sudo smart-panel-service restart

Optional: Allow Reboot & Power Off

To allow the backend to reboot or shut down the device without a password prompt:

sudo visudo

Add this line at the bottom:

pi ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/poweroff
⚠️

Only allow specific commands. Never use NOPASSWD: ALL.


Post-Installation

Verify the Service

sudo smart-panel-service status

You should see the service running with its PID, uptime, and memory usage.

Access the Admin Interface

Open a browser and navigate to:

http://<device-ip>:3000

If you enabled mDNS (default), you can also use http://smart-panel.local:3000.

Service Management

# Check status sudo smart-panel-service status # View logs sudo smart-panel-service logs -f # Restart sudo smart-panel-service restart # Update to latest version sudo smart-panel-service update

Configuration

Environment variables are stored in /etc/smart-panel/environment:

VariableDefaultDescription
FB_BACKEND_PORT3000HTTP server port
FB_JWT_SECRETAuto-generatedJWT authentication secret
FB_DB_PATH/var/lib/smart-panel/dataDatabase directory
FB_CONFIG_PATH/var/lib/smart-panel/configConfig directory
FB_MDNS_ENABLEDtrueEnable mDNS discovery
FB_INFLUXDB_URL-InfluxDB connection URL
FB_INFLUXDB_DATABASE-InfluxDB database name
FB_OPENWEATHERMAP_API_KEY-OpenWeatherMap API key

What’s Next?

Your server is running. Now either:

  • Add display panels by following the Display Only guide on your display devices
  • Create your admin account by following the Onboarding guide
Last updated on