# 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: