Files
nostermd-relay/docker-compose.yml
T
rgoodall 294616642f
ci / build (push) Successful in 2m3s
ci / image (push) Successful in 1m4s
initial public relay build repo
2026-07-24 13:11:06 -04:00

45 lines
1.9 KiB
YAML

# Standalone Nosterm home relay deployment.
#
# Runs ONLY the relay: a minimal NIP-29 managed-group Nostr relay with the
# Nosterm capability handshake. It listens on port 3334 and persists its BoltDB
# event store to a named volume so rooms/messages survive restarts.
#
# cp .env.example .env # then set RELAY_SECRET_KEY (see .env.example)
# docker compose up -d --build
services:
relay:
build:
context: .
image: nostermd:latest
environment:
# Stable 64-char hex identity that signs group metadata/rosters. REQUIRED
# when RELAY_ENV=production (the relay refuses to start without it, since a
# fresh key each boot corrupts signed rosters). In dev it is persisted to
# the data volume automatically. Generate with: openssl rand -hex 32
RELAY_SECRET_KEY: ${RELAY_SECRET_KEY:-}
RELAY_ENV: ${RELAY_ENV:-}
RELAY_NAME: ${RELAY_NAME:-Nosterm Home Relay}
RELAY_DESCRIPTION: ${RELAY_DESCRIPTION:-}
RELAY_CONTACT: ${RELAY_CONTACT:-relay@nosterm.com}
RELAY_MOTD: ${RELAY_MOTD:-}
# Retention: prune old CHAT messages so the store doesn't grow unbounded.
# 0 = unlimited. Group membership/metadata is never pruned.
RELAY_RETENTION_DAYS: ${RELAY_RETENTION_DAYS:-0}
RELAY_RETENTION_MAX_MESSAGES: ${RELAY_RETENTION_MAX_MESSAGES:-0}
RELAY_RETENTION_INTERVAL_MINUTES: ${RELAY_RETENTION_INTERVAL_MINUTES:-60}
# Optional federation: mirror/ingest NIP-29 CHAT with peer relays. Empty =
# disabled. Format: "url|mode:channels" entries separated by ';', where
# mode is mirror (bidirectional) or ingest (read-only) and channels is a
# comma list or '*'. e.g.
# wss://peer-a.example|mirror:general,dev;wss://peer-b.example|ingest:*
RELAY_FEDERATION_PEERS: ${RELAY_FEDERATION_PEERS:-}
volumes:
- relay-data:/data
ports:
- '3334:3334'
restart: unless-stopped
volumes:
relay-data: