# This docker-compose file is intended for development use.  You can simply run
# `docker-compose up -d` in the repository and it should build and run all
# required parts of the application. See README.md for details.
#
# For a production docker setup, please check the corresponding documentation.

version: '3'

services:
  postgres:
    image: "openmaptiles/postgis:6.0"
    environment:
      POSTGRES_USER: obs
      POSTGRES_PASSWORD: obs
      POSTGRES_DB: obs
    ports:
      - '5432:5432'
    volumes:
    - ./local/postgres/data:/var/lib/postgresql/data

  api:
    image: openbikesensor-api
    build:
      context: ./api/
      dockerfile: Dockerfile
    volumes:
      - ./api/obs:/opt/obs/api/obs
      - ./api/scripts/obs:/opt/obs/scripts/obs
      - ./api/tools:/opt/obs/api/tools
      - ./api/config.dev.py:/opt/obs/api/config.py
      - ./api/config.overrides.py:/opt/obs/api/config.overrides.py
      - ./frontend/build:/opt/obs/frontend/build
      - ./tile-generator:/opt/obs/tile-generator
      - ./local/api-data:/data
      - ./tile-generator/data/:/tiles
      - ./api/migrations:/opt/obs/api/migrations
      - ./api/alembic.ini:/opt/obs/api/alembic.ini
    depends_on:
      - postgres
      - keycloak
    ports:
      - '3000:3000'
    restart: on-failure
    command:
      - openbikesensor-api

  worker:
    image: openbikesensor-api
    build:
      context: ./api/
      dockerfile: Dockerfile
    volumes:
      - ./api/obs:/opt/obs/api/obs
      - ./api/scripts/obs:/opt/obs/scripts/obs
      - ./api/tools:/opt/obs/api/tools
      - ./api/config.dev.py:/opt/obs/api/config.py
      - ./api/config.overrides.py:/opt/obs/api/config.overrides.py
      - ./local/api-data:/data
    depends_on:
      - postgres
      - keycloak
    restart: on-failure
    entrypoint:
      - python
      - tools/process_track.py

  frontend:
    image: openbikesensor-frontend
    build:
      context: ./frontend
    volumes:
      - ./frontend/src:/opt/obs/frontend/src
      - ./frontend/public:/opt/obs/frontend/public
      - ./frontend/tsconfig.json:/opt/obs/frontend/tsconfig.json
      - ./frontend/package.json:/opt/obs/frontend/package.json
      - ./frontend/webpack.config.js:/opt/obs/frontend/webpack.config.js
    depends_on:
      - api
    environment:
      # used for proxy only
      - API_URL=http://api:3000/
    ports:
      - '3001:3001'
    restart: on-failure
    command:
      - npm
      - start

  keycloak:
    image: jboss/keycloak
    ports:
      - 3003:8080
    depends_on:
      - postgres
    environment:
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
      KEYCLOAK_FRONTEND_URL: http://localhost:3003/auth/
      DB_VENDOR: postgres
      DB_ADDR: postgres
      DB_DATABASE: obs
      DB_USER: obs
      DB_PASSWORD: obs