Self-host Matrix Synapse on a no-KYC VPS
Run an end-to-end encrypted, federated alternative to Slack and Discord on your own server. Anonymous signup, no email required, no KYC. Pay with crypto or card, full root, no logs.
Quick start: Synapse on Servury via Docker
Tested on Ubuntu 24. Pick a 4 GB+ plan, deploy, SSH in. Have your domain ready.# 1. Install Docker
curl -fsSL https://get.docker.com | sh
# 2. Generate a Synapse config for your domain
mkdir -p /opt/matrix && cd /opt/matrix
docker run -it --rm \
-v /opt/matrix:/data \
-e SYNAPSE_SERVER_NAME=matrix.yourdomain.com \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate
# 3. Start Synapse + Postgres
docker run -d --name synapse --restart unless-stopped \
-p 8008:8008 \
-v /opt/matrix:/data \
matrixdotorg/synapse:latest
# 4. Caddy in front (also serves /.well-known/matrix/ on the apex):
# matrix.yourdomain.com {
# reverse_proxy localhost:8008
# }
# 5. Create a user:
docker exec -it synapse register_new_matrix_user -c /data/homeserver.yaml -u admin -a http://localhost:8008
# 6. Log in via Element web client at https://app.element.io
Why self-host Matrix instead of using Slack/Discord
Fair questions
How much VPS do I need?
4 GB RAM is the practical minimum because Synapse + Postgres + a workers setup eats memory once you join a few large rooms. 8 GB is comfortable for a small team. Storage grows with media volume; offload to S3 if you have thousands of users.
Should I use Synapse, Dendrite, or Conduit?
Synapse is the reference implementation, most feature-complete, the default pick. Dendrite is a Go rewrite, lighter but newer. Conduit is a single-binary Rust implementation, very lightweight but limited. For most users, Synapse is the safe choice.
Do I need both DNS records (apex and matrix subdomain)?
Recommended setup: serve Matrix on matrix.yourdomain.com, serve a small /.well-known/matrix/server file from the apex yourdomain.com. This lets you keep your Matrix ID as @user:yourdomain.com while running Synapse on the subdomain.
Is federation required?
No. You can run a closed federation (only your domain) by disabling federation in homeserver.yaml. Useful for internal team chat that should not leave the building.
How do I disable signups?
Set enable_registration: false in homeserver.yaml. Create users manually via register_new_matrix_user. Or enable invite-only registration tokens.
What clients work with Matrix?
Element (web/iOS/Android/desktop) is the flagship. Other options: Cinny, FluffyChat, Nheko, Schildichat. Anything that speaks the Matrix client-server API.
How do I bridge to Discord/Slack?
mautrix-discord and mautrix-slack are the canonical bridges. Run them as additional Docker containers next to Synapse. Bidirectional: messages flow both ways.
Does Servury log my Matrix traffic?
No. No application-level logging on customer servers. Anonymous signup, crypto/card payment, no logs.