System requirements
The server, ports, database and secrets Nasnet Linux needs before you install it.
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 |