System requirements

The server, ports, database and secrets Nasnet Linux needs before you install it.

Last updated Aug 17, 2026View as Markdown

Overview

Nasnet Linux runs on one 64-bit Linux server and keeps everything on it, meaning the panel, the database, and the Xray-core process it supervises. There is no fleet and no second machine to provision. What you actually have to decide before installing is the database, whether you have a domain, and which ports you can open.

The server

Requirement Value
Operating system 64-bit Linux
Architecture amd64 or arm64
Access root or sudo
Panel port One free inbound port, 9761 by default
Inbound ports Whatever your proxy inbounds will listen on, open separately
Outbound Needed for ACME certificates and image pulls; the offline bundle removes this

The release binaries are static and built without CGO, so there is no distribution-specific runtime to install. A domain pointed at the server is strongly recommended rather than strictly required, for the reason given below.

Supported devices

Two different sets of devices matter here. The server is the machine that runs the panel. The clients are what your subscribers use to consume the proxy access it hands out.

Servers

Platform Supported Notes
Linux amd64 Yes The common case. Release binaries and Docker images both cover it.
Linux arm64 Yes Fully supported, including on ARM VPS instances.
Linux 32-bit No No 32-bit builds are published.
macOS or Windows No The panel supervises a local Xray process and expects Linux.

Any distribution works, because the release binaries are static and built without CGO. There is nothing distribution-specific to install alongside them.

Client apps

Subscribers do not install anything of yours. They paste a /sub/{key} link into a normal proxy client, and the server tailors its response to whichever client asked by inspecting the User-Agent.

Client Typical platform
v2rayNG Android
v2rayN Windows
Clash and Clash-family clients Android, Windows, macOS, Linux
sing-box Android, iOS, desktop
Shadowrocket iOS

One link works across all of them, so a subscriber never has to pick a format by hand. Clients outside this list still work if they understand the standard base64 subscription format, but they receive the generic response rather than a tailored one. A subscriber who opens the link in a browser gets the subscriber panel instead.

Database

Pick one before you install; switching later means a migration.

Option When to use it Setting
PostgreSQL 16 Production. The default, and what Docker Compose brings up. DB_DRIVER=postgres
SQLite Trials and small single-server setups. No database container. DB_DRIVER=sqlite, DB_PATH=/app/data/nasnet_panel.db

Schema migrations run automatically on every startup, so an upgrade is usually just a new binary and a restart. Take a backup first regardless.

TLS and cookies

You can run on a bare IP over plain HTTP for testing, but the panel’s session cookies are Secure cookies: without HTTPS, logins will not stick. For anything you intend to use, either point a domain at the server and let the built-in ACME client issue a certificate, or terminate TLS in a proxy in front of the panel.

Automatic issuance needs ACME_EMAIL set, because issuance is disabled without it.

For a Docker install

Requirement Value
Docker Engine Current release
Compose plugin Required, since the repository ships a docker-compose.yml
Services started The app, PostgreSQL 16, and Prometheus
Volumes postgres_data, acme_data, prometheus_data, and a bind mount for backups

Secrets you must generate

Every install path needs these, whichever way you deploy. The guided installer generates them for you; otherwise:

# JWT secret, which must be at least 32 characters
openssl rand -hex 32

# Admin password as a bcrypt hash, not plaintext
htpasswd -nbBC 10 "" "your-password" | tr -d ':\n' | sed 's/$2y/$2a/'

ADMIN_PASSWORD_HASH holding a plaintext password is the single most common reason a fresh install will not let you log in.

Building from source

Only needed for development. The web panel is embedded into the binary with go:embed, so it has to be built before go build. Use the make targets rather than calling go build directly.

Requirement Value
Go 1.26 or newer
Node.js 22 or newer
Package manager pnpm