services:
  echoes_of_the_ashes_db:
    image: postgres:15
    container_name: echoes_of_the_ashes_db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - echoes-postgres-data:/var/lib/postgresql/data
    networks:
      - default_docker
    #ports:
      # Optional: expose port to host for debugging with a DB client
      # - "5432:5432"

  echoes_of_the_ashes_redis:
    image: redis:7-alpine
    container_name: echoes_of_the_ashes_redis
    restart: unless-stopped
    command: >
      redis-server
      --appendonly yes
      --appendfsync everysec
      --save 900 1
      --save 300 10
      --save 60 10000
      --maxmemory 512mb
      --maxmemory-policy allkeys-lru
    volumes:
      - echoes-redis-data:/data
    networks:
      - default_docker
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 3s
      retries: 3

  # echoes_of_the_ashes_bot:
  #   build: .
  #   container_name: echoes_of_the_ashes_bot
  #   restart: unless-stopped
  #   env_file:
  #     - .env
  #   volumes:
  #     - ./gamedata:/app/gamedata:rw
  #     - ./images:/app/images:ro
  #   depends_on:
  #     - echoes_of_the_ashes_db
  #   networks:
  #     - default_docker

  echoes_of_the_ashes_map:
    build:
      context: .
      dockerfile: Dockerfile.map
    container_name: echoes_of_the_ashes_map
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - ./gamedata:/app/gamedata:rw
      - ./images:/app/images:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - 8080:8080
    networks:
      - default_docker
      - traefik
    labels:
        - traefik.enable=true
        - traefik.http.routers.echoesoftheash-http.entrypoints=web
        - traefik.http.routers.echoesoftheash-http.rule=Host(`echoesoftheash.patacuack.net`)
        - traefik.http.routers.echoesoftheash-http.middlewares=https-redirect@file
        - traefik.http.routers.echoesoftheash.entrypoints=websecure
        - traefik.http.routers.echoesoftheash.rule=Host(`echoesoftheash.patacuack.net`)
        - traefik.http.routers.echoesoftheash.tls=true
        - traefik.http.routers.echoesoftheash.tls.certResolver=production
        - traefik.http.services.echoesoftheash.loadbalancer.server.port=8080

  echoes_of_the_ashes_pwa:
    build:
      context: .
      dockerfile: Dockerfile.pwa
      args:
        VITE_API_URL: https://api-staging.echoesoftheash.com
        VITE_WS_URL: wss://api-staging.echoesoftheash.com
    container_name: echoes_of_the_ashes_pwa
    restart: unless-stopped
    env_file:
      - .env
    depends_on:
      - echoes_of_the_ashes_api
    networks:
      - default_docker
      - traefik
    labels:
        - traefik.enable=true
        - traefik.http.routers.stagingechoesoftheash-http.entrypoints=web
        - traefik.http.routers.stagingechoesoftheash-http.rule=Host(`staging.echoesoftheash.com`)
        - traefik.http.routers.stagingechoesoftheash-http.middlewares=https-redirect@file
        - traefik.http.routers.stagingechoesoftheash.entrypoints=websecure
        - traefik.http.routers.stagingechoesoftheash.rule=Host(`staging.echoesoftheash.com`)
        - traefik.http.routers.stagingechoesoftheash.tls=true
        - traefik.http.routers.stagingechoesoftheash.tls.certResolver=production
        - traefik.http.services.stagingechoesoftheash.loadbalancer.server.port=80

  echoes_of_the_ashes_api:
    build:
      context: .
      dockerfile: Dockerfile.api
    container_name: echoes_of_the_ashes_api
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - ./gamedata:/app/gamedata:ro
      - ./images:/app/images:ro
      - ./api:/app/api:rw
      - ./data:/app/data:rw
    depends_on:
      - echoes_of_the_ashes_db
      - echoes_of_the_ashes_redis
    networks:
      - default_docker
      - traefik
    labels:
        - traefik.enable=true
        - traefik.http.routers.stagingechoesoftheashapi-http.entrypoints=web
        - traefik.http.routers.stagingechoesoftheashapi-http.rule=Host(`api-staging.echoesoftheash.com`)
        - traefik.http.routers.stagingechoesoftheashapi-http.middlewares=https-redirect@file
        - traefik.http.routers.stagingechoesoftheashapi.entrypoints=websecure
        - traefik.http.routers.stagingechoesoftheashapi.rule=Host(`api-staging.echoesoftheash.com`)
        - traefik.http.routers.stagingechoesoftheashapi.tls=true
        - traefik.http.routers.stagingechoesoftheashapi.tls.certResolver=production
        - traefik.http.services.stagingechoesoftheashapi.loadbalancer.server.port=8000

volumes:
  echoes-postgres-data:
    name: echoes-of-the-ashes-postgres-data
  echoes-redis-data:
    name: echoes-of-the-ashes-redis-data

networks:
  default_docker:
    external: true
    name: default_docker
  traefik:
    external: true
    name: traefik