services: synapse: image: matrixdotorg/synapse:latest restart: unless-stopped environment: - SYNAPSE_SERVER_NAME=mess.hobbs.farm - SYNAPSE_REPORT_STATS=no volumes: - /mnt/docker-data/configs/matrix/data:/data ports: - "8008:8008" networks: - traefik-public - matrix-internal healthcheck: test: ["CMD-SHELL", "curl -fSs http://localhost:8008/health || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 60s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 labels: - "traefik.enable=true" - "traefik.docker.network=traefik-public" - "traefik.http.services.mess.loadbalancer.server.scheme=http" - "traefik.http.services.mess.loadbalancer.server.port=8008" - "traefik.http.routers.mess.rule=Host(`mess.hobbs.farm`)" - "traefik.http.routers.mess.entrypoints=websecure" - "traefik.http.routers.mess.tls=true" - "traefik.http.routers.mess.tls.certresolver=letsencrypt" - "traefik.http.routers.mess.service=mess" - "traefik.http.routers.mess-federation.rule=Host(`mess.hobbs.farm`) && PathPrefix(`/_matrix/federation`)" - "traefik.http.routers.mess-federation.entrypoints=websecure" - "traefik.http.routers.mess-federation.tls=true" - "traefik.http.routers.mess-federation.tls.certresolver=letsencrypt" - "traefik.http.routers.mess-federation.service=mess" resources: limits: memory: 1G wellknown: image: nginx:alpine restart: unless-stopped volumes: - /mnt/docker-data/configs/matrix/wellknown:/usr/share/nginx/html/.well-known/matrix:ro networks: - traefik-public healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:80/ || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 15s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 labels: - "traefik.enable=true" - "traefik.http.services.wellknown.loadbalancer.server.port=80" - "traefik.http.routers.wellknown.rule=Host(`hobbs.farm`) && PathPrefix(`/.well-known/matrix`)" - "traefik.http.routers.wellknown.entrypoints=websecure" - "traefik.http.routers.wellknown.tls=true" - "traefik.http.routers.wellknown.tls.certresolver=letsencrypt" - "traefik.http.routers.wellknown.service=wellknown" resources: limits: memory: 64M synapse-db: image: postgres:15-alpine user: "1024:100" restart: unless-stopped environment: - POSTGRES_USER=synapse - POSTGRES_PASSWORD=${MATRIX_DB_PASSWORD} - POSTGRES_DB=synapse - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C volumes: - /mnt/docker-data/databases/matrix-db:/var/lib/postgresql/data networks: - matrix-internal healthcheck: test: ["CMD-SHELL", "pg_isready -U synapse -d synapse"] interval: 30s timeout: 10s retries: 3 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "3" deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == hf-pdocker-01 labels: - "com.centurylinklabs.watchtower.enable=false" resources: limits: memory: 256M networks: traefik-public: external: true matrix-internal: driver: overlay