Files
sepot/deploy/relay
Julius Joska 8081d98c67 Šepot — end-to-end encrypted messenger
Initial public release. Anonymous on-device identity (no phone number,
e-mail, or password), Signal-protocol cryptography (X3DH + PQXDH, Double
Ratchet, sealed sender) via libsignal, a metadata-minimizing relay,
group chats, disappearing messages, encrypted local storage, optional
Tor transport, and a UI localized into Czech, English, German, Russian,
and Italian.

Monorepo: Flutter client (app/), Rust relay + wire types (rust/),
protobuf definitions (proto/), self-host deploy (deploy/).

Licensed under AGPL-3.0 with an app-store distribution exception (§7).
2026-07-11 17:21:47 +02:00
..

sepot-relay — self-hosting

Relay je „hloupý" doručovací server: přijímá a doručuje opaque sealed-sender obálky, drží offline frontu (TTL) a šifrované bloby příloh. Nevidí obsah ani odesílatele, neváže identitu na telefon/e-mail a neloguje IP.

Stack: sepot-relay (Rust/axum) + PostgreSQL + volitelný Tor onion.

Rychlý start

cd deploy/relay
cp .env.example .env
# vyplň POSTGRES_PASSWORD, např.:  openssl rand -base64 24
docker compose build
docker compose up -d

TLS/WSS neterminuje relay sám — postav před něj reverzní proxy (Caddy, Traefik, nginx…) s platným certifikátem, která forwarduje na sepot-relay:8470. Uvnitř sítě jede plain WS (proxy dělá TLS termination). Klient se pak připojuje na wss://<tvoje-doména>.

Ověření

curl -s http://127.0.0.1:8470/v1/health        # {"status":"ok"}
curl -s http://127.0.0.1:8470/v1/server-info    # capabilities + trust_root

Tor onion (volitelné)

Compose obsahuje kontejner tor, který relay vystaví jako onion hidden service. Adresu zjistíš po startu:

docker exec sepot-relay-tor cat /var/lib/tor/sepot/hostname

Tuhle .onion adresu pak nastav v klientu (app/lib/core/constants/app_constants.dart, AppConstants.relayOnion) pro svůj vlastní build.

Konfigurace (.env)

Proměnná Popis
POSTGRES_PASSWORD heslo DB — povinné, nikdy necommituj
SEPOT_APNS_* volitelné, jen pro iOS APNs push (Key ID, Team ID, cesta ke klíči)
FCM service account volitelné, jen pro Android FCM „fast mode" (mimo repo)

Push je volitelný. Bez něj appka funguje přes UnifiedPush (degooglované) nebo si zprávy stáhne po otevření.

Persistentní data a zálohy

Zálohuj dvě volumes, obě obsahují kritické tajné klíče (chmod 600):

  • db-data — kromě dat drží relay_keys = trust root CA sealed senderu. Klienti si ho pinují. Jeho ztráta / regenerace = všichni klienti tvrdě odmítnou komunikovat („Trust root se změnil").
  • tor-keys — onion identita (hs_ed25519_secret_key). Ztráta = nová onion adresa pro všechny.
# DB dump:   docker exec sepot-relay-db pg_dump -U sepot sepot_relay | gzip > db.sql.gz
# Tor klíče: docker run --rm -v sepot-relay_tor-keys:/k -v "$PWD":/o alpine tar czf /o/tor-keys.tgz -C /k .

Privacy — Definition of Done

  • Relay neloguje obsah, odesílatele ani IP (vynuceno v kódu, ověřeno testem).
  • Access log reverzní proxy pro relay endpoint drž vypnutý.
  • Rate limity jsou in-memory token buckety — nikdy se nezapisují na disk.
  • DB nemá IP/PII sloupce; offline fronta má TTL, ACK = hard delete.