← All guides
Matrix Synapse
Synapse is the reference server implementation for the federated Matrix chat protocol, officially published as a Docker image for self-hosting a homeserver.
This guide is synthesized from Matrix Synapse's own official documentation, linked above — always cross-check exact package/version names there before running these commands on a production server, since distro and project versions move over time.
1Generate the Synapse configuration
Use the official image's 'generate' command to create config files in a persistent Docker volume. SYNAPSE_SERVER_NAME and SYNAPSE_REPORT_STATS are mandatory.
docker run -it --rm \ --mount type=volume,src=synapse-data,dst=/data \ -e SYNAPSE_SERVER_NAME=my.matrix.host \ -e SYNAPSE_REPORT_STATS=yes \ matrixdotorg/synapse:latest generate2Start the Synapse container
docker run -d --name synapse \ --mount type=volume,src=synapse-data,dst=/data \ -p 8008:8008 \ matrixdotorg/synapse:latest3Check the logs
docker logs synapse4Move to PostgreSQL for production
The default SQLite backend is only meant for testing. Synapse's docs recommend connecting it to a separate PostgreSQL database for any real deployment, configured in the generated homeserver.yaml.
5Put it behind a reverse proxy
For federation and client access over HTTPS, place Synapse behind a reverse proxy (nginx, Caddy, Traefik) terminating TLS and forwarding to port 8008, as described in Synapse's reverse-proxy documentation.