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.
Be sure to change the default credentials in the environment variables.
Installation
Main Panel
This guide written for Ubuntu 22.04, instructions may vary for other distributions.
- First of all, you need to install docker.
sudo curl -fsSL https://get.docker.com | sh
- Create separate directory for the project.
mkdir /opt/remnawave && cd /opt/remnawave
- Download and configure the environment variables.
curl -o .env https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/.env.sample
- Configure the environment variables.
nano .env
- Create
docker-compose.yml
file, example below.
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.
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
- Run containers.
docker compose up -d
- Check the logs.
docker compose logs -f
- Remnawave is now running on
http://127.0.0.1:3000
.
Now we are ready to move on the Reverse Proxy installation.