services:
  frontend:
    env_file: .env
    container_name: "AniX-frontend"
    build:
      context: ./frontend
      dockerfile: ../docker/frontend.Dockerfile
    labels:
      # --- ${DOMAIN} will be replaced with DOMAIN from .env ---
      - "traefik.enable=true"
      - "traefik.http.routers.anix-frontend.rule=Host(`${DOMAIN}`)"

      # --- !COMMENT THIS FOR HTTPS! ---
      - "traefik.http.routers.anix-frontend.entrypoints=web"

      # --- !UNCOMMENT THIS FOR HTTPS! ---
      #- "traefik.http.routers.anix-frontend.entrypoints=websecure"
      #- "traefik.http.routers.anix-frontend.tls=true"
      #- "traefik.http.routers.user-api-backend.tls.certresolver=letsencrypt"
    expose:
      - 3000
  backend:
    env_file: .env
    container_name: "AniX-backend"
    build:
      context: ./backend
      dockerfile: ../docker/backend.Dockerfile
    labels:
      # --- ${DOMAIN} will be replaced with DOMAIN from .env ---
      - "traefik.enable=true"
      - "traefik.http.routers.anix-backend.rule=Host(`${DOMAIN}`) && PathPrefix(`/api`)"
      - traefik.http.middlewares.anix-backend_stripprefix.stripprefix.prefixes=/api
      - "traefik.http.routers.anix-backend.middlewares=anix-backend_stripprefix@docker"

      # --- !COMMENT THIS FOR HTTPS! ---
      - "traefik.http.routers.anix-backend.entrypoints=web"

      # --- !UNCOMMENT THIS FOR HTTPS! ---
      #- "traefik.http.routers.anix-backend.tls=true"
      #- "traefik.http.routers.anix-backend.entrypoints=websecure"
      #- "traefik.http.routers.user-api-backend.tls.certresolver=letsencrypt"
    expose:
      - 8000
  traefik:
    env_file: .env
    image: "traefik:v3.0"
    container_name: "AniX-traefik"
    command:
      - "--api.dashboard=false"
      - "--api.insecure=false"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"

      # --- !COMMENT THIS FOR HTTPS! ---
      - "--entryPoints.web.address=:${HTTP_PORT:-80}"

      # --- !UNCOMMENT THIS FOR HTTPS! ---
      #- "--entrypoints.websecure.address=:${HTTPS_PORT:-443}"
      #- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      #- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      #- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
      #- "--certificatesresolvers.letsencrypt.acme.email=${EMAIL}"
      #- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
    ports:
      # --- !COMMENT THIS FOR HTTPS! ---
      - ${HTTP_PORT:-80}:${HTTP_PORT:-80}
      # --- !UNCOMMENT THIS FOR HTTPS! ---
      #- ${HTTPS_PORT:-443}:${HTTPS_PORT:-443}
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - frontend
      - backend

      # --- !UNCOMMENT THIS FOR HTTPS! ---
      # acme.json should be created on host instance!
      #- "./acme.json:/letsencrypt/acme.json"