# Compiles new joystream/node and joystream/apps images if local images not found
# and runs a complete joystream development network
# To prevent build of docker images run docker-compose with "--no-build" arg
version: "3.4"
services:
  joystream-node:
    image: joystream/node:latest
    build:
      # context is relative to the compose file
      context: .
      # dockerfile is relative to the context
      dockerfile: joystream-node.Dockerfile
    container_name: joystream-node
    volumes:
      - /data
    command: --dev --alice --validator --unsafe-ws-external --rpc-cors=all --log runtime --base-path /data
    ports:
      - "127.0.0.1:9944:9944"

  ipfs:
    image: ipfs/go-ipfs:latest
    ports:
      - '127.0.0.1:5001:5001'
      - '127.0.0.1:8080:8080'
    volumes:
      - /data/ipfs
    entrypoint: ''
    command: |
      /bin/sh -c "
        set -e
        /usr/local/bin/start_ipfs config profile apply lowpower
        /usr/local/bin/start_ipfs config --json Gateway.PublicGateways '{\"localhost\": null }'
        /sbin/tini -- /usr/local/bin/start_ipfs daemon --migrate=true
      "

  colossus:
    image: joystream/apps
    restart: on-failure
    depends_on:
      - "joystream-node"
      - "ipfs"
    build:
      context: .
      dockerfile: apps.Dockerfile
    ports:
      - '127.0.0.1:3001:3001'
    command: colossus --dev --ws-provider ws://joystream-node:9944 --ipfs-host ipfs
    environment:
      - DEBUG=*

  db:
    image: postgres:12
    restart: always
    ports:
      - "127.0.0.1:${DB_PORT}:5432"
    volumes:
      - /var/lib/postgresql/data
    env_file:
      # relative to working directory where docker-compose was run from
      - .env
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
      POSTGRES_DB: ${INDEXER_DB_NAME}

  graphql-server:
    image: joystream/apps
    restart: unless-stopped
    build: 
      context: .
      dockerfile: apps.Dockerfile
    env_file:
      # relative to working directory where docker-compose was run from
      - .env
    environment:
      - DB_HOST=db
      - DB_NAME=${PROCESSOR_DB_NAME}
    ports:
      - "127.0.0.1:8081:${GRAPHQL_SERVER_PORT}"
    depends_on: 
      - db
    command: ["workspace", "query-node-root", "server:start:prod"]

  processor:
    image: joystream/apps
    restart: unless-stopped
    build: 
      context: .
      dockerfile: apps.Dockerfile
    env_file:
      # relative to working directory where docker-compose was run from
      - .env
    environment:
      - INDEXER_ENDPOINT_URL=http://indexer-api-gateway:${WARTHOG_APP_PORT}/graphql
      - TYPEORM_HOST=db
      - TYPEORM_DATABASE=${PROCESSOR_DB_NAME}
      - DEBUG=index-builder:*
      - WS_PROVIDER_ENDPOINT_URI=ws://joystream-node:9944
    depends_on:
      - indexer-api-gateway
    command: ["workspace", "query-node-root", "processor:start"]

  indexer:
    image: joystream/apps
    restart: unless-stopped
    build: 
      context: .
      dockerfile: apps.Dockerfile
    env_file:
      # relative to working directory where docker-compose was run from
      - .env
    environment:
      - TYPEORM_HOST=db
      - TYPEORM_DATABASE=${INDEXER_DB_NAME}
      - INDEXER_WORKERS=5
      - PROCESSOR_POLL_INTERVAL=1000 # refresh every second 
      - REDIS_URI=redis://redis:6379/0
      - DEBUG=index-builder:*
      - WS_PROVIDER_ENDPOINT_URI=ws://joystream-node:9944
    depends_on: 
      - db
    command: ["workspace", "query-node-root", "indexer:start"] 

  indexer-api-gateway:
    image: joystream/hydra-indexer-gateway:latest
    restart: unless-stopped
    env_file:
      # relative to working directory where docker-compose was run from
      - .env
    environment:
      - WARTHOG_STARTER_DB_DATABASE=${INDEXER_DB_NAME}
      - WARTHOG_STARTER_DB_HOST=db
      - WARTHOG_STARTER_DB_PASSWORD=${DB_PASS}
      - WARTHOG_STARTER_DB_PORT=${DB_PORT}
      - WARTHOG_STARTER_DB_USERNAME=${DB_USER}
      - WARTHOG_STARTER_REDIS_URI=redis://redis:6379/0
      - WARTHOG_APP_PORT=${WARTHOG_APP_PORT}
      - PORT=${WARTHOG_APP_PORT}
      - DEBUG=*
    ports:
      - "127.0.0.1:4000:4002"
    depends_on:
      - redis
      - db
      - indexer

  redis:
    image: redis:6.0-alpine
    restart: always
    ports:
      - "127.0.0.1:6379:6379"

  pioneer:
    image: joystream/apps
    build:
      context: .
      dockerfile: apps.Dockerfile
    ports:
      - "127.0.0.1:3000:3000"
    command: workspace pioneer start
