# This version must match the MAKE_DC_VERSION value below
version: "3"

volumes:
  pgdata:

networks:
  postgres:
    driver: bridge

services:

  postgres:
    image: "${POSTGIS_IMAGE:-openmaptiles/postgis}:${TOOLS_VERSION}"
    # Use "command: postgres -c jit=off" for PostgreSQL 11+ because of slow large MVT query processing
    # Use "shm_size: 512m" if you want to prevent a possible 'No space left on device' during 'make generate-tiles-pg'
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - postgres
    ports:
      - "${PGPORT:-5432}:${PGPORT:-5432}"
    env_file: .env
    environment:
      # postgress container uses old variable names
      POSTGRES_DB: ${PGDATABASE:-openmaptiles}
      POSTGRES_USER: ${PGUSER:-openmaptiles}
      POSTGRES_PASSWORD: ${PGPASSWORD:-openmaptiles}
      PGPORT: ${PGPORT:-5432}

  import-data:
    image: "openmaptiles/import-data:${TOOLS_VERSION}"
    env_file: .env
    networks:
      - postgres

  openmaptiles-tools: &openmaptiles-tools
    image: "openmaptiles/openmaptiles-tools:${TOOLS_VERSION}"
    env_file: .env
    environment:
      # Must match the version of this file (first line)
      # download-osm will use it when generating a composer file
      MAKE_DC_VERSION: "3"
      # Allow DIFF_MODE, MIN_ZOOM, and MAX_ZOOM to be overwritten from shell
      DIFF_MODE: ${DIFF_MODE}
      MIN_ZOOM: ${MIN_ZOOM}
      MAX_ZOOM: ${MAX_ZOOM}
      #Provide BBOX from *.bbox file if exists, else from .env
      BBOX: ${BBOX}
      # Imposm configuration file describes how to load updates when enabled
      IMPOSM_CONFIG_FILE: ${IMPOSM_CONFIG_FILE}
      # Control import-sql processes
      MAX_PARALLEL_PSQL: ${MAX_PARALLEL_PSQL}
      PGDATABASE: ${PGDATABASE:-openmaptiles}
      PGUSER: ${PGUSER:-openmaptiles}
      PGPASSWORD: ${PGPASSWORD:-openmaptiles}
      PGPORT: ${PGPORT:-5432}
      MBTILES_FILE: ${MBTILES_FILE}
    networks:
      - postgres
    volumes:
      - .:/tileset
      - ./data:/import
      - ./data:/export
      - ./build/sql:/sql
      - ./build:/mapping
      - ./cache:/cache
      - ./style:/style

  update-osm:
    <<: *openmaptiles-tools
    command: import-update

  generate-changed-vectortiles:
    image: "openmaptiles/generate-vectortiles:${TOOLS_VERSION}"
    command: ./export-list.sh
    volumes:
      - ./data:/export
      - ./build/openmaptiles.tm2source:/tm2source
    networks:
      - postgres
    env_file: .env
    environment:
      MBTILES_NAME: ${MBTILES_FILE}
      # Control tilelive-copy threads
      COPY_CONCURRENCY: ${COPY_CONCURRENCY}
      PGDATABASE: ${PGDATABASE:-openmaptiles}
      PGUSER: ${PGUSER:-openmaptiles}
      PGPASSWORD: ${PGPASSWORD:-openmaptiles}
      PGPORT: ${PGPORT:-5432}

  generate-vectortiles:
    image: "openmaptiles/generate-vectortiles:${TOOLS_VERSION}"
    volumes:
      - ./data:/export
      - ./build/openmaptiles.tm2source:/tm2source
    networks:
      - postgres
    env_file: .env
    environment:
      MBTILES_NAME: ${MBTILES_FILE}
      BBOX: ${BBOX}
      MIN_ZOOM: ${MIN_ZOOM}
      MAX_ZOOM: ${MAX_ZOOM}
      # Control tilelive-copy threads
      COPY_CONCURRENCY: ${COPY_CONCURRENCY}
      #
      PGDATABASE: ${PGDATABASE:-openmaptiles}
      PGUSER: ${PGUSER:-openmaptiles}
      PGPASSWORD: ${PGPASSWORD:-openmaptiles}
      PGPORT: ${PGPORT:-5432}

  postserve:
    image: "openmaptiles/openmaptiles-tools:${TOOLS_VERSION}"
    command: "postserve ${TILESET_FILE} --verbose --serve=${OMT_HOST:-http://localhost}:${PPORT:-8090}"
    env_file: .env
    environment:
      TILESET_FILE: ${TILESET_FILE}
    networks:
      - postgres
    ports:
      - "${PPORT:-8090}:${PPORT:-8090}"
    volumes:
      - .:/tileset

  maputnik_editor:
    image: "maputnik/editor"
    ports:
      - "8088:8888"

  tileserver-gl:
    image: "maptiler/tileserver-gl:latest"
    command:
      - --port
      - "${TPORT:-8080}"
      - --config
      - "/style/config.json"
    ports:
      - "${TPORT:-8080}:${TPORT:-8080}"
    volumes:
      - ./data:/data
      - ./style:/style
      - ./build:/build
