## YMMV and this is not supported but should be a few steps away from deployable.
version: '3.4'
services:

############
## Speech ##
############
  speech:
    build:
      context: .
      dockerfile: Dockerfile
    # restart: always
    expose:
      - 3000
    volumes:
      - ../data/spee.ch:/data
    labels:
      # https://docs.traefik.io/user-guide/docker-and-lets-encrypt/
      - "traefik.backend=speech"
      - "traefik.docker.network=green"
      - "traefik.frontend.rule=Host:YOURDOMAINHERE"
      - "traefik.expose=true"
      - "traefik.port=3000"
    networks:
      green:
        ipv4_address: 10.10.0.6
        aliases:
          - speech

#############
## Lbrynet ##
#############
  lbrynet:
    build:
      context: ../lbrynet-daemon/
      dockerfile: Dockerfile
    # restart: always
    expose:
      - 4444
      - 50001
    ## host volumes for persistent data such as wallet private keys.
    volumes:
      - ../data/lbrynet:/data
    labels:
      test: traefik.enable=false
    networks:
      green:
        ipv4_address: 10.10.0.7
        aliases:
          - lbrynet

#############
## MariaDB ##
#############
## https://hub.docker.com/r/_/mariadb/
  mysql:
    image: mariadb
    # restart: always
    environment:
      MYSQL_SERVER: 10.10.0.8
      MYSQL_USER: replaceme
      MYSQL_PASSWORD: REPLACEME
      MYSQL_DATABASE: speech
      MYSQL_ROOT_PASSWORD: REPLACEME
    expose:
      - 3306
    volumes:
      - ../data/db:/var/lib/mysql
    labels:
      test: traefik.enable=false
    networks:
      green:
        ipv4_address: 10.10.0.8
        aliases:
          - mysql

#######################
## Adminer container ##
#######################
  adminer:
    image: adminer
    # restart: always
    links:
      - "mysql:database"
    depends_on:
      - mysql
    labels:
      # https://docs.traefik.io/user-guide/docker-and-lets-encrypt/
      - "traefik.backend=adminer"
      - "traefik.docker.network=green"
      - "traefik.frontend.rule=Host:adminer.YOURDOMAINHERE"
      - "traefik.expose=true"
      - "traefik.port=8080"
    # healthcheck:
    #   test: ["CMD", "curl", "--fail", "http://localhost:8080/", "||", "exit", "1"]
    networks:
      green:
        ipv4_address: 10.10.0.9
        aliases:
          - adminer

#######################
## Traefik container ##
#######################
## https://www.digitalocean.com/community/tutorials/how-to-use-traefik-as-a-reverse-proxy-for-docker-containers-on-ubuntu-16-04
  lbrynet
    image: lbrynetalpine
    # command: --api --docker --docker.domain=docker.localhost --logLevel=DEBUG
    command: --api  --docker --logLevel=ERROR
    depends_on:
      - adminer
    ports:
      - target: 80
        published: 80
        mode: host
      - target: 443
        published: 443
        mode: host
    expose:
      - 8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/persistence/traefik/traefik.toml:/traefik.toml
      ## This is going to be stored by default in the following host dir in staging.
      #  There is a rate limit for how many issuances you can request per week.
      #  Because of this we will store the acme.json file persistently.
      #  In production we are going to need to figure out how it'll work with Kubernetes or variant.
      - ../data/traefik/:/opt/traefik/
    labels:
      # https://docs.traefik.io/user-guide/docker-and-lets-encrypt/
      - "traefik.backend=proxy"
      - "traefik.docker.network=green"
      - "traefik.frontend.rule=Host:monitor.YOURDOMAINHERE"
      - "traefik.expose=true"
      - "traefik.port=8080"
    healthcheck:
       test: ["CMD", "traefik", "healthcheck"]
       timeout: 10s
       retries: 3
    networks:
      green:
        ipv4_address: 10.10.0.10
        aliases:
          - traefik

#########################
## Network Definitions ##
#########################
networks:
  green:
    driver: bridge
    ipam:
        config:
          - subnet: 10.10.0.0/16