version: "3.8"

services:
  back:
    build:
      context: ./back
      dockerfile: Dockerfile.dev
    ports:
      - "5000:5000"
    restart: on-failure
    env_file:
      - ./.env
    depends_on:
      postgres:
        condition: service_healthy
    volumes:
      - ./back:/app
      - /app/out/
      - kyoo:/kyoo

  front:
    build:
      context: ./front
      dockerfile: Dockerfile.dev
    volumes:
      - ./front:/app
      - /app/.yarn
      - /app/node_modules
      - /app/apps/mobile/node_modules
      - /app/apps/web/.next/
      - /app/apps/mobile/.expo/
    ports:
      - "3000:3000"
      - "8081:8081"
    restart: on-failure
    environment:
      - KYOO_URL=${KYOO_URL:-http://back:5000}
      - PUBLIC_BACK_URL=${PUBLIC_BACK_URL}

  scanner:
    build: ./scanner
    restart: on-failure
    depends_on:
      back:
        condition: service_healthy
    env_file:
      - ./.env
    environment:
      - KYOO_URL=${KYOO_URL:-http://back:5000}
    volumes:
      - ${LIBRARY_ROOT}:/video

  transcoder:
    build:
      context: ./transcoder
      dockerfile: Dockerfile.dev
    ports:
      - "7666:7666"
    restart: on-failure
    env_file:
      - ./.env
    volumes:
      - ./transcoder:/app
      - ${LIBRARY_ROOT}:/video
      - ${CACHE_ROOT}:/cache
      - metadata:/metadata

  ingress:
    image: nginx
    restart: on-failure
    environment:
      - PORT=8901
      - FRONT_URL=http://front:3000
      - BACK_URL=${KYOO_URL:-http://back:5000}
    volumes:
      - ./nginx.conf.template:/etc/nginx/templates/kyoo.conf.template:ro
    depends_on:
      - back
      - front
    ports:
      - "8901:8901"

  postgres:
    image: postgres:15
    restart: on-failure
    env_file:
      - ./.env
    volumes:
      - db:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
     - POSTGRES_HOST_AUTH_METHOD=trust
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5

volumes:
  kyoo:
  db:
  metadata:
