Installation

Three ways to get Nasnet Panel running, using Docker, the RouterOS install script, or the graphical installer.

Last updated Aug 14, 2026View as Markdown

Overview

Nasnet Panel ships as a single multi-arch container image that serves both the JSON API and the web UI on one port. There are three supported ways to get it running: plain Docker on any host, the install.sh script that deploys it into a RouterOS container on the router itself, and a graphical installer for Windows and macOS that does the same thing without a terminal.

Pick Docker if you already run containers somewhere on the LAN. Pick the script or the graphical installer if you want the panel to live on the MikroTik device it manages.

Before you start

  • The panel must be able to reach your routers on the LAN.
  • RouterOS v7 on the routers you intend to manage.
  • For a router-hosted install: the container package installed and enabled, container device-mode enabled, external storage (disk1/ by default), at least 30 MB of free RAM, and an arm, arm64 or x86_64 board.
  • Enabling container device-mode for the first time requires physical confirmation, meaning a short press of the reset/mode button, or a cold power cycle on boards without one.
  • For the script: bash, curl, ssh, scp and sha256sum (or shasum) on the machine you run it from, plus the router reachable on ports 8291 and 22.

Steps

Docker

  1. Run the image, mapping a host port onto the container’s port 80.

    docker run -d \
      --name nasnet \
      -p 8080:80 \
      --restart unless-stopped \
      ghcr.io/nasnet-community/nasnet-panel:latest
  2. Open http://localhost:8080.

  3. If the container needs to reach routers on your LAN directly, use host networking instead:

    docker run -d --name nasnet --network=host --restart unless-stopped \
      ghcr.io/nasnet-community/nasnet-panel:latest

    The equivalent compose service:

    services:
      nasnet:
        image: ghcr.io/nasnet-community/nasnet-panel:latest
        container_name: nasnet
        network_mode: host
        environment:
          PORT: 80
        restart: unless-stopped

On the router, with install.sh

  1. Run the script. Interactively it prompts for the router IP, user and password:

    bash scripts/install.sh
  2. Or pass an env-style config file so it runs unattended:

    cat > router.env <<'EOF'
    ROUTER_IP=192.168.88.1
    ROUTER_USER=admin
    ROUTER_PASS=secret
    EOF
    bash scripts/install.sh --config router.env
  3. Wait for the health check. The script probes Winbox (8291) and SSH (22), checks the RouterOS version, architecture, free RAM and container support, downloads and verifies the container tar for the detected architecture, configures container networking, uploads the tar to disk1/, starts the container, and polls /health for up to 120 seconds.

  4. Open http://<router-ip>:8080/. If the baseline LAN step ran, the panel is at http://192.168.10.1:8080/ instead, so reconnect or renew your DHCP lease first.

To remove everything again:

bash scripts/install.sh --uninstall --config router.env

With the graphical installer

  1. Download nasnet-panel-installer-windows-amd64.exe or nasnet-panel-installer-macos-universal.dmg from the release you want.
  2. Fill in Router IP or hostname, User and Password.
  3. Open Advanced options if you need to change Winbox port, SSH port, HTTP LAN port, HTTPS LAN port, or the Image source (Latest snapshot, Release tag, or a Local tar).
  4. Click Install and leave it running. If the router asks for physical confirmation of device-mode, the installer shows Physical confirmation required, so press the reset button or power-cycle the router, then Proceed.

Reference

install.sh flags

Flag What it does Default
--dry-run Prints every action it would take and changes nothing. off
--uninstall Removes the container, networking, NAT rules and uploaded tarball. off
--config <file> Reads ROUTER_IP, ROUTER_USER, ROUTER_PASS from an env-style file. None
--version <tag> Release tag to install. snapshot
--image-tar <path> Uses a local tar instead of downloading a release asset. None
--lan-port <port> LAN-facing port for the dst-nat rule. 8080
--no-lan-baseline Skips the baseline LAN setup. off
--no-rollback Leaves partial state in place on failure. off
-v, --verbose Verbose output. off
-h, --help Shows usage. None

Backend environment variables

Variable What it does Default
PORT TCP port the API and embedded SPA listen on. 8080 in dev, 80 in the container
HOST Bind address. 0.0.0.0
ENVIRONMENT production disables dev-only routes such as the Swagger UI. development
BACKEND_URL Build-time. Empty means the SPA uses relative URLs to its own origin. empty
SENTRY_DSN Build-time. Where the UI sends crash reports; set to an empty string to compile reporting out. Nasnet project DSN

Troubleshooting

The script stops on device-mode. RouterOS requires physical confirmation the first time container device-mode is enabled. Press the reset/mode button briefly, or unplug and replug the router, then run the script again.

The panel is unreachable after the script finishes. The baseline LAN step moves the router’s LAN onto LANBridgeSplit at 192.168.10.1/24. Renew your DHCP lease and try http://192.168.10.1:8080/.

The container starts and then dies. The router needs at least 30 MB of free RAM for the panel. Check /system/resource/print and stop other containers.