services: matrix-db: image: postgres:16-alpine container_name: matrix-db restart: unless-stopped environment: POSTGRES_USER: synapse POSTGRES_PASSWORD: "{{ matrix_db_password }}" POSTGRES_DB: synapse POSTGRES_INITDB_ARGS: "--encoding='UTF8' --lc-collate='C' --lc-ctype='C'" volumes: - {{ matrix_data_dir }}/db:/var/lib/postgresql/data networks: - internal logging: driver: gelf options: gelf-address: "udp://{{ graylog_host }}:{{ graylog_gelf_port }}" tag: "matrix-db" synapse: image: ghcr.io/element-hq/synapse:{{ matrix_version }} container_name: synapse restart: unless-stopped depends_on: - matrix-db environment: SYNAPSE_CONFIG_PATH: /data/homeserver.yaml volumes: - {{ matrix_data_dir }}/synapse:/data labels: - "traefik.enable=true" - "traefik.http.routers.matrix.rule=Host(`{{ matrix_domain }}`)" - "traefik.http.routers.matrix.tls=true" - "traefik.http.routers.matrix.tls.certresolver=letsencrypt" - "traefik.http.services.matrix.loadbalancer.server.port=8008" networks: - internal - {{ sovereign_network_name }} logging: driver: gelf options: gelf-address: "udp://{{ graylog_host }}:{{ graylog_gelf_port }}" tag: "synapse" element: image: vectorim/element-web:latest container_name: element restart: unless-stopped volumes: - {{ matrix_data_dir }}/element/config.json:/app/config.json:ro labels: - "traefik.enable=true" - "traefik.http.routers.element.rule=Host(`{{ element_domain }}`)" - "traefik.http.routers.element.tls=true" - "traefik.http.routers.element.tls.certresolver=letsencrypt" - "traefik.http.services.element.loadbalancer.server.port=80" networks: - {{ sovereign_network_name }} logging: driver: gelf options: gelf-address: "udp://{{ graylog_host }}:{{ graylog_gelf_port }}" tag: "element" networks: internal: {{ sovereign_network_name }}: external: true