services:
  backend:
    image: backend
    build:
      context: .
      dockerfile: ./Dockerfile.backend
    environment:
      - "Database:Url=Host=postgres;Database=postgres;Username=postgres;Password=postgres"
      - "Database:EnablePooling=true"
      - "Database:Redis=redis:6379"
      - "Host=0.0.0.0"
      - "Port=5000"
      - "Logging:MetricsPort=5001"
    restart: unless-stopped
    ports:
      - "5006:5000"
      - "5007:5001"
    volumes:
      - ./docker/config.ini:/app/config.ini
      - ./docker/static-pages:/app/static-pages

  frontend:
    image: frontend
    build:
      context: ./
      dockerfile: ./Foxnouns.Frontend/Dockerfile
    restart: unless-stopped
    env_file: ./docker/frontend.env
    environment:
      - "PRIVATE_API_HOST=http://rate:5003/api"
      - "PRIVATE_INTERNAL_API_HOST=http://backend:5000/api"

  rate:
    image: rate
    build: ./Foxnouns.RateLimiter
    environment:
      - "PORT=5003"
    restart: unless-stopped
    volumes:
      - ./docker/proxy-config.json:/app/proxy-config.json

  postgres:
    image: docker.io/postgres:16
    command: [ "postgres",
               "-c", "max-connections=1000",
               "-c", "timezone=Etc/UTC",
               "-c", "max_wal_size=1GB",
               "-c", "min_wal_size=80MB",
               "-c", "shared_buffers=128MB" ]
    environment:
      - "POSTGRES_PASSWORD=postgres"
    restart: unless-stopped
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: registry.redict.io/redict:7
    restart: unless-stopped
    volumes:
      - redict_data:/data

  caddy:
    image: docker.io/caddy:2
    restart: unless-stopped
    ports:
      - "5004:80"
      - "5005:81"
    volumes:
      - ./docker/Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config

volumes:
  caddy_data:
  caddy_config:
  postgres_data:
  redict_data: