version: "3"    

# Run `docker-compose up dev` for bootstrapping your development environment
# Doing so will expose NBXplorer, Bitcoind RPC and postgres port to the host so that tests can Run,
# The Visual Studio launch setting `Docker-regtest` is configured to use this environment.
services:

  tests:
    build:
      context: ..
      dockerfile: BTCPayServer.Tests/Dockerfile
    environment:
      TESTS_BTCRPCCONNECTION: server=http://bitcoind:43782;ceiwHEbqWI83:DwubwWsoo3
      TESTS_LTCRPCCONNECTION: server=http://litecoind:43782;ceiwHEbqWI83:DwubwWsoo3
      TESTS_BTCNBXPLORERURL: http://nbxplorer:32838/
      TESTS_LTCNBXPLORERURL: http://nbxplorer:32838/
      TESTS_DB: "Postgres"
      TESTS_POSTGRES: User ID=postgres;Host=postgres;Port=5432;Database=btcpayserver
      TESTS_MYSQL: User ID=root;Host=mysql;Port=3306;Database=btcpayserver
      TESTS_PORT: 80
      TESTS_HOSTNAME: tests
      TESTS_RUN_EXTERNAL_INTEGRATION: ${TESTS_RUN_EXTERNAL_INTEGRATION:-false}
      TESTS_AzureBlobStorageConnectionString: ${TESTS_AzureBlobStorageConnectionString:-none}
      TEST_MERCHANTLIGHTNINGD: "type=clightning;server=unix://etc/merchant_lightningd_datadir/lightning-rpc"
      TEST_CUSTOMERLIGHTNINGD: "type=clightning;server=unix://etc/customer_lightningd_datadir/lightning-rpc"
      TEST_MERCHANTCHARGE: "type=charge;server=http://lightning-charged:9112/;api-token=foiewnccewuify"
      TEST_MERCHANTLND: "https://lnd:lnd@merchant_lnd:8080/"
      TESTS_INCONTAINER: "true"
    expose:
      - "80"
    links:
      - dev
    extra_hosts: 
      - "tests:127.0.0.1"
    volumes:
      - "customer_lightningd_datadir:/etc/customer_lightningd_datadir"
      - "merchant_lightningd_datadir:/etc/merchant_lightningd_datadir"

  # The dev container is not actually used, it is just handy to run `docker-compose up dev` to start all services
  dev: 
    image: btcpayserver/bitcoin:0.18.0
    environment:
      BITCOIN_NETWORK: regtest
      BITCOIN_EXTRA_ARGS: |
        deprecatedrpc=signrawtransaction
        connect=bitcoind:39388
    links:
      - nbxplorer
      - postgres
      - mysql
      - customer_lightningd
      - merchant_lightningd
      - lightning-charged
      - customer_lnd
      - merchant_lnd

  devlnd: 
    image: btcpayserver/bitcoin:0.18.0
    environment:
      BITCOIN_NETWORK: regtest
      BITCOIN_EXTRA_ARGS: |
        deprecatedrpc=signrawtransaction
        connect=bitcoind:39388
    links:
      - nbxplorer
      - postgres
      - mysql
      - customer_lnd
      - merchant_lnd



  nbxplorer:
    image: nicolasdorier/nbxplorer:2.0.0.48
    restart: unless-stopped
    ports:
      - "32838:32838"
    expose: 
      - "32838"
    environment:
      NBXPLORER_NETWORK: regtest
      NBXPLORER_CHAINS: "btc,ltc"
      NBXPLORER_BTCRPCURL: http://bitcoind:43782/
      NBXPLORER_BTCNODEENDPOINT: bitcoind:39388
      NBXPLORER_BTCRPCUSER: ceiwHEbqWI83
      NBXPLORER_BTCRPCPASSWORD: DwubwWsoo3
      NBXPLORER_LTCRPCURL: http://litecoind:43782/
      NBXPLORER_LTCNODEENDPOINT: litecoind:39388
      NBXPLORER_LTCRPCUSER: ceiwHEbqWI83
      NBXPLORER_LTCRPCPASSWORD: DwubwWsoo3
      NBXPLORER_BIND: 0.0.0.0:32838
      NBXPLORER_VERBOSE: 1
      NBXPLORER_NOAUTH: 1
    links:
      - bitcoind
      - litecoind


  bitcoind:
    restart: unless-stopped
    image: btcpayserver/bitcoin:0.18.0
    environment:
      BITCOIN_NETWORK: regtest
      BITCOIN_EXTRA_ARGS: |-
        rpcuser=ceiwHEbqWI83
        rpcpassword=DwubwWsoo3
        rpcport=43782
        rpcbind=0.0.0.0:43782
        port=39388
        whitelist=0.0.0.0/0
        zmqpubrawblock=tcp://0.0.0.0:28332
        zmqpubrawtx=tcp://0.0.0.0:28333
        deprecatedrpc=signrawtransaction
    ports: 
      - "43782:43782"
    expose:
      - "43782" # RPC
      - "39388" # P2P
      - "28332" # ZMQ
      - "28333" # ZMQ
    volumes:
      - "bitcoin_datadir:/data"

  customer_lightningd:
    image: btcpayserver/lightning:v0.7.0-1-dev
    stop_signal: SIGKILL
    restart: unless-stopped
    environment: 
      EXPOSE_TCP: "true"
      LIGHTNINGD_OPT: |
        bitcoin-datadir=/etc/bitcoin
        bitcoin-rpcconnect=bitcoind
        network=regtest
        bind-addr=0.0.0.0
        announce-addr=customer_lightningd
        log-level=debug
        funding-confirms=1
        dev-broadcast-interval=1000
        dev-bitcoind-poll=1
    ports:
      - "30992:9835" # api port
    expose:
      - "9735" # server port
      - "9835" # api port
    volumes:
      - "bitcoin_datadir:/etc/bitcoin"
      - "customer_lightningd_datadir:/root/.lightning"
    links:
      - bitcoind

  lightning-charged:
    image: shesek/lightning-charge:0.4.6-standalone
    restart: unless-stopped
    environment:
      NETWORK: regtest
      API_TOKEN: foiewnccewuify
      BITCOIND_RPCCONNECT: bitcoind
    volumes:
      - "bitcoin_datadir:/etc/bitcoin"
      - "lightning_charge_datadir:/data"
      - "merchant_lightningd_datadir:/etc/lightning"
    expose:
      - "9112" # Charge
      - "9735" # Lightning
    ports:
      - "54938:9112" # Charge
    links:
      - bitcoind
      - merchant_lightningd

  merchant_lightningd:
    image: btcpayserver/lightning:v0.7.0-1-dev
    stop_signal: SIGKILL
    environment: 
      EXPOSE_TCP: "true"
      LIGHTNINGD_OPT: |
        bitcoin-datadir=/etc/bitcoin
        bitcoin-rpcconnect=bitcoind
        bind-addr=0.0.0.0
        announce-addr=merchant_lightningd
        funding-confirms=1
        network=regtest
        log-level=debug
        dev-broadcast-interval=1000
    ports:
      - "30993:9835" # api port
    expose:
      - "9735" # server port
      - "9835" # api port
    volumes:
      - "bitcoin_datadir:/etc/bitcoin"
      - "merchant_lightningd_datadir:/root/.lightning"
    links:
      - bitcoind

  litecoind:
    restart: unless-stopped
    image: nicolasdorier/docker-litecoin:0.16.3
    environment:
      BITCOIN_EXTRA_ARGS: |-
        rpcuser=ceiwHEbqWI83
        rpcpassword=DwubwWsoo3
        regtest=1
        rpcport=43782
        port=39388
        whitelist=0.0.0.0/0
    ports: 
      - "43783:43782"
    expose:
      - "43782" # RPC
      - "39388" # P2P

  postgres:
    image:  postgres:9.6.5
    ports:
      - "39372:5432"
    expose:
      - "5432"
      
  mysql:
    image:  mysql:8.0.12
    expose:
      - "3306"
    ports:
      - "33036:3306"
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes

  merchant_lnd:
    image: btcpayserver/lnd:v0.6-beta
    restart: unless-stopped
    environment:
      LND_CHAIN: "btc"
      LND_ENVIRONMENT: "regtest"
      LND_EXPLORERURL: "http://nbxplorer:32838/"
      LND_EXTRA_ARGS: |
        restlisten=0.0.0.0:8080
        rpclisten=127.0.0.1:10008
        rpclisten=0.0.0.0:10009
        bitcoin.node=bitcoind
        bitcoind.rpchost=bitcoind:43782
        bitcoind.zmqpubrawblock=tcp://bitcoind:28332
        bitcoind.zmqpubrawtx=tcp://bitcoind:28333
        externalip=merchant_lnd:9735
        bitcoin.defaultchanconfs=1
        no-macaroons=1
        debuglevel=debug
        noseedbackup=1
        trickledelay=1000
    ports:
      - "53280:8080"
    expose:
      - "9735"
    volumes:
      - "merchant_lnd_datadir:/data"
      - "bitcoin_datadir:/deps/.bitcoin"
    links:
      - bitcoind

  customer_lnd:
    image: btcpayserver/lnd:v0.6-beta
    restart: unless-stopped
    environment:
      LND_CHAIN: "btc"
      LND_ENVIRONMENT: "regtest"
      LND_EXPLORERURL: "http://nbxplorer:32838/"
      LND_EXTRA_ARGS: |
        restlisten=0.0.0.0:8080
        rpclisten=127.0.0.1:10008
        rpclisten=0.0.0.0:10009
        bitcoin.node=bitcoind
        bitcoind.rpchost=bitcoind:43782
        bitcoind.zmqpubrawblock=tcp://bitcoind:28332
        bitcoind.zmqpubrawtx=tcp://bitcoind:28333
        externalip=customer_lnd:10009
        bitcoin.defaultchanconfs=1
        no-macaroons=1
        debuglevel=debug
        noseedbackup=1
        trickledelay=1000
    ports:
      - "53281:8080"
    expose:
      - "8080"
      - "10009"
    volumes:
      - "customer_lnd_datadir:/root/.lnd"
      - "bitcoin_datadir:/deps/.bitcoin"
    links:
      - bitcoind

volumes:
    bitcoin_datadir:
    customer_lightningd_datadir:
    merchant_lightningd_datadir:
    lightning_charge_datadir:
    customer_lnd_datadir:
    merchant_lnd_datadir:
