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:
- Run the command on any fresh VPS — Vultr, DigitalOcean, Hetzner, even one you pay for in bitcoin.
- Point your domain’s A record at the server (and keep it un-proxied until the certificate issues — Traefik gets Let’s Encrypt automatically).
- 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 - Add the domain to
/etc/hostsandscripts/dev-domains.txt - Run
./scripts/gen-dev-certs.sh(restart compose if it’s running) - Create the service with that hostname — TLS is automatic (Caddy serves your mkcert certs)
Deploy your first service
- Pick a preset — hit Add service and choose from the catalog (start with strfry)
- Fill in its config — each preset mainly asks for its domain (e.g.
relay.example.com); make sure DNS points at your server - Deploy — certificates, routing and startup are handled for you
- 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.