---
include:
  - docker/docker-compose.services.yml

services:

  backend:
    container_name: ark-backend
    build: .

    depends_on:
      - db
      - redis
      - lb

    labels:
      traefik.enable: true
      traefik.http.routers.backend.rule: Host(`ark.localhost`) && (PathPrefix(`/api/`) || PathPrefix(`/api-docs/`) || PathPrefix(`/admin/`) || PathPrefix(`/rq/`) || PathPrefix(`/static/`))
      traefik.http.routers.backend.tls: true

    environment:
      CONFIG_PATH: /arkindex.yml

    volumes:
      - ./docker/config.yml:/arkindex.yml:ro

    healthcheck:
      # start_interval is not fully implemented in Docker, until then we will use a short interval all the time
      # https://github.com/moby/moby/issues/45897
      interval: 5s

  worker:
    container_name: ark-worker
    build: .
    command: arkindex rqworker-pool --num-workers 2 -v 1 default high tasks export

    depends_on:
      - db
      - redis
      - backend
    environment:
      CONFIG_PATH: /arkindex.yml

    volumes:
      - ./docker/config.yml:/arkindex.yml:ro

      # Required to host temporary ponos data
      # and share common paths between host and containers
      - /tmp:/tmp

      # Required to run process tasks
      - /var/run/docker.sock:/var/run/docker.sock

  front:
    container_name: ark-front

    build: ../frontend

    depends_on:
      - lb
      - backend

    labels:
      traefik.enable: true
      traefik.http.routers.frontend.rule: Host(`ark.localhost`)
      traefik.http.routers.frontend.tls: true