services: joinmarket: container_name: jm_regtest_joinmarket extends: file: docker-compose-common.yml service: joinmarket_ng_native environment: READY_FILE: /root/.regtest-initializer/btc_fully_synched BITCOIN__RPC_USER: joinmarket BITCOIN__RPC_PASSWORD: joinmarket ports: - '28183:28183' # jmwalletd api (exposed for "init setup" routine) volumes: - 'joinmarket_datadir:/root/.joinmarket-ng' - 'initializer_datadir:/root/.regtest-initializer' - 'tor_datadir:/var/lib/tor:ro' depends_on: bitcoind: condition: service_healthy bitcoind_regtest_initializer: condition: service_started joinmarket_ng_orderbook_watcher: condition: service_healthy tor: condition: service_healthy joinmarket2: container_name: jm_regtest_joinmarket2 extends: file: docker-compose-common.yml service: joinmarket_jam_standalone_ng environment: BITCOIN__RPC_USER: joinmarket2 BITCOIN__RPC_PASSWORD: joinmarket2 TAKER__MINIMUM_MAKERS: 2 # necessary to do coinjoins with this regtest setup TAKER__MAKER_TIMEOUT_SEC: 30 # easier testing of maker timeouts on regtest ports: - '29080:80' - '29183:28183' # jmwalletd api (exposed for "init setup" routine) volumes: - 'joinmarket2_datadir:/root/.joinmarket-ng' depends_on: bitcoind: condition: service_healthy bitcoind_regtest_initializer: condition: service_started joinmarket3: container_name: jm_regtest_joinmarket3 extends: file: docker-compose-common.yml service: joinmarket_native environment: READY_FILE: /root/.regtest-initializer/btc_fully_synched jm_rpc_wallet_file: jm_tertiary jm_rpc_user: joinmarket3 jm_rpc_password: joinmarket3 CREATE_WALLET_PARAMS_DESCRIPTORS: 'false' ports: - '30601:62601' # obwatch - '30183:28183' # jmwalletd api (exposed for "init setup" routine) - '30283:28283' # jmwalletd websocket volumes: - 'joinmarket3_datadir:/root/.joinmarket' - 'initializer_datadir:/root/.regtest-initializer' depends_on: bitcoind: condition: service_healthy bitcoind_regtest_initializer: condition: service_started irc: condition: service_started tor: condition: service_healthy joinmarket4: container_name: jm_regtest_joinmarket4 extends: file: docker-compose-common.yml service: joinmarket_jam_standalone environment: APP_USER: joinmarket APP_PASSWORD: joinmarket jm_rpc_wallet_file: jm_quaternary jm_rpc_cookie_file: /root/.bitcoin_data/regtest/.cookie ports: - '31080:80' - '31183:28183' # jmwalletd api (exposed for "init setup" routine) volumes: - 'joinmarket4_datadir:/root/.joinmarket' - 'bitcoin_datadir:/root/.bitcoin_data' # mount bitcoind dir to access .cookie file - 'tor_datadir:/var/lib/tor:ro' depends_on: bitcoind: condition: service_healthy bitcoind_regtest_initializer: condition: service_started irc: condition: service_started tor: condition: service_healthy joinmarket5: container_name: jm_regtest_joinmarket5 extends: file: docker-compose-common.yml service: joinmarket_ng_peer ports: - '32183:28183' # jmwalletd api (exposed for "init setup" routine) volumes: - 'joinmarket5_datadir:/root/.joinmarket-ng' - 'tor_datadir:/var/lib/tor:ro' depends_on: bitcoind: condition: service_healthy bitcoind_regtest_initializer: condition: service_started joinmarket_ng_orderbook_watcher: condition: service_healthy tor: condition: service_healthy joinmarket_clientserver_directory_node: container_name: jm_regtest_joinmarket_clientserver_directory_node build: context: ./dockerfile-deps/joinmarket/directory_node dockerfile: Dockerfile restart: unless-stopped environment: jm_hidden_service_dir: \/root\/.joinmarket\/hidden_service_dir jm_directory_nodes: ${JM_REF_DIRECTORY_NODES:?You must set the reference directory node address in generated env file} jm_blockchain_source: regtest jm_network: testnet volumes: - 'joinmarket_clientserver_directory_node_datadir:/root/.joinmarket' - './out/hidden_service_dir:/root/.joinmarket/hidden_service_dir:z' healthcheck: test: ['CMD', 'supervisorctl', 'status'] interval: 10s timeout: 10s retries: 20 start_period: 60s start_interval: 3s depends_on: tor: condition: service_healthy joinmarket_ng_orderbook_watcher: container_name: jm_regtest_joinmarket_ng_orderbook_watcher image: ghcr.io/joinmarket-ng/joinmarket-ng/orderbook-watcher:main restart: unless-stopped environment: NETWORK_CONFIG__NETWORK: testnet NETWORK_CONFIG__BITCOIN_NETWORK: regtest DIRECTORY_NODES: ${JM_ALL_DIRECTORY_NODES:?You must set the directory node addresses in generated env file} TOR__SOCKS_HOST: tor TOR__SOCKS_PORT: 9050 LOGGING__LEVEL: DEBUG expose: - 8000 ports: - '31800:8000' healthcheck: test: ['CMD', 'python', '-c', "import socket; s = socket.create_connection(('127.0.0.1', 8000), 5); s.close()"] interval: 10s timeout: 10s retries: 20 start_period: 60s start_interval: 3s depends_on: joinmarket_ng_directory_node: condition: service_healthy tor: condition: service_healthy joinmarket_ng_directory_node: container_name: jm_regtest_joinmarket_ng_directory_node image: ghcr.io/joinmarket-ng/joinmarket-ng/directory-server:main restart: unless-stopped environment: NETWORK_CONFIG__NETWORK: testnet DIRECTORY_SERVER__HOST: 0.0.0.0 DIRECTORY_SERVER__PORT: 5223 LOGGING__LEVEL: DEBUG command: ['python', '-m', 'directory_server.main'] healthcheck: test: ['CMD', 'python', '-c', "import socket; s = socket.socket(); s.connect(('127.0.0.1', 5223)); s.close()"] interval: 10s timeout: 10s retries: 20 start_period: 60s start_interval: 3s networks: default: ipv4_address: 172.30.0.21 tor: depends_on: tor_init: condition: service_completed_successfully container_name: jm_regtest_tor image: ghcr.io/m0wer/docker-tor:latest restart: unless-stopped volumes: - './tor/conf:/etc/tor:ro' - 'tor_datadir:/var/lib/tor' healthcheck: test: [ 'CMD-SHELL', 'test -f /var/lib/tor/ng-directory/hostname && test $(wc -c < /var/lib/tor/control_auth_cookie 2>/dev/null || echo 0) -eq 32', ] interval: 10s timeout: 10s retries: 60 start_period: 120s tor_init: container_name: jm_regtest_tor_init image: busybox:latest restart: 'no' command: [ 'sh', '-c', 'mkdir -p /var/lib/tor/ng-directory && cp -f /source/ng/* /var/lib/tor/ng-directory/ && chown -R 1000:1000 /var/lib/tor && chmod 700 /var/lib/tor/ng-directory && chmod 600 /var/lib/tor/ng-directory/*', ] volumes: - 'tor_datadir:/var/lib/tor' - './out/ng_directory_hidden_service:/source/ng:ro,z' irc: container_name: jm_regtest_irc restart: unless-stopped image: ghcr.io/ergochat/ergo:v2.15.0@sha256:135cd42c6300d957e0045ee53fbe886e43e1c04bb621391ed7b8940c174d68f3 expose: - 6667 volumes: - 'irc_datadir:/ircd' bitcoind: container_name: jm_regtest_bitcoind restart: unless-stopped image: polarlightning/bitcoind:29.0@sha256:4521294ac25fdbf1492a8cc5ea987463a5f244b82546d29bbe8451db39f36f3a command: # rpcauth (user=regtest; password=regtest) # rpcauth (user=joinmarket; password=joinmarket) # rpcauth (user=joinmarket2; password=joinmarket2) # rpcauth (user=joinmarket3; password=joinmarket3) -rpcauth=regtest:20b58677979ad9d3cf4b78b1d6e85e44$$2ec3e1e1c00c7c58d7aff1d4bf96e4a984ea1af5d676d862fd0faa857a1d4d7c -rpcauth=joinmarket:260b4c5b1fbd09d75a4aabf90226282f$$76e170af088d43a588992cdd5e7bae2242b03c33aa672cccfd1fb75f9281299e -rpcauth=joinmarket2:521bf9f4468529d49c0a41f9c9f8fdbf$$63ae94a73d2aa45e7ee756945d9b1e469f9873ce026b815d676a748f777e0b8d -rpcauth=joinmarket3:85d4beaa74540c3b08f4fef50d74a59e$$3033c779ea4bfd02a1f3403bc4d012f3e6d19b355f74c5e8de1d3439979d5e4b -datadir=/home/bitcoin/data -walletdir=/home/bitcoin/walletdata -regtest=1 -server=1 -port=39388 -rpcport=43782 -rpcbind=0.0.0.0 -rpcallowip=0.0.0.0/0 -whitelist=0.0.0.0/0 -maxmempool=500 -debug=rpc -logips=0 -networkactive=1 -dnsseed=0 -uacomment=jmdevbitcoindregtest -printpriority=1 -logtimemicros=1 -zmqpubrawblock=tcp://0.0.0.0:28332 -zmqpubrawtx=tcp://0.0.0.0:28333 -zmqpubhashblock=tcp://0.0.0.0:28334 -dns=0 -listenonion=0 -deprecatedrpc=create_bdb expose: - 39388 # P2P - 43782 # RPC - 28332 # ZMQ - 28333 # ZMQ - 28334 # ZMQ ports: - '17782:43782' volumes: - 'bitcoin_datadir:/home/bitcoin/data' - 'bitcoin_wallet_datadir:/home/bitcoin/walletdata' healthcheck: test: [ 'CMD', '/entrypoint.sh', 'bitcoin-cli', '-chain=regtest', '-rpcport=43782', '-datadir=/home/bitcoin/data', '-getinfo', ] interval: 10s timeout: 10s retries: 20 start_period: 60s start_interval: 3s bitcoind_regtest_initializer: container_name: jm_regtest_bitcoind_initializer build: context: ./dockerfile-deps/bitcoin/regtest-initializer dockerfile: Dockerfile restart: on-failure environment: READY_FILE: /root/.regtest-initializer/btc_fully_synched RPC_HOST: bitcoind RPC_PORT: 43782 RPC_USER: regtest RPC_PASSWORD: regtest volumes: - 'initializer_datadir:/root/.regtest-initializer' depends_on: bitcoind: condition: service_healthy nginx: container_name: jm_regtest_nginx_test_basepath image: nginx:1.27.4-alpine3.21@sha256:4ff102c5d78d254a6f0da062b3cf39eaf07f01eec0927fd21e219d0af8bc0591 volumes: - ./dockerfile-deps/nginx:/etc/nginx/templates ports: - '8000:80' extra_hosts: - 'host.docker.internal:host-gateway' healthcheck: test: ['CMD-SHELL', 'wget --output-document /dev/null http://127.0.0.1:80/health || exit 1'] interval: 10s timeout: 10s retries: 20 start_period: 60s start_interval: 3s explorer: container_name: jm_regtest_explorer restart: unless-stopped image: getumbrel/btc-rpc-explorer:v3.4.0@sha256:e85a1fe80919d308b1f80de2dc7174e7b61ec79384d695304fbf259b67b53594 environment: BTCEXP_HOST: 0.0.0.0 BTCEXP_PORT: 3002 BTCEXP_BITCOIND_HOST: bitcoind BTCEXP_BITCOIND_PORT: 43782 BTCEXP_BITCOIND_USER: regtest BTCEXP_BITCOIND_PASS: regtest BTCEXP_BASIC_AUTH_PASSWORD: joinmarket BTCEXP_PRIVACY_MODE: 'true' BTCEXP_NO_RATES: 'true' BTCEXP_RPC_ALLOWALL: 'true' ports: - '3002:3002' depends_on: bitcoind: condition: service_healthy volumes: bitcoin_datadir: bitcoin_wallet_datadir: initializer_datadir: joinmarket_datadir: joinmarket2_datadir: joinmarket3_datadir: joinmarket4_datadir: joinmarket5_datadir: joinmarket_clientserver_directory_node_datadir: tor_datadir: irc_datadir: networks: default: name: regtest_default ipam: config: - subnet: 172.30.0.0/24