Run a Nostr relay for the Satori Network with NIP-11 identity binding.
This setup runs a strfry Nostr relay behind nginx. Nginx serves a NIP-11 document with the self field set to your neuron's Nostr public key, binding the relay to your neuron identity.
Central Server ──fetch NIP-11──→ nginx ──→ nip11.json (self = your nostr pubkey)
Nostr Clients ──WebSocket───→ nginx ──→ strfry relay
- Copy the example environment file:
cp .env.example .env- Set your neuron's Nostr public key in
.env:
NOSTR_PUBKEY=a1b2c3d4... # 64 lowercase hex characters
- Start the relay:
docker compose up -d- Verify NIP-11 is served correctly:
curl -H "Accept: application/nostr+json" http://localhost:7777You should see:
{
"name": "Satori Relay",
"description": "A Satori Network relay",
"self": "a1b2c3d4...",
...
}- Register your relay URL with the Satori central server via the neuron UI.
A relay is reward-eligible when:
The relay's NIP-11
selffield equals the Nostr public key associated with your neuron.
This binds: Relay → NIP-11 self → Nostr Public Key → Neuron (via Identity Wallet)
| Variable | Required | Description |
|---|---|---|
NOSTR_PUBKEY |
Yes | Your neuron's Nostr public key (64 hex chars) |
RELAY_NAME |
No | Relay display name (default: "Satori Relay") |
RELAY_DESCRIPTION |
No | Relay description |
RELAY_CONTACT |
No | Admin contact (email or URL) |
RELAY_PORT |
No | Port to expose (default: 7777) |
For production, put a reverse proxy (Caddy, nginx, etc.) in front to handle SSL:
Internet → Caddy (SSL termination) → this relay (port 7777)
Your relay URL for registration would be wss://your-domain.com.
docker compose
├── init (generates nip11.json from NOSTR_PUBKEY, runs once)
├── strfry (Nostr relay, port 7777 internal)
└── nginx (reverse proxy, serves NIP-11 + proxies WebSocket)