services:
  synapse:
    depends_on:
      caddy:
        condition: service_started
      postgres:
        condition: service_started
    container_name: synapse
    command: generate
    environment:
      - SYNAPSE_SERVER_NAME=example.com
    image: matrixdotorg/synapse:latest
    restart: unless-stopped
    volumes:
      - ./synapse:/data
    networks:
      - matrix-network
    user: "1000:1000"

  coturn:
    depends_on:
      caddy:
        condition: service_started
    container_name: coturn
    image: coturn/coturn:latest
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - ./coturn/turnserver.conf:/etc/coturn/turnserver.conf
      - caddy_data:/etc/ssl/caddy:ro

  caddy:
    container_name: caddy
    image: caddy/caddy:latest
    restart: unless-stopped
    networks:
      - matrix-network
    cap_add:
      - NET_ADMIN
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
      - "8448:8448"
    volumes:
      - ./caddy:/etc/caddy
      - caddy_data:/data
      - caddy_config:/config

  postgres:
    container_name: postgres-synapse
    image: postgres:14-alpine
    volumes:
      - ~/apps/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=
      - POSTGRES_USER=synapse
      - POSTGRES_DB=synapse
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
    networks:
      - matrix-network

  synapse-admin:
    depends_on:
      caddy:
        condition: service_started
    container_name: matrix-admin
    image: ghcr.io/etkecc/synapse-admin:latest
    networks:
      - matrix-network
    restart: "unless-stopped"
  

networks:
  matrix-network:

volumes:
  caddy_data:
  caddy_config:
  synapse-data: