services:
  server:
    container_name: continuity-server
    image: continuity:latest
    restart: always
    depends_on:
      - db
    environment:
      - ENVIRONMENT=Development
      - Testing:CreateAccountOnLogin=true
      - DB:Host=db
      - DB:Port=5432
      - DB:Username=continuity
      - DB:Password=continuity
      - Game:Data:Path=/app/data/
      - Tracing:Enabled=true
      - OTLP:Endpoint=http://jaeger:4317
      - Zipkin:Endpoint=http://zipkin:9411/api/v2/spans
    networks:
      - continuity
    ports:
      - 10001:10001
    volumes:
      - type: bind
        source: ../wk-data
        target: /app/data
        read_only: true
      - type: bind
        source: ../wk-logs
        target: /app/logs
        read_only: false
      - type: bind
        source: ../config
        target: /app/config
        read_only: true

  db:
    container_name: continuity-db
    image: postgres:16.1-alpine
    restart: always
    environment:
      - POSTGRES_USER=continuity
      - POSTGRES_DB=continuity
      - POSTGRES_PASSWORD=continuity
    networks:
      - continuity
    ports:
      - 5432:5432
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: [ CMD-SHELL, 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}' ]
      interval: 10s
      timeout: 3s
      retries: 3

  jaeger:
    container_name: continuity-jaeger
    image: jaegertracing/all-in-one:1.51.0
    restart: always
    networks:
      - continuity
    expose:
      - 6831
      - 6832
      - 5778
      - 4317
      - 4318
      - 14250
      - 14268
      - 14269
    ports:
      - 16686:16686
    environment:
      - COLLECTOR_OTLP_ENABLED=true

  zipkin:
    container_name: continuity-zipkin
    image: openzipkin/zipkin:2.24.3
    restart: always
    ports:
      - 9411:9411
    networks:
      - continuity

networks:
  continuity:

volumes:
  db-data:
  prom-data: