version: "3.7"

x-logging: &default-logging
  driver: json-file
  options:
    max-size: "10m"
    max-file: "3"

networks:
  shared:
    ipam:
      driver: default
      config:
        - subnet: 10.10.10.0/24

services:
  sia:
    build:
      context: ./docker/sia
      dockerfile: Dockerfile
      args:
        branch: portal-latest
    container_name: sia
    restart: unless-stopped
    logging: *default-logging
    environment:
      - SIA_MODULES=gctwra
      - SKYD_DISK_CACHE_ENABLED=${SKYD_DISK_CACHE_ENABLED:-true}
      - SKYD_DISK_CACHE_SIZE=${SKYD_DISK_CACHE_SIZE:-53690000000} # 50GB
      - SKYD_DISK_CACHE_MIN_HITS=${SKYD_DISK_CACHE_MIN_HITS:-3}
      - SKYD_DISK_CACHE_HIT_PERIOD=${SKYD_DISK_CACHE_HIT_PERIOD:-3600} # 1h
    env_file:
      - .env
    volumes:
      - ./docker/data/sia:/sia-data
    networks:
      shared:
        ipv4_address: 10.10.10.10
    expose:
      - 9980

  certbot:
    image: certbot/dns-route53:v1.25.0
    entrypoint: sh /entrypoint.sh
    container_name: certbot
    restart: unless-stopped
    logging: *default-logging
    env_file:
      - .env
    environment:
      - CERTBOT_ARGS=--dns-route53
    volumes:
      - ./docker/certbot/entrypoint.sh:/entrypoint.sh
      - ./docker/data/certbot:/etc/letsencrypt

  nginx:
    # uncomment "build" and comment out "image" to build from sources
    # build:
    #   context: https://github.com/SkynetLabs/skynet-webportal.git#master
    #   dockerfile: ./docker/nginx/Dockerfile
    image: skynetlabs/nginx
    container_name: nginx
    restart: unless-stopped
    logging: *default-logging
    env_file:
      - .env
    volumes:
      - ./docker/data/nginx/cache:/data/nginx/cache
      - ./docker/data/nginx/blocker:/data/nginx/blocker
      - ./docker/data/nginx/logs:/usr/local/openresty/nginx/logs
      - ./docker/data/nginx/skynet:/data/nginx/skynet:ro
      - ./docker/data/sia/apipassword:/data/sia/apipassword:ro
      - ./docker/data/certbot:/etc/letsencrypt
      - ./docker/nginx/libs:/etc/nginx/libs
      - ./docker/nginx/conf.d:/etc/nginx/conf.d
      - ./docker/nginx/conf.d.templates:/etc/nginx/templates
      - ./docker/nginx/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
    networks:
      shared:
        ipv4_address: 10.10.10.30
    ports:
      - "443:443"
      - "80:80"
    depends_on:
      - sia
      - handshake-api
      - dnslink-api
      - website

  website:
    # uncomment "build" and comment out "image" to build from sources
    # build:
    #   context: https://github.com/SkynetLabs/skynet-webportal.git#master
    #   dockerfile: ./packages/website/Dockerfile
    image: skynetlabs/website
    container_name: website
    restart: unless-stopped
    logging: *default-logging
    env_file:
      - .env
    networks:
      shared:
        ipv4_address: 10.10.10.35
    expose:
      - 9000

  handshake:
    image: skynetlabs/hsd:3.0.1
    command: --chain-migrate=2 --wallet-migrate=1
    container_name: handshake
    restart: unless-stopped
    logging: *default-logging
    environment:
      - HSD_LOG_CONSOLE=false
      - HSD_HTTP_HOST=0.0.0.0
      - HSD_NETWORK=main
      - HSD_PORT=12037
    env_file:
      - .env
    volumes:
      - ./docker/data/handshake/.hsd:/root/.hsd
    networks:
      shared:
        ipv4_address: 10.10.10.40
    expose:
      - 12037

  handshake-api:
    # uncomment "build" and comment out "image" to build from sources
    # build:
    #   context: https://github.com/SkynetLabs/skynet-webportal.git#master
    #   dockerfile: ./packages/handshake-api/Dockerfile
    image: skynetlabs/handshake-api
    container_name: handshake-api
    restart: unless-stopped
    logging: *default-logging
    environment:
      - HOSTNAME=0.0.0.0
      - HSD_HOST=handshake
      - HSD_NETWORK=main
      - HSD_PORT=12037
    env_file:
      - .env
    networks:
      shared:
        ipv4_address: 10.10.10.50
    expose:
      - 3100
    depends_on:
      - handshake

  dnslink-api:
    # uncomment "build" and comment out "image" to build from sources
    # build:
    #   context: https://github.com/SkynetLabs/skynet-webportal.git#master
    #   dockerfile: ./packages/dnslink-api/Dockerfile
    image: skynetlabs/dnslink-api
    container_name: dnslink-api
    restart: unless-stopped
    logging: *default-logging
    networks:
      shared:
        ipv4_address: 10.10.10.55
    expose:
      - 3100

  health-check:
    # uncomment "build" and comment out "image" to build from sources
    # build:
    #   context: https://github.com/SkynetLabs/skynet-webportal.git#master
    #   dockerfile: ./packages/health-check/Dockerfile
    image: skynetlabs/health-check
    container_name: health-check
    restart: unless-stopped
    logging: *default-logging
    volumes:
      - ./docker/data/health-check/state:/usr/app/state
    networks:
      shared:
        ipv4_address: 10.10.10.60
    env_file:
      - .env
    environment:
      - HOSTNAME=0.0.0.0
      - STATE_DIR=/usr/app/state
    expose:
      - 3100
