RelayKit
Docs

Install

Get RelayKit running — one command on any VPS for production, or a local Docker stack with real HTTPS for development.

Requirements

  • A server (or local machine) with Docker installed
  • A Nostr pubkey you control (signable with a NIP-07 extension like Alby or nos2x)
  • For production: a domain, ports 80/443 open

Server install

Paste your npub (or read it from your extension), pick RelayKit’s domain, copy, run:

  1. Run the command on any fresh VPS — Vultr, DigitalOcean, Hetzner, even one you pay for in bitcoin.
  2. Point your domain’s A record at the server (and keep it un-proxied until the certificate issues — Traefik gets Let’s Encrypt automatically).
  3. Open your domain. Sign in with your Nostr extension.

Local install

The installer targets production; for local development, start the stack yourself:

cp .env.example .env                       # dev defaults are fine as-is
docker network create dokploy-network      # one-time, dev only
docker compose --profile dev up

Then provision auth with your npub (Dokploy comes up at localhost:3020, RelayKit at localhost:5173):

OWNER_NPUB=npub1your... ADMIN_PASSWORD=your_secure_password ./scripts/setup-relaykit-auth.sh

Local HTTPS on any domain

Local doesn’t have to mean localhost. With mkcert, https://reallyrelay.io can resolve to your machine — a proper nostr testnet.

brew install mkcert && mkcert -install
cp scripts/dev-domains.example.txt scripts/dev-domains.txt
  1. Add the domain to /etc/hosts and scripts/dev-domains.txt
  2. Run ./scripts/gen-dev-certs.sh (restart compose if it’s running)
  3. Create the service with that hostname — TLS is automatic (Caddy serves your mkcert certs)

Deploy your first service

  1. Pick a preset — hit Add service and choose from the catalog (start with strfry)
  2. Fill in its config — each preset mainly asks for its domain (e.g. relay.example.com); make sure DNS points at your server
  3. Deploy — certificates, routing and startup are handled for you
  4. Watch it come up — the card reflects real status; check health & logs if anything looks off

Then point a client at wss://relay.example.com and post.