nuvira-server-pro

nuvira-server-pro

Docker app from alexbn71's Repository

Overview

NuviraHub Pro server, for teams that support many computers with NuviraHub, the self-hosted remote desktop and remote support app.

Everything in the open source server (signalling, relay, signed app updates, end-to-end encrypted sessions) plus: server address books shared by the team, accounts and roles, central rules for the devices, web console, two-factor authentication, single sign-on (OpenID Connect), session log and custom installers.

Needs a NuviraHub Pro licence key (see nuvirahub.dev; free for members of the Founders Program). Without a key it works like the open source server. The app is the same for both servers.

Deploying nuvira-server

The server is published as a Docker image by GitHub Actions on every push to main:

ghcr.io/nuvira-hub/nuvira-server:latest     # also :sha-<commit> and :<version> for tags

Images for linux/amd64 and linux/arm64, built FROM scratch (only the static binary).

Container settings

Kind Name Value Notes
Port UDP 21116 21116/udp signalling (QUIC) and relay; required
Port TCP 21116 21116/tcp WebSocket fallback for networks that block UDP
Volume /data e.g. /mnt/user/appdata/nuvira-server nuvira.db, cert.pem/key.pem (server identity)
Variable NUVIRA_LOG info debug, info, warn
Variable NUVIRA_WS_LISTEN :21116 off disables the WebSocket fallback

The image runs as user 65532. With a bind mount owned by another user, run the container with that user (--user UID:GID) or give the folder to 65532.

Back up the whole /data folder. Losing cert.pem/key.pem makes every client refuse the server (they pin its certificate at the first connection).

This is the open server: signalling, relay and updates; each app keeps its own address book. Server address books, accounts and central rules are NuviraHub Pro modules, with their own image.

No public address has to be configured: clients reach the relay at the same address and port they use for the server.

docker compose

See docker-compose.yml.

Unraid

  1. Copy unraid/nuvira-server.xml to the flash drive as /boot/config/plugins/dockerMan/templates-user/my-nuvira-server.xml.
  2. Docker → Add Container → Template: nuvira-server. Check the appdata path, Apply.
  3. The template adds --user 99:100 (Extra Parameters) so the container can write to appdata, which belongs to nobody:users.
  4. Check the log: nuvira-server started with the certificate fingerprint.

Router

Forward UDP 21116 and TCP 21116 from the WAN to the server. Clients use the public name or address (--server nuvira.example.com, or the app settings).

Devices on the same LAN as the server that use the public name need NAT reflection (hairpin) on the router, or a local DNS record that resolves the name to the server's LAN address. Direct connections between devices are not affected: they also try local addresses (see docs/13-phase1-network.md).

Updates

The server also hands the signed app updates to its devices, from /data/updates over the TCP port (http://server:21116/nuvira/update/windows-x64.json). Devices with unattended access install a new version within 6 hours, never during a session; copies that are not installed offer it.

To publish a version: download nuvira-update-VERSION.zip from the GitHub release and unpack it into /data/updates (on Unraid /mnt/user/appdata/nuvira-server/updates), replacing windows-x64.json. The folder then holds:

updates/windows-x64.json
updates/windows-x64/nuvira-VERSION.exe

The older nuvira-*.exe can be deleted. No restart is needed: the manifest is read at every request. The files must be readable by the container's user (65532, or the one given with --user). Every update is signed with the NuviraHub release key and the app checks the signature before installing it, so a tampered file is refused.

Requirements

A NuviraHub Pro licence key; the server checks it online at start-up and once a day (7 days of grace without Internet). Forward port 21116 UDP (and TCP for the WebSocket fallback) from the router to Unraid. To sign in to the web console from the Internet, put it behind an HTTPS reverse proxy: plain-HTTP logins are accepted only from the local network. Back up the Data folder: it holds the server's identity, which the apps pin, and the key of the address books.

Related apps

Details

Repository
ghcr.io/nuvira-hub/nuvira-server-pro:latest
Last Updated2026-11-02
First Seen2026-11-02

Runtime arguments

Web UI
http://[IP]:[PORT:21116]/console/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--user 99:100 --restart unless-stopped

Template configuration

Port (UDP)Portudp

Signalling and relay (QUIC). Forward it on the router.

Target
21116
Default
21116
Value
21116
Port (TCP)Porttcp

WebSocket fallback for networks that block UDP, app updates and the web console. Forward it on the router.

Target
21116
Default
21116
Value
21116
DataPathrw

Database, server certificate, address book key, and the app updates you publish to your devices (updates folder). Back up the whole folder.

Target
/data
Default
/mnt/user/appdata/nuvira-server-pro
Value
/mnt/user/appdata/nuvira-server-pro
Licence keyVariable

NuviraHub Pro licence key. Without it the Pro modules stay off (signalling and relay keep working).

Target
NUVIRA_LICENSE_KEY
Admin userVariable

First administrator, created only if no account exists yet.

Target
NUVIRA_ADMIN_USER
Default
admin
Value
admin
Admin passwordVariable

At least 8 characters. Empty: a random password is written once to the log. Used only at the first start; lost password: docker exec nuvira-server-pro /nuvira-server reset-password.

Target
NUVIRA_ADMIN_PASSWORD
Session log daysVariable

Days the session log is kept.

Target
NUVIRA_SESSION_LOG_DAYS
Default
365
Value
365
Public URLVariable

https:// address of the console from the browser (reverse proxy), e.g. https://console.example.com. Needed by single sign-on.

Target
NUVIRA_PUBLIC_URL
SSO providerVariable

OpenID Connect issuer, e.g. https://login.microsoftonline.com/TENANT-ID/v2.0 or https://accounts.google.com. Empty: no single sign-on.

Target
NUVIRA_OIDC_ISSUER
SSO client IDVariable

Application (client) ID registered at the provider.

Target
NUVIRA_OIDC_CLIENT_ID
SSO client secretVariable

Secret of that application.

Target
NUVIRA_OIDC_CLIENT_SECRET
SSO button nameVariable

Shown as Sign in with NAME, e.g. Microsoft or Google.

Target
NUVIRA_OIDC_NAME
Default
SSO
Value
SSO
SSO new accounts roleVariable

technician or readonly.

Target
NUVIRA_OIDC_ROLE
Default
technician
Value
technician
SSO administrators groupVariable

Value of the groups claim that makes an account administrator (Entra ID: object ID of the group).

Target
NUVIRA_OIDC_ADMIN_GROUP
Log levelVariable

debug, info or warn.

Target
NUVIRA_LOG
Default
info
Value
info
WebSocket listenVariable

TCP address of the WebSocket fallback, the app updates and the console; off to disable it.

Target
NUVIRA_WS_LISTEN
Default
:21116
Value
:21116
Limits per addressVariable

Limits on registrations and connection requests per address (local addresses are always exempt); off to disable them.

Target
NUVIRA_RATE_LIMITS
Default
on
Value
on