Skip to main content

Unraid

This guide covers installing and configuring Nekzus on Unraid servers. Unraid provides an excellent Docker-based environment that makes deploying Nekzus straightforward.


Requirements

System Requirements

ComponentMinimumRecommended
Unraid Version6.10+6.12+
RAM256 MB available512 MB available
Disk Space100 MB500 MB (with data)
DockerEnabledEnabled

Prerequisites

Before installing Nekzus, ensure:

  1. Docker is enabled in Unraid Settings
  2. Community Applications plugin is installed (recommended for easiest installation)
  3. Network access to Docker Hub or your container registry

To enable Docker:

  1. Navigate to Settings > Docker
  2. Set Enable Docker to Yes
  3. Click Apply

Installation Methods

The easiest way to install Nekzus on Unraid is through Community Applications.

Community Applications Plugin

If you haven't installed the Community Applications plugin, install it first from the Unraid forums or by navigating to Apps and following the prompts.

Installation Steps

  1. Navigate to the Apps tab in Unraid
  2. Search for Nekzus
  3. Click Install
  4. Configure the template variables (see Template Variables)
  5. Click Apply

Method 2: Docker Template Manual Setup

If Nekzus is not available in Community Applications, create a Docker template manually.

Step 1: Add Container

  1. Navigate to Docker tab
  2. Click Add Container
  3. Toggle Basic View to Off (advanced mode)

Step 2: Configure Container

Enter the following settings:

Basic Settings:

FieldValue
Namenekzus
Repositorynstalgic/nekzus:latest
Network Typebridge (or host for full network access)

Port Mappings:

Container PortHost PortDescription
80808080Web UI and API

Click Add another Path, Port, Variable, Label or Device to add each mapping.

Step 3: Add Path Mappings

Config TypeNameContainer PathHost PathAccess Mode
PathData/app/data/mnt/user/appdata/nekzus/dataRead/Write
PathConfig/app/configs/mnt/user/appdata/nekzus/configsRead/Write
PathDocker Socket/var/run/docker.sock/var/run/docker.sockRead Only
PathToolbox/app/toolbox/mnt/user/appdata/nekzus/toolboxRead/Write
Docker Socket Security

Mounting the Docker socket grants Nekzus read access to your Docker environment for service discovery. The socket is mounted read-only for security.

Step 4: Add Environment Variables

VariableValueDescription
NEKZUS_JWT_SECRETGenerate a 32+ character secretJWT signing secret
NEKZUS_BOOTSTRAP_TOKENGenerate a secure tokenBootstrap authentication
NEKZUS_ADDR:8080Listen address
NEKZUS_BASE_URLhttp://YOUR_UNRAID_IP:8080Base URL for QR pairing

Generate secure secrets using:

# Generate JWT secret (run in Unraid terminal)
openssl rand -base64 32

# Generate bootstrap token
openssl rand -base64 24

Step 5: Apply and Start

  1. Click Apply
  2. The container will download and start
  3. Access Nekzus at http://YOUR_UNRAID_IP:8080

Method 3: Command Line

For users comfortable with the Unraid terminal, install via command line.

Basic Installation

docker run -d \
--name nekzus \
--restart unless-stopped \
-p 8080:8080 \
-v /mnt/user/appdata/nekzus/data:/app/data \
-v /mnt/user/appdata/nekzus/configs:/app/configs \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e NEKZUS_JWT_SECRET="$(openssl rand -base64 32)" \
-e NEKZUS_BOOTSTRAP_TOKEN="$(openssl rand -base64 24)" \
-e NEKZUS_ADDR=":8080" \
nstalgic/nekzus:latest

Production Installation with Custom Config

# Create directories
mkdir -p /mnt/user/appdata/nekzus/{data,configs,toolbox}

# Create config file (optional)
cat > /mnt/user/appdata/nekzus/configs/config.yaml << 'EOF'
server:
addr: ":8080"
base_url: "http://YOUR_UNRAID_IP:8080"

discovery:
enabled: true
docker:
enabled: true
socket_path: "unix:///var/run/docker.sock"
poll_interval: "30s"
mdns:
enabled: true
scan_interval: "60s"

toolbox:
enabled: true
catalog_dir: "/app/toolbox"
data_dir: "/app/data/toolbox"

storage:
database_path: "/app/data/nexus.db"
EOF

# Run container with config
docker run -d \
--name nekzus \
--restart unless-stopped \
-p 8080:8080 \
-v /mnt/user/appdata/nekzus/data:/app/data \
-v /mnt/user/appdata/nekzus/configs:/app/configs:ro \
-v /mnt/user/appdata/nekzus/toolbox:/app/toolbox \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e NEKZUS_JWT_SECRET="$(openssl rand -base64 32)" \
-e NEKZUS_BOOTSTRAP_TOKEN="$(openssl rand -base64 24)" \
nstalgic/nekzus:latest \
--config /app/configs/config.yaml --insecure-http

