Morok is federated: anyone can run their own relay and stay part of the network. Your server, your rules — messages pass through it and nowhere else.
Do you actually need this? If you just want private conversations, no — the default relay already encrypts everything end-to-end. You need your own server when you would rather not depend even on us: a journalist, an organisation, a community.
relay.yourdomain.com.In your registrar's panel, add an A record:
relay.yourdomain.com → your.server.ip
This is the one thing the script cannot do for you. Give it 5–10 minutes to propagate.
PowerShell on Windows, a terminal on Mac or Linux:
ssh root@your.server.ip
curl -fsSL https://morok.app/install.sh | sudo bash
The script asks for your domain and an email (for the TLS certificate) — nothing else. It then installs the database, Redis and the server, configures nginx, obtains an HTTPS certificate, brings up a Tor address and enables autostart.
If you distrust commands piped from the internet — and you should — open morok.app/install.sh in your browser first and read it: the script is served as plain text.
In Morok on Windows or Android: Settings → Network → Your relay
→ paste https://relay.yourdomain.com.
The app checks the server and shows its name and version before connecting. You can switch back to the default relay at any time in the same place.
Back up /home/morok/morok-relay/.env right away — it holds
the key that is your relay's permanent identity in the federation. Lose it and other
servers will stop recognising yours.
Your 24 words are your key across the whole network, not tied to any server. But a username is claimed separately on each relay, and messages sent to your previous server stay there. So switch deliberately, not just to see what happens.
For your users to reach people on other relays, two operators introduce their servers to each other. Each runs this on their own:
cd /home/morok/morok-relay
sudo -u morok .venv/bin/python -m morok_relay.scripts.federate relay.other-server.com
The command prints a fingerprint — eight groups of four digits. Compare it with the other operator over a separate channel (a call, Signal, anything but the relays themselves). If it matches:
sudo -u morok .venv/bin/python -m morok_relay.scripts.federate --trust relay.other-server.com
Verifying the fingerprint is not a formality. The handshake proves only that someone on the other side holds the key — not that it is the server you meant. It is the same principle as comparing safety numbers in a messenger.
To see all peers and their status: federate --list.
Updates and upkeep are automated. Useful commands:
systemctl status morok-relay
journalctl -u morok-relay -f
Re-running the installer is safe: it preserves your keys and database, updating only what needs updating.
https://relay.yourdomain.com/health.