Matrix is an open protocol for secure, decentralized communication. Like email — anyone can run a server, and all servers talk to each other. Unlike WhatsApp or Telegram, you own your data.
| Feature | Matrix | Telegram | Signal | |
|---|---|---|---|---|
| Self-hosted | ✅ Yes | ❌ | ❌ | ❌ |
| E2E Encrypted | ✅ Yes | ✅ Yes | ⚠️ Optional | ✅ Yes |
| Federation | ✅ Yes | ❌ | ❌ | ❌ |
| Phone required | ❌ No | ✅ Yes | ✅ Yes | ✅ Yes |
| Open protocol | ✅ Yes | ❌ | ❌ | ❌ |
| Own your data | ✅ Yes | ❌ | ❌ | ⚠️ Partial |
The easiest way is through the script menu:
sudo ./conduit-deploy.sh # Choose: Services → Backup (with version pinning)
This saves everything into a single .tar.gz file:
| What's included | Why it matters |
|---|---|
| Database (RocksDB) | All accounts, messages, room history |
| Media files | Uploaded images, videos, documents |
| Configuration (.env, Caddyfile, etc.) | Your domain, secrets, settings |
| TLS certificates | Let's Encrypt certs for HTTPS |
| Docker image versions | Exact SHA256 digest of each container image |
/opt/conduit-backups/ — a separate folder from the installation at /opt/conduit/. This is intentional: if the installation is damaged or uninstalled, your backups are safe and untouched. When uninstalling, you'll be asked if you want to delete backups too — for a completely clean removal.
/opt/
├── conduit/ ← installation (database, config, media)
└── conduit-backups/ ← backups (separate, survives uninstall)
├── conduit-backup-2025-03-15-020000.tar.gz
└── conduit-backup-2025-03-14-100000.tar.gz
The script automatically manages old backups — when you have 3 or more, it offers to keep only the latest 2 to save disk space.
If an update broke something and you want to go back to exactly how it was before. You'll need to type RESTORE to confirm (to prevent accidents):
sudo ./conduit-deploy.sh # Choose: Services → Restore from backup
The restore process:
Or manually:
# Stop and remove current installation cd /opt/conduit && sudo docker compose down sudo rm -rf /opt/conduit # Restore files from backup sudo tar xzf /opt/conduit-backups/conduit-backup-2025-01-15-120000.tar.gz -C / # Start services (uses pinned images if available) cd /opt/conduit && sudo docker compose up -d
Moving your Matrix server to a new VPS or machine:
sudo ./conduit-deploy.sh # Choose: Services → Backup (with version pinning) # Copy backup to new server scp /opt/conduit-backups/conduit-backup-*.tar.gz user@new-server:~/
# Install Docker curl -fsSL https://get.docker.com | sh # Download the deploy script curl -o conduit-deploy.sh https://raw.githubusercontent.com/balnaimi/conduit-deploy/main/conduit-deploy.sh chmod +x conduit-deploy.sh # Restore from backup (pulls exact same image versions) sudo ./conduit-deploy.sh # Choose: Services → Restore from backup
Updates are not automatic — you decide when to update. The script can check Docker Hub for newer images and tell you which containers have updates available.
sudo ./conduit-deploy.sh # Choose: Services → Check for updates
This compares your local images with Docker Hub:
Checking caddy (caddy:2-alpine)... [OK] Up to date Checking conduit (matrix-conduit:latest)... [UP] Update available! Checking coturn (coturn:alpine)... [OK] Up to date
When you choose to update, the script asks to create a backup first. This means:
latest), Caddy (2-alpine), and Coturn (alpine). These tags always point to the newest release. Your database, config, certificates, and user data are never touched.