nova-tor-relay
Lightweight Tor relay with auto config, env support, and persistent identity.
7.9K
Minimal, opinionated Docker image to run a secure Tor relay.
Image: nullusionist/nova-tor-relay
Repo ships
compose.yaml.exampleand.env.example. Copy both, tweak email, and start.cp .env.example .env cp compose.yaml.example compose.yaml docker compose up -d
Create .env
CONTACT is required.[email protected]
BANDWIDTH_LIMIT=100 KB
BANDWIDTH_BURST=200 KB
# ...more optional vars commented below
CONTACT to your email.Start
docker compose up -d
Check logs
docker logs -f --tail 200 nova-relay
Your relay will appear on: https://metrics.torproject.org/rs.html
State:
/var/lib/toris persisted in thetor-datavolume (keeps relay identity).
Ports: exposes 9001/tcp (ORPort) and 9030/tcp (DirPort). ControlPort is off unless you set it.
compose.yaml (uses .env variables)services:
relay:
image: nullusionist/nova-tor-relay:latest
container_name: nova-relay
ports:
- "9001:9001" # ORPort
- "9030:9030" # DirPort
- "9051:9051" # ControlPort
volumes:
- tor-data:/var/lib/tor
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
environment:
CONTACT: ${CONTACT}
BANDWIDTH_LIMIT: ${BANDWIDTH_LIMIT:-100 KB}
BANDWIDTH_BURST: ${BANDWIDTH_BURST:-200 KB}
NICKNAME: ${NICKNAME:-}
OR_PORT: ${OR_PORT:-9001}
DIR_PORT: ${DIR_PORT:-9030}
CONTROL_PORT: ${CONTROL_PORT:-}
EXIT_RELAY: ${EXIT_RELAY:-0}
EXIT_POLICY: ${EXIT_POLICY:-}
ACCOUNTING_START: ${ACCOUNTING_START:-}
ACCOUNTING_MAX: ${ACCOUNTING_MAX:-}
TOR_EXTRA_LINES: ${TOR_EXTRA_LINES:-}
# Optional self-updating Watchtower for automatic updates
# watchtower:
# image: containrrr/watchtower
# container_name: watchtower
# restart: unless-stopped
# labels:
# - "com.centurylinklabs.watchtower.enable=true"
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# command: --label-enable --cleanup --interval 300
volumes:
tor-data:
Required
CONTACT — abuse/contact email for directory listing.Auto-generated if empty
NICKNAME — random stable nickname persisted under /var/lib/tor.Bandwidth
BANDWIDTH_LIMIT (default 100 KB)BANDWIDTH_BURST (default 200 KB)Ports (defaults if unset)
OR_PORT=9001, DIR_PORT=9030, SOCKS_PORT=0ControlPort (off unless both set)
CONTROL_PORT (e.g. 0.0.0.0:9051) and COOKIE_AUTH=1Exit Relay (opt-in)
EXIT_RELAY=1, EXIT_POLICY=accept *:* (use with care)Accounting (optional)
ACCOUNTING_START, ACCOUNTING_MAXExtras
TOR_EXTRA_LINES — injected verbatim into torrc (use \n for newlines)Published for linux/amd64 and linux/arm64:
latest → current release (multi‑arch manifest)X.Y.Z → pinned Tor version (multi‑arch), e.g. 0.4.8.17X.Y.Z-<codename> → Tor + Debian codename (multi‑arch), e.g. 0.4.8.17-trixielatest-amd64, latest-arm64, plus X.Y.Z[-codename]-amd64|arm64Examples:
docker pull nullusionist/nova-tor-relay:latest
docker pull nullusionist/nova-tor-relay:0.4.8.17
docker pull nullusionist/nova-tor-relay:0.4.8.17-trixie
docker pull --platform=linux/amd64 nullusionist/nova-tor-relay:latest
docker pull --platform=linux/arm64 nullusionist/nova-tor-relay:latest
Verify multi‑arch:
docker buildx imagetools inspect nullusionist/nova-tor-relay:latest
Running an exit node has legal/abuse implications. Exit mode is off by default. Enable EXIT_RELAY=1 only if you understand the risks and policies.
The service is labeled for Watchtower. If you do not run a separate Watchtower instance, just uncomment the container in the compose provided.
MIT
Content type
Image
Digest
sha256:04eb91f83…
Size
42.2 MB
Last updated
4 days ago
docker pull nullusionist/nova-tor-relay:0.4.9.11-trixie