Configuration

Template Variables

When configuring Nekzus in Unraid's Docker UI, use these settings:

Required Variables

VariableDefaultDescription
NEKZUS_JWT_SECRETNoneJWT signing secret. Must be 32+ characters. Generate with openssl rand -base64 32
NEKZUS_BOOTSTRAP_TOKENNoneToken for initial device pairing. Generate with openssl rand -base64 24

Optional Variables

VariableDefaultDescription
NEKZUS_ADDR:8080Listen address (port binding)
NEKZUS_BASE_URLAuto-detectedPublic URL for QR code pairing (e.g., http://192.168.1.100:8080)
NEKZUS_DATABASE_PATH/app/data/nexus.dbSQLite database location
NEKZUS_TLS_CERTEmptyPath to TLS certificate (for direct HTTPS)
NEKZUS_TLS_KEYEmptyPath to TLS private key

Path Mappings Explained

Container PathRecommended Host PathPurpose
/app/data/mnt/user/appdata/nekzus/dataSQLite database, backups, runtime data
/app/configs/mnt/user/appdata/nekzus/configsConfiguration files
/app/toolbox/mnt/user/appdata/nekzus/toolboxService deployment templates
/var/run/docker.sock/var/run/docker.sockDocker API for service discovery

Network Types

Choose the appropriate network type for your setup:

Bridge Mode (Default)

Network Type: bridge
Port: 8080 -> 8080
  • Standard Docker networking
  • Port mapping required
  • Works with most setups
  • Recommended for most users

Host Mode

Network Type: host
  • Container uses host network directly
  • No port mapping needed
  • Better for mDNS discovery
  • Required if discovering services on multiple Docker networks

Custom Bridge Network

For integration with other containers:

Network Type: Custom: br0
  • Uses Unraid's custom bridge
  • Allows direct IP assignment
  • Useful for accessing from other VLANs

Security Configuration

Reverse Proxy with Nginx Proxy Manager

For HTTPS access with automatic certificates, use Nginx Proxy Manager.

Prerequisites

  1. Install Nginx Proxy Manager from Community Applications
  2. Configure your domain DNS to point to your Unraid server
  3. Forward ports 80 and 443 on your router

Configuration Steps

  1. Open Nginx Proxy Manager web UI

  2. Navigate to Proxy Hosts > Add Proxy Host

  3. Configure the proxy:

    Details Tab:

    FieldValue
    Domain Namesnekzus.yourdomain.com
    Schemehttp
    Forward Hostname/IPYOUR_UNRAID_IP
    Forward Port8080
    Websockets SupportEnabled

    SSL Tab:

    FieldValue
    SSL CertificateRequest a new SSL Certificate
    Force SSLEnabled
    HTTP/2 SupportEnabled
  4. Click Save

  5. Update Nekzus environment variable:

    NEKZUS_BASE_URL=https://nekzus.yourdomain.com

WebSocket Configuration

Nekzus uses WebSocket for real-time updates. Ensure WebSocket support is enabled in your proxy configuration.

For Nginx Proxy Manager, the "Websockets Support" toggle handles this automatically.

For manual Nginx configuration:

location / {
proxy_pass http://YOUR_UNRAID_IP:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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;
}

Reverse Proxy with Traefik

If using Traefik as your reverse proxy:

Docker Labels Method

Add these labels to your Nekzus container:

labels:
- "traefik.enable=true"
- "traefik.http.routers.nekzus.rule=Host(`nekzus.yourdomain.com`)"
- "traefik.http.routers.nekzus.entrypoints=websecure"
- "traefik.http.routers.nekzus.tls.certresolver=letsencrypt"
- "traefik.http.services.nekzus.loadbalancer.server.port=8080"

Via Unraid Docker UI

  1. Edit the Nekzus container
  2. Add labels using the Add another Path, Port, Variable, Label or Device button
  3. Select Label for each entry

Reverse Proxy with Caddy

For Caddy users, add to your Caddyfile:

nekzus.yourdomain.com {
reverse_proxy YOUR_UNRAID_IP:8080
}

Cloudflare Tunnel (Zero Trust)

For remote access without port forwarding:

  1. Install Cloudflare Tunnel container on Unraid
  2. Create a tunnel in Cloudflare Zero Trust dashboard
  3. Add a public hostname pointing to http://YOUR_UNRAID_IP:8080
  4. Update NEKZUS_BASE_URL to your Cloudflare domain

Toolbox Integration

Nekzus includes a Toolbox feature for one-click service deployment. On Unraid, configure it properly:

Host Data Directory

When running Nekzus in Docker, the Toolbox needs to know the host paths for volume mappings:

# In container environment variables
NEKZUS_HOST_DATA_DIR=/mnt/user/appdata/nekzus/data/toolbox

Or in config file:

toolbox:
enabled: true
catalog_dir: "/app/toolbox"
data_dir: "/app/data/toolbox"
host_data_dir: "/mnt/user/appdata/nekzus/data/toolbox"

Adding Custom Templates

Place Docker Compose templates in /mnt/user/appdata/nekzus/toolbox/:

/mnt/user/appdata/nekzus/toolbox/
myservice/
docker-compose.yml

Each template needs proper labels:

services:
myservice:
image: vendor/myservice:latest
labels:
nekzus.toolbox.name: "My Service"
nekzus.toolbox.category: "media"
nekzus.toolbox.description: "Description here"

Troubleshooting

Container Fails to Start

Check container logs:

docker logs nekzus

Common causes:

IssueSolution
Port 8080 in useChange host port mapping or stop conflicting container
Invalid secretsEnsure NEKZUS_JWT_SECRET is 32+ characters
Permission deniedCheck path mappings and Docker socket permissions

Docker Discovery Not Working

Verify Docker socket is mounted:

docker inspect nekzus | grep docker.sock

Check socket permissions:

ls -la /var/run/docker.sock

On Unraid, the Docker socket should be accessible. If using a custom Docker network, ensure the container can reach other containers.

Cannot Access Web UI

  1. Check container is running:

    docker ps | grep nekzus
  2. Verify port mapping:

    docker port nekzus
  3. Check firewall (if enabled):

    Unraid typically does not have a firewall enabled by default. If you have installed one, ensure port 8080 is allowed.

  4. Try accessing directly:

    curl http://localhost:8080/healthz

Services Not Discovered

For Docker containers:

Add discovery labels to your containers:

labels:
nekzus.enable: "true"
nekzus.app.name: "My App"
nekzus.app.id: "myapp"

For mDNS services:

Ensure discovery.mdns.enabled: true in config and that the container has access to the local network (use host networking if needed).

Database Errors

Check data directory permissions:

ls -la /mnt/user/appdata/nekzus/data/

Verify volume mount:

docker inspect nekzus | grep -A5 Mounts

High Memory Usage

Set resource limits in the Docker template:

  1. Edit container in Docker tab
  2. Scroll to Extra Parameters
  3. Add: --memory=512m --memory-swap=1g

Updates

  1. Navigate to Docker tab
  2. Click the Nekzus container icon
  3. Select Check for Updates
  4. If an update is available, click Update

Automatic Updates with Watchtower

Install Watchtower for automatic container updates:

docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--schedule "0 4 * * *" \
nekzus

This checks for updates daily at 4 AM.

Manual Update via CLI

# Pull latest image
docker pull nstalgic/nekzus:latest

# Stop and remove old container
docker stop nekzus
docker rm nekzus

# Recreate with same settings (use your original run command)
docker run -d \
--name nekzus \
... (your configuration)

Version Pinning

For production stability, pin to a specific version:

Repository: nstalgic/nekzus:1.0.0

Check the releases page for available versions.


Backup and Restore

Backup

Nekzus data is stored in /mnt/user/appdata/nekzus/. Include this directory in your Unraid backup strategy.

Manual backup:

# Stop container for consistent backup
docker stop nekzus

# Create backup
tar -czvf nekzus-backup-$(date +%Y%m%d).tar.gz \
/mnt/user/appdata/nekzus/

# Restart container
docker start nekzus

Restore

# Stop container
docker stop nekzus

# Remove existing data (optional)
rm -rf /mnt/user/appdata/nekzus/*

# Restore from backup
tar -xzvf nekzus-backup-YYYYMMDD.tar.gz -C /

# Start container
docker start nekzus

Automated Backups

Nekzus includes built-in backup functionality:

backup:
enabled: true
directory: "/app/data/backups"
schedule: "24h"
retention: 7

Backups are stored in /mnt/user/appdata/nekzus/data/backups/.


Performance Tuning

Resource Allocation

For optimal performance on Unraid:

Container SizeRAMCPU
Small (< 10 services)256 MB0.5 core
Medium (10-50 services)512 MB1 core
Large (50+ services)1 GB2 cores

SSD Storage

For best database performance, place the data directory on an SSD cache pool:

Host Path: /mnt/cache/appdata/nekzus/data

Or use Unraid's cache settings for the appdata share.


Integration with Unraid Services

Homepage Dashboard

Add Nekzus to Homepage:

- Nekzus:
icon: mdi-api
href: http://YOUR_UNRAID_IP:8080
description: API Gateway
widget:
type: customapi
url: http://YOUR_UNRAID_IP:8080/api/v1/admin/info

Uptime Kuma

Monitor Nekzus health:

  • Monitor Type: HTTP(s)
  • URL: http://YOUR_UNRAID_IP:8080/healthz
  • Expected Status: 200

Next Steps