Frequently Asked Questions

What is Matrix?

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.

Why run your own server?

  • 🔐 Privacy — Messages stay on your server, not someone else's
  • 🛡️ Control — You decide who registers and what's enabled
  • 🌐 Federation — Still talk to users on matrix.org and others
  • 💰 Free — If you already have a VPS or home server

How does it compare?

FeatureMatrixWhatsAppTelegramSignal
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

How many users can it handle?

  • 1–10 users: 1GB RAM, 1 CPU (tested on DigitalOcean $6/mo droplet)
  • 10–100 users: 2–4GB RAM, 2+ cores
  • 100–500 users: 4–8GB RAM, 4+ cores
📊
This deployment uses ~50MB (Conduit) + ~30MB (Caddy) + ~20MB (Coturn) = ~100MB total.

Can I change the server name later?

🚫
No. Your Matrix server name is permanent. Changing it means losing all accounts, rooms, and data. Choose a domain you'll keep long-term.

How do I backup my server?

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 includedWhy it matters
Database (RocksDB)All accounts, messages, room history
Media filesUploaded images, videos, documents
Configuration (.env, Caddyfile, etc.)Your domain, secrets, settings
TLS certificatesLet's Encrypt certs for HTTPS
Docker image versionsExact SHA256 digest of each container image
📌
Version pinning: The backup records the exact version (SHA256 digest) of each Docker image running at backup time. This means when you restore, you get back the exact same software — not a newer version that might have issues.
📂
Where are backups stored? Backups are saved to /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.

How do I restore from a backup?

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:

  1. Stops current services
  2. Replaces all files from the backup
  3. Pulls the exact same Docker images that were running at backup time (not latest)
  4. Starts services — you're back to exactly where you were
🔄
Why this matters: Without version pinning, restoring your data but running a newer image could cause the same problem you're trying to fix. Pinned versions ensure a true rollback — same data and same software.

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

How do I migrate to a different server?

Moving your Matrix server to a new VPS or machine:

On the old server:
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:~/
On the 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
🔑
Don't forget DNS! Update your domain's A record to point to the new server's IP. Caddy will automatically obtain new Let's Encrypt certificates.

How do I check for & apply updates?

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.

Check for updates
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
The safe update flow

When you choose to update, the script asks to create a backup first. This means:

  1. Backup — saves your data + current image versions
  2. Update — pulls latest Docker images and restarts
  3. Verify — checks all 3 services are running after update
  4. If something breaks — restore from backup (gets exact previous versions)
📦
What gets updated: The Docker images for Conduit (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.