Best VPS for Matrix 2026: Self-Host Your Chat Server
Find the best VPS for hosting Matrix/Synapse. Compare specs, set up your own encrypted chat server, and escape big tech messaging.
Best VPS for Matrix in 2026
Matrix is a decentralized, encrypted chat protocol. Run your own homeserver and you control your communications — no Big Tech middleman.
What is Matrix?
Matrix is to chat what email is to messaging:
- Federated — Your server talks to others (like email)
- Encrypted — End-to-end encryption by default
- Open protocol — Not controlled by one company
- Bridge support — Connect to Signal, Discord, Slack, WhatsApp
Think of it as self-hosted Slack/Discord that can talk to other Matrix servers worldwide.
Why Self-Host Matrix?
| Factor | matrix.org (free) | Self-Hosted |
|---|---|---|
| Privacy | They see metadata | Full control |
| Customization | Limited | Unlimited |
| Storage | Limited | Your VPS |
| Performance | Shared | Dedicated |
| Federation | ✅ | ✅ |
| Username | @you:matrix.org | @you:yourdomain.com |
Self-hosting gives you @username:yourdomain.com addresses and complete data sovereignty.
VPS Requirements
Synapse (Reference Implementation)
Synapse is Python-based and memory-hungry:
Minimum:
- 2 vCPU
- 2GB RAM (small community)
- 20GB storage (grows with media)
Recommended:
- 2+ vCPU
- 4GB RAM (50-100 users)
- 50GB+ NVMe
Large Community:
- 4+ vCPU
- 8GB+ RAM
- 100GB+ storage
- Consider Dendrite instead
Dendrite (Lightweight Alternative)
Dendrite is Go-based, much lighter:
- 1 vCPU
- 1GB RAM
- 10GB storage
Trade-off: Fewer features, less mature.
Best VPS for Matrix
1. Hetzner CX21 (Best Value)
€5.39/mo | 2 vCPU, 4GB RAM, 40GB NVMe
4GB RAM handles Synapse well. 20TB bandwidth is plenty for media.
Performance: Smooth for 50-100 active users
2. Hostinger KVM2 (Best Budget)
$5.99/mo | 2 vCPU, 8GB RAM, 100GB NVMe
8GB RAM is luxurious for Matrix. Good for growing communities.
3. Vultr High Frequency (Best Performance)
$24/mo | 2 vCPU, 4GB RAM, 128GB NVMe
3GHz+ CPUs mean faster room syncs. Worth it for large rooms.
4. Contabo VPS S (Most Storage)
€5.99/mo | 4 vCPU, 8GB RAM, 200GB
If media storage is priority, Contabo's specs can't be beat.
Complete Setup Guide
Step 1: Create Your VPS
Using Hetzner CX21:
- Sign up at Hetzner Cloud
- Create server → Ubuntu 22.04 → CX21
- Add SSH key
- Create server, note IP
Step 2: DNS Setup
A matrix.yourdomain.com → your-server-ip
A element.yourdomain.com → your-server-ip
SRV _matrix._tcp.yourdomain.com → 10 0 443 matrix.yourdomain.com
The SRV record enables federation with your root domain.
Step 3: Initial Server Setup
ssh root@your-server-ip
# Update
apt update && apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com | sh
# Create matrix user
adduser matrix
usermod -aG docker matrix
Step 4: Deploy with Docker Compose
su - matrix
mkdir matrix && cd matrix
Create docker-compose.yml:
version: '3.8'
services:
synapse:
image: matrixdotorg/synapse:latest
container_name: synapse
restart: unless-stopped
environment:
- SYNAPSE_SERVER_NAME=yourdomain.com
- SYNAPSE_REPORT_STATS=no
volumes:
- ./synapse-data:/data
ports:
- 8008:8008
depends_on:
- postgres
postgres:
image: postgres:15-alpine
container_name: synapse-postgres
restart: unless-stopped
environment:
POSTGRES_USER: synapse
POSTGRES_PASSWORD: your-secure-password
POSTGRES_DB: synapse
POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate=C --lc-ctype=C
volumes:
- ./postgres-data:/var/lib/postgresql/data
caddy:
image: caddy:alpine
container_name: caddy
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
element:
image: vectorim/element-web:latest
container_name: element
restart: unless-stopped
volumes:
- ./element-config.json:/app/config.json
volumes:
caddy_data:
caddy_config:
Step 5: Configure Caddy
Create Caddyfile:
matrix.yourdomain.com {
reverse_proxy synapse:8008
}
element.yourdomain.com {
reverse_proxy element:80
}
yourdomain.com {
header /.well-known/matrix/* Content-Type application/json
respond /.well-known/matrix/server `{"m.server": "matrix.yourdomain.com:443"}`
respond /.well-known/matrix/client `{"m.homeserver": {"base_url": "https://matrix.yourdomain.com"}}`
}
Step 6: Generate Synapse Config
docker run -it --rm \
-v ./synapse-data:/data \
-e SYNAPSE_SERVER_NAME=yourdomain.com \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate
Edit synapse-data/homeserver.yaml:
database:
name: psycopg2
args:
user: synapse
password: your-secure-password
database: synapse
host: postgres
cp_min: 5
cp_max: 10
enable_registration: false
Step 7: Configure Element
Create element-config.json:
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.yourdomain.com",
"server_name": "yourdomain.com"
}
},
"brand": "Element",
"default_theme": "dark"
}
Step 8: Launch
docker compose up -d
Wait a minute, then access:
- Element:
https://element.yourdomain.com - Synapse API:
https://matrix.yourdomain.com
Step 9: Create Admin User
docker exec -it synapse register_new_matrix_user \
-u admin \
-p your-password \
-a \
-c /data/homeserver.yaml \
http://localhost:8008
Log in with @admin:yourdomain.com
Enable Federation
Federation lets your server talk to matrix.org and others.
Test Federation
curl https://federationtester.matrix.org/api/report?server_name=yourdomain.com
Should show green checkmarks.
Common Federation Issues
- Wrong SRV record — Use proper format
- SSL issues — Ensure valid certificate
- Firewall — Port 443 must be open
Performance Tuning
Enable Redis (for large servers)
Add to compose:
redis:
image: redis:alpine
restart: unless-stopped
Update homeserver.yaml:
redis:
enabled: true
host: redis
port: 6379
Database Tuning
For PostgreSQL:
ALTER SYSTEM SET shared_buffers = '1GB';
ALTER SYSTEM SET effective_cache_size = '3GB';
ALTER SYSTEM SET work_mem = '16MB';
Enable Caching
In homeserver.yaml:
caches:
global_factor: 1.0
cache_entry_ttl: 30m
Synapse Workers (Advanced)
For large deployments, split Synapse into workers:
- Federation sender
- Media repository
- Push notifications
See Matrix docs for worker configuration.
Bridges (Connect Other Platforms)
Discord Bridge
docker run -d \
--name mautrix-discord \
-v ./discord-bridge:/data \
dock.mau.dev/mautrix/discord
Signal Bridge
docker run -d \
--name mautrix-signal \
-v ./signal-bridge:/data \
dock.mau.dev/mautrix/signal
WhatsApp Bridge
docker run -d \
--name mautrix-whatsapp \
-v ./whatsapp-bridge:/data \
dock.mau.dev/mautrix/whatsapp
Backup Strategy
Database Backup
#!/bin/bash
# backup.sh
docker exec synapse-postgres pg_dump -U synapse synapse > backup.sql
rclone copy backup.sql remote:matrix-backup/
Schedule with cron:
0 3 * * * /home/matrix/backup.sh
Media Backup
tar czf media-backup.tar.gz synapse-data/media_store/
rclone copy media-backup.tar.gz remote:matrix-backup/
Security Hardening
Disable Registration
In homeserver.yaml:
enable_registration: false
Enable Rate Limiting
rc_message:
per_second: 0.5
burst_count: 10
rc_registration:
per_second: 0.1
burst_count: 3
Regular Updates
docker compose pull
docker compose up -d
Resource Usage
Typical usage on a 100-user server:
| Component | RAM | CPU |
|---|---|---|
| Synapse | 1-2GB | 0.5-1 core |
| PostgreSQL | 500MB | 0.2 core |
| Element | 50MB | minimal |
| Caddy | 20MB | minimal |
| Total | ~2.5GB | ~1.5 cores |
4GB RAM VPS handles this comfortably.
FAQ
Synapse vs Dendrite?
Synapse is mature, full-featured. Dendrite is lightweight but missing features. Start with Synapse unless you're resource-constrained.
How much storage do I need?
Depends on media sharing. Start with 40GB, monitor usage. Media is the biggest consumer.
Can I use my own domain for usernames?
Yes! That's the point. @you:yourdomain.com is yours forever.
Is Matrix truly private?
With E2EE rooms, yes. Metadata (who talks to whom) is visible to server admins.
Can I migrate from matrix.org?
Yes, but it's complex. Easier to start fresh on your server.
Recommended Setup
| Use Case | VPS | Monthly Cost |
|---|---|---|
| Personal/Small | Hetzner CX21 | €5.39 |
| Medium Community | Hostinger KVM2 | $5.99 |
| Large Server | Hetzner CX31 | €10.49 |
Start with Hetzner CX21 — €5.39/month for complete communication sovereignty.
Ready to get started?
Get the best VPS hosting deal today. Hostinger offers 4GB RAM VPS starting at just $4.99/mo.
Get Hostinger VPS — $4.99/mo// up to 75% off + free domain included
// related topics
fordnox
Expert VPS reviews and hosting guides. We test every provider we recommend.
// last updated: February 8, 2026. Disclosure: This article may contain affiliate links.