version: "3.7"

services:
  app_proxy:
    environment:
      APP_HOST: $APP_FULCRUM_IP
      APP_PORT: 3006

  app:
    image: nmfretz/umbrel-fulcrum:1.0.1@sha256:7ebcb84446e55dbbde7711a4ac2d65ca65c55d0092e6640b41ca2d9c4539a3ff
    depends_on:
      - fulcrum
    restart: on-failure
    environment:
      ELECTRUM_HIDDEN_SERVICE: "${APP_FULCRUM_RPC_HIDDEN_SERVICE}"
      ELECTRUM_LOCAL_SERVICE: "${DEVICE_DOMAIN_NAME}"
      ELECTRUM_HOST: "${APP_FULCRUM_NODE_IP}"
      ELECTRUM_PUBLIC_CONNECTION_PORT: ${APP_FULCRUM_NODE_PORT}
      BITCOIN_HOST: "${APP_BITCOIN_NODE_IP}"
      RPC_USER: "${APP_BITCOIN_RPC_USER}"
      RPC_PASSWORD: "${APP_BITCOIN_RPC_PASS}"
      RPC_PORT: "${APP_BITCOIN_RPC_PORT}"
    volumes:
      - "${APP_DATA_DIR}/data/fulcrum-logs:/fulcrum-logs"
    networks:
      default:
        ipv4_address: $APP_FULCRUM_IP

  fulcrum:
    image: cculianu/fulcrum:v2.1.0@sha256:71cb19ce9f8318edae1b581a793588c98f55f2f28c12e17327c478ed963ef4e3
    init: true
    # Положитесь на стандартный SIGTERM Docker; Fulcrum считает SIGTERM/SIGINT/SIGQUIT изящным
    # Щедрый льготный период предотвращает SIGKILL во время checkpoint/flush при выходе
    stop_grace_period: 5m
    restart: on-failure
    user: "1000:1000"
    environment:
      TCP: 0.0.0.0:${APP_FULCRUM_NODE_PORT}
      ADMIN: 0.0.0.0:${APP_FULCRUM_ADMIN_PORT}
      BITCOIND: ${APP_BITCOIN_NODE_IP}:${APP_BITCOIN_RPC_PORT}
      RPCUSER: ${APP_BITCOIN_RPC_USER}
      RPCPASSWORD: ${APP_BITCOIN_RPC_PASS}
      PEERING: "false"
      ANNOUNCE: "false"
      DATA_DIR: /data
    # Exec Fulcrum как PID1, поэтому он получает SIGTERM напрямую; FIFO+tee зеркально отображает вывод в журналы докера и /logs/fulcrum.log
    # rm -f делает создание FIFO идемпотентным в циклах restarts/crash
    command: >
      sh -c 'rm -f /tmp/fulcrum.pipe; mkfifo /tmp/fulcrum.pipe;
      tee -a /logs/fulcrum.log < /tmp/fulcrum.pipe &
      exec Fulcrum -D /data _ENV_ > /tmp/fulcrum.pipe 2>&1'
    volumes:
      - "${APP_DATA_DIR}/data/fulcrum:/data"
      - "${APP_DATA_DIR}/data/fulcrum-logs:/logs"
    ports:
      - "${APP_FULCRUM_NODE_PORT}:${APP_FULCRUM_NODE_PORT}"
    networks:
      default:
        ipv4_address: $APP_FULCRUM_NODE_IP

  tor:
    image: getumbrel/tor:0.4.7.8@sha256:2ace83f22501f58857fa9b403009f595137fa2e7986c4fda79d82a8119072b6a
    user: "1000:1000"
    restart: on-failure
    volumes:
      - ${APP_DATA_DIR}/torrc:/etc/tor/torrc:ro
      - ${TOR_DATA_DIR}:/data
    environment:
      HOME: "/tmp"
