# Adopted from https://github.com/blockscout/blockscout/blob/v5.3.1-beta/docker-compose/docker-compose-no-build-geth.yml
# This docker-compose only supports blockscout 5.x

version: '3.9'

services:
  redis_db:
    image: redis:alpine
    restart: always

  db:
    image: postgres:14
    restart: always
    command: postgres -c 'max_connections=200'
    environment:
      POSTGRES_DB: 'blockscout'
      POSTGRES_USER: 'blockscout'
      POSTGRES_PASSWORD: 'ceWb1MeLBEeOIfk65gU8EjF8'
    healthcheck:
      test: ["CMD-SHELL", "sleep 1 && pg_isready -U blockscout -d blockscout"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s

  backend:
    image: blockscout/blockscout:5.3.1
    restart: always
    stop_grace_period: 5m
    depends_on:
      - db
      - redis_db
      - smart-contract-verifier
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    command:
      - sh
      - -c
      - |
        set -e
        mkdir -p logs/prod
        bin/blockscout eval "Elixir.Explorer.ReleaseTasks.create_and_migrate()" >> logs/prod/migrate.log
        bin/blockscout start >> logs/prod/backend.log &
        tail -f logs/prod/backend.log
    env_file:
      - "./envs/common-blockscout.env"
    environment:
      ETHEREUM_JSONRPC_HTTP_URL: ${DOCKER_RPC_HTTP_URL:-http://host.docker.internal:8545/}
      ETHEREUM_JSONRPC_TRACE_URL: ${DOCKER_RPC_HTTP_URL:-http://host.docker.internal:8545/}
      INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER: ${DOCKER_DISABLE_TRACER:-true}

  frontend:
    image: ghcr.io/blockscout/frontend:latest
    platform: linux/amd64
    restart: always
    env_file:
      - "./envs/common-frontend.env"

  smart-contract-verifier:
    image: ghcr.io/blockscout/smart-contract-verifier:latest
    platform: linux/amd64
    restart: always
    env_file:
      - "./envs/common-smart-contract-verifier.env"

  proxy:
    depends_on:
      - backend
      - frontend
    image: nginx
    volumes:
      - "./nginx.conf:/etc/nginx/conf.d/default.conf:ro"
    environment:
      BACK_PROXY_PASS: ${BACK_PROXY_PASS:-http://backend:4000}
      FRONT_PROXY_PASS: ${FRONT_PROXY_PASS:-http://frontend:3000}
    ports:
      - ${DOCKER_LISTEN:-4000}:80
