version: '3'

services:
  postgres:
    image: postgres:latest
    restart: unless-stopped
    networks:
      - internal
    volumes:
      - db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=synapse
      - POSTGRES_USER=synapse
      - POSTGRES_PASSWORD=WRyu2kuArNjRxojstqpg7EfcoUP9zoka
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
     
  synapse:
    image: matrixdotorg/synapse:latest
    restart: unless-stopped
    ports:
      - 8448:8448
    networks:
      - internal
      - proxy
    volumes:
      - matrix:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.matrix-secure.entrypoints=https"
      - "traefik.http.routers.matrix-secure.rule=Host(`matrix.mrdev023.fr`)"
      - "traefik.http.routers.matrix-secure.tls=true"
      - "traefik.http.routers.matrix-secure.tls.certresolver=sslResolver"
      - "traefik.port=8008"
      - "traefik.docker.network=proxy"

  well-kwown:
    image: nginx:latest
    restart: unless-stopped
    networks:
      - internal
      - proxy
    volumes:
      - ./nginx/matrix.conf:/etc/nginx/conf.d/matrix.conf
      - ./nginx/www:/var/www/
    labels:
      - "traefik.enable=true"
      - "traefik.http.middlewares.cors-headers.headers.accessControlAllowOriginList=*"
      - "traefik.http.middlewares.cors-headers.headers.accessControlAllowHeaders=Origin, X-Requested-With, Content-Type, Accept, Authorization"
      - "traefik.http.middlewares.cors-headers.headers.accessControlAllowMethods=GET, POST, PUT, DELETE, OPTIONS"
      - "traefik.http.routers.matrix-wellknown.rule=Host(`matrix.mrdev023.fr`) && PathPrefix(`/.well-known/matrix`)"
      - "traefik.http.routers.matrix-wellknown.tls=true"
      - "traefik.http.routers.matrix-wellknown.tls.certresolver=sslResolver"
      - "traefik.http.routers.matrix-wellknown.middlewares=cors-headers@docker"
      - "traefik.docker.network=proxy"
        

volumes:
  db:
  web:
  matrix:

networks:
  internal:
  proxy:
    external: true
      
