{"id":22039507,"url":"https://github.com/mpolinowski/matrix-synapse-docker","last_synced_at":"2026-04-16T18:08:47.178Z","repository":{"id":111483896,"uuid":"432109731","full_name":"mpolinowski/matrix-synapse-docker","owner":"mpolinowski","description":"Setup a Matrix/Synapse Homeserver with Docker Compose","archived":false,"fork":false,"pushed_at":"2021-11-26T08:43:57.000Z","size":2,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-13T11:07:37.745Z","etag":null,"topics":["docker-compose","matrix","synapse"],"latest_commit_sha":null,"homepage":"https://mpolinowski.github.io/devnotes/2021-10-25--matrix-secure-messaging","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mpolinowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-26T08:43:54.000Z","updated_at":"2024-03-02T03:34:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"76e55592-8ad6-42d0-97cb-94ea96e3aecf","html_url":"https://github.com/mpolinowski/matrix-synapse-docker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mpolinowski/matrix-synapse-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpolinowski%2Fmatrix-synapse-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpolinowski%2Fmatrix-synapse-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpolinowski%2Fmatrix-synapse-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpolinowski%2Fmatrix-synapse-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mpolinowski","download_url":"https://codeload.github.com/mpolinowski/matrix-synapse-docker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpolinowski%2Fmatrix-synapse-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31897959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T17:33:00.867Z","status":"ssl_error","status_checked_at":"2026-04-16T17:32:57.401Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-compose","matrix","synapse"],"created_at":"2024-11-30T11:11:05.002Z","updated_at":"2026-04-16T18:08:47.135Z","avatar_url":"https://github.com/mpolinowski.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n\n# Matrix Secure Messaging\n\n- [matrix.org](https://matrix.org)\n- [@matrix.org Github](https://github.com/matrix-org/synapse/tree/master/docker)\n- [element.io](https://element.io/get-started)\n- [@Element Github](https://github.com/vector-im)\n\n## Setup\n\nCreate a work directory and set the necessary permissions:\n\n```bash\nmkdir -p /opt/matrix/synapse/data\nsudo chown -R 1000:1000 /opt/matrix\n```\n\nThen we need an internal docker network for the services to communicate on:\n\n```bash\ndocker network create matrix\n```\n\n\n## Set up the Reverse Proxy\n\n### NGINX Proxy Service\n\n\n```bash\nnano /opt/matrix/docker-compose.yml\n```\n\n```yml\nversion: \"3\"\n\nservices:\n    proxy:\n        image: \"jwilder/nginx-proxy\"\n        container_name: \"proxy\"\n        volumes:\n            - \"certs:/etc/nginx/certs\"\n            - \"vhost:/etc/nginx/vhost.d\"\n            - \"html:/usr/share/nginx/html\"\n            - \"/run/docker.sock:/tmp/docker.sock:ro\"\n        networks: [\"matrix\"]\n        restart: \"always\"\n        ports:\n            - \"80:80\"\n            - \"443:443\"\n\nnetworks:\n    matrix:\n        external: true\n\nvolumes:\n    certs:\n    vhost:\n    html:\n```\n\n### Letsencrypt Proxy Companion Service\n\n\n```bash\nnano /opt/matrix/docker-compose.yml\n```\n\n```yml\nversion: \"3\"\n\nservices:\n    proxy:\n\n        ...\n\n    letsencrypt:\n        image: \"jrcs/letsencrypt-nginx-proxy-companion\"\n        container_name: \"letsencrypt\"\n        volumes:\n            - \"certs:/etc/nginx/certs\"\n            - \"vhost:/etc/nginx/vhost.d\"\n            - \"html:/usr/share/nginx/html\"\n            - \"/run/docker.sock:/var/run/docker.sock:ro\"\n        environment:\n            NGINX_PROXY_CONTAINER: \"proxy\"\n        networks: [\"matrix\"]\n        restart: \"always\"\n        depends_on: [\"proxy\"]\n\n        ...\n```\n\nRun the compose file with:\n\n```bash\ndocker-compose up -d\n```\n\n```bash\ncurl localhost\n```\n\n```html\n\u003chtml\u003e\n\u003chead\u003e\u003ctitle\u003e503 Service Temporarily Unavailable\u003c/title\u003e\u003c/head\u003e\n\u003cbody\u003e\n\u003ccenter\u003e\u003ch1\u003e503 Service Temporarily Unavailable\u003c/h1\u003e\u003c/center\u003e\n\u003chr\u003e\u003ccenter\u003enginx\u003c/center\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n## Set up Synapse\n\n### Configuration\n\n\n```bash\nnano /opt/matrix/synapse/docker-compose.yml\n```\n\n```yml\nversion: \"3\"\n\nservices:\n    synapse:\n        image: \"matrixdotorg/synapse:latest\"\n        container_name: \"synapse\"\n        volumes:\n            - \"./data:/data\"\n        environment:\n            # Replace this with your domain\n            VIRTUAL_HOST: \"sub.domain.com\"\n            VIRTUAL_PORT: 8008\n            # Replace this with your domain\n            LETSENCRYPT_HOST: \"sub.domain.com\"\n            # Replace this with your domain\n            SYNAPSE_SERVER_NAME: \"sub.domain.com\"\n            SYNAPSE_REPORT_STATS: \"yes\"\n        networks: [\"matrix\"]\n\n\nnetworks:\n    matrix:\n        external: true\n```\n\nGenerate the configuration file:\n\n```bash\ndocker-compose run --rm synapse generate\n```\n\n```bash\nnano /opt/matrix/synapse/data/homeserver.yaml\n```\n\n```yml\n## Server ##\nserver_name: \"sub.domain.com\"\n## TLS-enabled listener: for when matrix traffic is sent directly to synapse. ##\nlisteners:\n  - port: 8008\n    tls: false\n    type: http\n    x_forwarded: true\n\n    resources:\n      - names: [client, federation]\n        compress: false\n## Registration ##\nenable_registration: true \n```\n\nNow that everything is in place, you can start synapse using a command as simple as\n\n\n```bash\ndocker-compose up -d\n```\n\n## Adding PostgreSQL\n\n\n```bash\nnano /opt/matrix/synapse/docker-compose.yml\n```\n\n\n```yml\nversion: \"3\"\n\nservices:\n    synapse:\n\n        ...\n\n    postgresql:\n        image: postgres:latest\n        restart: always\n        environment:\n            POSTGRES_PASSWORD: somepassword\n            POSTGRES_USER: synapse\n            POSTGRES_DB: synapse\n            POSTGRES_INITDB_ARGS: \"--encoding='UTF8' --lc-collate='C' --lc-ctype='C'\"\n        volumes:\n            - \"postgresdata:/var/lib/postgresql/\"\n        networks: [\"matrix\"]\n\n        ...\n\nnetworks:\n    matrix:\n        external: true\n\nvolumes:\n    postgresdata:\n```\n\n### Configure Synapse\n\n```bash\nnano /opt/matrix/synapse/data/homeserver.yaml\n```\n\nComment out the SQLite block:\n\n```yml\n## Database ##\ndatabase:\n  name: sqlite3\n  args:\n    database: /data/homeserver.db\n```\n\nAnd replace it with:\n\n```yml\n## Database ##\ndatabase:\n    name: psycopg2\n    args:\n        user: synapse\n        password: somepassword\n        host: postgresql\n        database: synapse\n        cp_min: 5\n        cp_max: 10\n```\n\n\n```bash\ndocker-compose down\ndocker-compose up -d\n```\n\n## Connect a Client\n\n[List of compatible Clients](https://matrix.org/clients-matrix/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpolinowski%2Fmatrix-synapse-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmpolinowski%2Fmatrix-synapse-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpolinowski%2Fmatrix-synapse-docker/lists"}