Skip to content

Remnawave on a VPS

Xray panel with nodes

Category
VPN / Proxy
Hosting
VPN server
Author
Remnawave
License
AGPL-3.0
Version
3.4.4

The script is free · VPS from $10.20 per month · installs in about 3 minutes

Install over SSH

root@vps:~# command -v docker >/dev/null || curl -fsSL https://get.docker.com | sh; mkdir -p /opt/remnawave && cd /opt/remnawave && curl -o docker-compose.yml https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/docker-compose-prod.yml && curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sample && sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 64)/" .env && sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 64)/" .env && sed -i "s/^WEBHOOK_SECRET_HEADER=.*/WEBHOOK_SECRET_HEADER=$(openssl rand -hex 64)/" .env && pw=$(openssl rand -hex 24) && sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env && sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^\@]*\(@.*\)|\1$pw\2|" .env && docker compose up -d

  • SystemUbuntu 24.04 · x86_64ok
  • Sourcegithub.com/remnawave/panelok
  • Version3.4.4ok
  • Port3000/tcplisten
  • Port3001/tcplisten
  • Port443/tcplisten

✓ Remnawave 3.4.4 installed · about 3 minutes

root@vps:~#

Install command from the library. Output is shortened and may differ on your server.

What it is

  • Xray
  • VLESS
  • Subscriptions
  • Multi-server
  • API

Remnawave is an Xray-core proxy management panel for those who sell access or run many servers. The panel and nodes are separate: users, subscriptions and statistics live in the panel, Xray runs on the nodes.

The panel runs in Docker alongside PostgreSQL and Valkey and listens only on 127.0.0.1, so it is exposed through a reverse proxy with HTTPS. Remnawave Node instances are installed on separate servers and connected from the UI.

The project is actively developed and offers an API and SDK for integrating with Telegram bots and billing.

  • Split into a panel and nodes running Xray-core
  • Subscriptions with a dedicated client page
  • Limits on traffic, time and devices (HWID)
  • REST API and SDK for bots and billing
  • Configuration profiles for node groups
  • User and node statistics and metrics

Recommended plan

For Remnawave: at least 4 vCPU, 4 GB RAM and 100 GB NVMe.

Minimum to run
2 vCPU · 2 GB RAM · 20 GB disk
Systems
Ubuntu 22.04 · Ubuntu 24.04 · Debian 12

How to install

Three steps in the bot or one command over SSH; installation takes about 3 minutes.

  1. 01

    Choose a plan in the bot

    Open @ExpressHost_bot and pay for a VPS. The server will be ready in about 60 seconds.

  2. 02

    Add Remnawave

    At the “Add-ons” step pick the script from the library, or run it later: Server settings → Scripts.

  3. 03

    Finish the setup

    In /opt/remnawave/.env set FRONT_END_DOMAIN (panel domain) and SUB_PUBLIC_DOMAIN (domain/api/sub), then run docker compose up -d

Manually over SSH

Connect to the server as root and run the command. Supported systems: Ubuntu 22.04, Ubuntu 24.04, Debian 12.

Install command
command -v docker >/dev/null || curl -fsSL https://get.docker.com | sh; mkdir -p /opt/remnawave && cd /opt/remnawave && curl -o docker-compose.yml https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/docker-compose-prod.yml && curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sample && sed -i "s/^APP_SECRET=.*/APP_SECRET=$(openssl rand -hex 64)/" .env && sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 64)/" .env && sed -i "s/^WEBHOOK_SECRET_HEADER=.*/WEBHOOK_SECRET_HEADER=$(openssl rand -hex 64)/" .env && pw=$(openssl rand -hex 24) && sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env && sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^\@]*\(@.*\)|\1$pw\2|" .env && docker compose up -d

Ports

Remnawave ports
PortProtocolPurpose
3000tcpPanel and API (127.0.0.1 only, exposed via reverse proxy)
3001tcpMetrics (127.0.0.1 only)
443tcpReverse proxy HTTPS in front of the panel

After installation

  1. 1.In /opt/remnawave/.env set FRONT_END_DOMAIN (panel domain) and SUB_PUBLIC_DOMAIN (domain/api/sub), then run docker compose up -d
  2. 2.Set up a reverse proxy (Caddy or Nginx) with HTTPS to 127.0.0.1:3000 — the panel won't open without it
  3. 3.Open https://your-domain and register the first admin
  4. 4.Add a node: Nodes → Management, copy docker-compose.yml and run it on the node server in /opt/remnanode

Remnawave FAQ

Didn’t find an answer? Message @ExpressHost_SupportBot.

What server does the panel need?

The documentation requires at least 2 cores and 2 GB RAM and recommends 4 cores and 4 GB. A node needs 1 core and 1 GB, but Xray uses more under load.

Can I run the panel and a node on the same server?

You can, but the developers recommend putting the node on a separate server: the panel itself has no Xray.

How do I update Remnawave?

cd /opt/remnawave && docker compose pull && docker compose down && docker compose up -d. Update the panel first, then the nodes.

Where is the data stored?

Settings are in /opt/remnawave/.env, the PostgreSQL database is in a Docker volume next to the project. Dump the database before updating.

Remnawave installs at checkout — in the bot.