Skip to content

Installation

Relay is distributed as a container image and as a standalone server binary. Current packages and the stable version are listed on the Relay Download page; use a versioned image tag for reproducible deployments.

Docker

The examples use the 0.11 stable release channel, which follows patch releases such as 0.11.2. Pin an exact patch tag when reproducibility is required. The latest tag is a direct master build: bleeding-edge and less tested, not the stable channel.

Relay stores its data in /var/opt/relay and runs as UID 1000 in the container.

mkdir -p data
sudo chown -R 1000:1000 data
docker pull git.thc420.dev/ouch/relay:0.11
docker run -d \
  --name relay \
  -p 9000:9000 \
  -v "$PWD/data:/var/opt/relay" \
  --restart unless-stopped \
  git.thc420.dev/ouch/relay:0.11

The ownership command assumes a rootful Docker installation with direct UID mapping. For rootless or user-namespaced Docker, provision the bind mount for the container's effective UID, use an ACL, or choose a named volume.

For an existing installation, set RELAY_HOME explicitly and mount that directory. Standalone fallback checks for legacy config.yaml; the audited container entrypoint still checks legacy config.js. Do not rely on automatic detection to migrate data. Convert legacy JavaScript configuration using migrate-config, then review the YAML before starting.

Docker Compose

Create docker-compose.yml:

services:
  relay:
    image: ${RELAY_IMAGE:-git.thc420.dev/ouch/relay:0.11}
    container_name: relay
    ports:
      - "9000:9000"
    volumes:
      - ./data:/var/opt/relay
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:9000/"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 15s

Then validate and start it:

mkdir -p data
docker compose config
docker compose up -d

To use another release, set RELAY_IMAGE to the complete image and version before starting Compose.

Named volume alternative

Replace the bind mount with relay-data:/var/opt/relay and add:

volumes:
  relay-data:

Switching mount types does not copy data. Back up and migrate it explicitly, and avoid docker compose down -v unless you intend to delete the named volume.

Verify the server

For Linux x86-64 without Docker, the 0.11.2 server archive includes the binary and production client assets. Extract it, enter relay-linux-amd64, and run ./relay start. Keep public/ beside the binary and run from that directory, including when configuring a service.

Container startup

Follow the container logs until Relay is ready:

docker logs -f relay

Open http://localhost:9000 locally, or put Relay behind an HTTPS reverse proxy before exposing it publicly. Continue with First administrator.

For PostgreSQL and retention, see Storage and retention. To compile Relay yourself, see Development.

Follow Backup, restore, and upgrades for subsequent releases.