Skip to main content

Quick start

Installation

Remnawave consists of two parts:

  • Main panel (aka backend)
  • Node (with XRay Core inside)

You can install both parts on the same machine or separate machines.

Minimum requirements for Backend:

  • 2GB of RAM
  • 2 CPU cores
  • Docker Engine

Minimum requirements for Node:

  • 1GB of RAM
  • 1 CPU core
  • Docker Engine

Configuration

First of all, you need to configure the environment variables.

You can find the list of all environment variables in the Environment Variables page.

warning

Be sure to change the default credentials in the environment variables.

Installation

Main Panel

info

This guide written for Ubuntu 22.04, instructions may vary for other distributions.

  1. First of all, you need to install docker.
sudo curl -fsSL https://get.docker.com | sh
  1. Create separate directory for the project.
mkdir /opt/remnawave && cd /opt/remnawave
  1. Download and configure the environment variables.
curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sample
  1. Configure the environment variables.
nano .env
  1. Create docker-compose.yml file, example below.
danger

Do not expose the services to the public internet, use only 127.0.0.1 for Remnawave services.

You must use Nginx/Caddy/Apache/etc. to expose the services to the public internet.

This guide does not cover the configuration of the reverse proxy, but just a bit later we will use Cloudflare Tunnel to expose the services to the public internet.

docker-compose.yml
services:
remnawave-db:
image: postgres:17
container_name: 'remnawave-db'
hostname: remnawave-db
restart: always
env_file:
- .env
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
- TZ=UTC
ports:
- '127.0.0.1:6767:5432'
volumes:
- remnawave-db-data:/var/lib/postgresql/data
networks:
- remnawave-network
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
interval: 3s
timeout: 10s
retries: 3

remnawave:
image: remnawave/backend:latest
container_name: 'remnawave'
hostname: remnawave
restart: always
ports:
- '127.0.0.1:3000:3000'
env_file:
- .env
networks:
- remnawave-network
depends_on:
remnawave-db:
condition: service_healthy
remnawave-redis:
condition: service_healthy

remnawave-redis:
image: valkey/valkey:8.0.2-alpine
container_name: remnawave-redis
hostname: remnawave-redis
restart: always
networks:
- remnawave-network
volumes:
- remnawave-redis-data:/data
healthcheck:
test: ['CMD', 'valkey-cli', 'ping']
interval: 3s
timeout: 10s
retries: 3

networks:
remnawave-network:
name: remnawave-network
driver: bridge
external: false

volumes:
remnawave-db-data:
driver: local
external: false
name: remnawave-db-data
remnawave-redis-data:
driver: local
external: false
name: remnawave-redis-data
  1. Run containers.
docker compose up -d
  1. Check the logs.
docker compose logs -f
  1. Remnawave is now running on http://127.0.0.1:3000.

Now we are ready to move on the Reverse Proxy installation.

danger

Do not expose the services to the public internet, use only 127.0.0.1 for Remnawave services.

You must use Nginx/Caddy/Apache/etc. to expose the services to the public internet.