services: postgres: image: postgres:16 restart: unless-stopped environment: POSTGRES_USER: synapse POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: synapse POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U synapse -d synapse"] interval: 10s timeout: 5s retries: 10 networks: - meshly synapse: image: ghcr.io/element-hq/synapse:latest restart: unless-stopped depends_on: postgres: condition: service_healthy environment: SYNAPSE_CONFIG_PATH: /data/homeserver.yaml volumes: - ./synapse:/data expose: - "8008" networks: - meshly caddy: image: caddy:2-alpine restart: unless-stopped depends_on: - synapse environment: DOMAIN: ${DOMAIN} CONTACT_EMAIL: ${CONTACT_EMAIL} ports: - "80:80" - "443:443" - "8448:8448" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy_data:/data - ./caddy_config:/config networks: - meshly volumes: postgres_data: networks: meshly: