6d224861 came from a --no-checkout worktree whose empty index made the
commit drop every file except two. This restores 05b50d2b's full tree and
correctly adds stacks/stem95su/gdrive-sync.tf + the service-catalog stem95su
entry. Forward-only (parent=6d224861, no force-push); [ci skip] since the
live infra was never applied from the broken commit.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
Matrix: Synapse → tuwunel migration — Design
Date: 2026-06-08
Status: Implemented
Stack: stacks/matrix (+ stacks/vault cleanup)
Context
The matrix homeserver ran Synapse (matrixdotorg/synapse:v1.151.0) on a
cramped 256Mi/512Mi allocation. Synapse (Python) wants 1–2 GB; at 512Mi it was
starved. During a Slack-vs-Discord-vs-Matrix evaluation Viktor confirmed Slack
stays his primary hub, but wanted a working, federated Matrix server kept
available "in case I need it." The resource pain was Synapse-specific — not
inherent to Matrix — so the fix was to swap the homeserver implementation, not
abandon Matrix.
Decision
Replace Synapse with tuwunel v1.7.1 (Rust, RocksDB) — the enterprise/Swiss-government-backed official successor to the (archived 2026-01-19) conduwuit.
| Choice | Decision | Rationale |
|---|---|---|
| Homeserver | tuwunel (vs continuwuity) | Corporate-backed, full-time staff → best longevity for a set-and-forget server |
| Data | Fresh start (no migration) | No supported Synapse(Postgres)→RocksDB path; Viktor confirmed old rooms/messages disposable |
| Federation | ON | A backup server is only useful if it can reach the wider Matrix network |
server_name |
unchanged (matrix.viktorbarzin.me) |
Element clients keep pointing at the same place; only a re-login needed |
| Database | embedded RocksDB on the existing encrypted PVC | Drops the entire CNPG dependency; local-SSD LUKS2 suits RocksDB's small writes (NFS would be wrong) |
| Registration | token-gated, then disabled | First user = admin; locked down after registering @viktor |
| Auth | native password | tuwunel OIDC SSO not wired — Authentik Matrix OAuth app is now orphaned (harmless) |
| Media cap | 50 MiB | Kept under Cloudflare's 100 MB proxied-request ceiling |
Alternatives considered
- Keep Synapse, bump to 2 GB — zero-migration, but stays the heavy Python server; rejected in favour of the lightweight Rust target Viktor asked for.
- continuwuity — community continuation; viable and lighter-community, but tuwunel's corporate backing won on longevity.
- Synapse → tuwunel data migration — not possible (different storage engines); fresh start is the only path.
As-built
- Fully env-var configured (
TUWUNEL_*,__for nested) — no TOML ConfigMap. - tuwunel serves its own
.well-known/matrix/{client,server}→ federation resolves to Cloudflare-proxied:443(no 8448 / SRV needed). - Ingress unchanged:
auth = "none"(Matrix uses bearer/signed requests),dns_type = "proxied". - Pod
securityContextrunAsUser/runAsGroup/fsGroup = 1000so uid 1000 can write the encrypted RocksDB PVC. - Image kept under Keel + diun semver management (
^v\d+\.\d+\.\d+$).