Run r3v3rs3 in one container with two volumes

Installing with Docker

One container runs r3v3rs3. Two volumes keep the configuration and the data, so an upgrade replaces only the image.

The image is ghcr.io/kilimcininkoroglu/r3v3rs3. It is a distroless image: it holds the r3v3rs3 binary and no shell, so docker exec runs r3v3rs3 and no other program.

Step 1: Start the Container

$ docker run -d \
  -v r3v3rs3-config:/root/.config/r3v3rs3 \
  -v r3v3rs3-data:/root/.local/share/r3v3rs3 \
  -p 80:80 \
  -p 443:443 \
  -p 127.0.0.1:46492:46492 \
  --restart unless-stopped \
  --stop-signal SIGINT \
  --name r3v3rs3 \
  ghcr.io/kilimcininkoroglu/r3v3rs3:latest

Each option does one thing:

OptionReason
-v r3v3rs3-config:/root/.config/r3v3rs3The accounts, the proxies, the certificates and the ACME entries. Without it, a new container starts empty.
-v r3v3rs3-data:/root/.local/share/r3v3rs3log.db, which holds the audit log.
-p 80:80 -p 443:443The ports that your proxies use. Publish every port that you add in the WebUI.
-p 127.0.0.1:46492:46492The admin panel, on the host only. The image starts with --webui 0.0.0.0:46492, so the container listens on every interface and this binding limits it.
--stop-signal SIGINTr3v3rs3 shuts down gracefully on SIGINT. Without it, docker stop waits ten seconds and then kills the process.
--restart unless-stoppedThe container starts again after a reboot.

Step 2: Create the Admin Account

$ docker exec -t -i r3v3rs3 r3v3rs3 add-user admin
password?: ******

The password needs at least 8 characters. Open http://localhost:46492/ and sign in.

On a remote host, reach the panel through SSH instead of publishing its port:

$ ssh -L 46492:127.0.0.1:46492 user@your-server

Step 3: Add a Port

A proxy needs a port, and the container needs to publish it.

  1. Add a port in the WebUI, for example 0.0.0.0:80 with the protocol HTTP.
  2. Check that -p 80:80 of Step 1 publishes it.

A port that the container does not publish listens inside the container only. Docker cannot add a published port to a running container, so docker rm and docker run it again with the new -p option. The volumes keep everything.

Getting Started continues with the first proxy.

Docker Compose

The repository holds a docker-compose.yml with host networking:

$ curl -fsSLO https://raw.githubusercontent.com/KilimcininKorOglu/r3v3rs3/main/docker-compose.yml
$ docker compose up -d
$ docker compose exec r3v3rs3 r3v3rs3 add-user admin

Host networking publishes no port, so every port that you add in the WebUI listens on the host at once. It works on a Linux Docker host only. Two variables in a .env file next to the file change the setup:

Upgrade

$ docker pull ghcr.io/kilimcininkoroglu/r3v3rs3:latest
$ docker rm -f r3v3rs3
$ docker run -d ... # the same command as Step 1

With Compose:

$ docker compose pull
$ docker compose up -d

The volumes keep the configuration and the accounts, so no account is created again. Pin a version with the tag, for example :1.0.1, when you upgrade several hosts in steps.

What a Restart Does

Next Steps