services:
bitcoin:
image: bitcoin/bitcoin:27.0
container_name: bitcoin-regtest
command: [
"bitcoind",
"-printtoconsole",
"-regtest=1",
"-fallbackfee=0.0002",
"-rpcallowip=0.0.0.0/0",
"-rpcbind=0.0.0.0:18443",
"-rpcuser=bitcoin",
"-rpcpassword=bitcoin123",
"-zmqpubrawblock=tcp://0.0.0.0:28332",
"-zmqpubrawtx=tcp://0.0.0.0:28333",
"-txindex=1",
"-loglevel=info"
]
ports:
- "18443:18443" - "18444:18444" - "28332:28332" - "28333:28333" volumes:
- lnurl-balancer_bitcoin_data:/home/bitcoin/.bitcoin
networks:
- lightning_network
healthcheck:
test: ["CMD", "bitcoin-cli", "-regtest", "-rpcuser=bitcoin", "-rpcpassword=bitcoin123", "-rpcconnect=127.0.0.1", "-rpcport=18443", "getblockchaininfo"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
setup:
build: ./setup
container_name: setup
depends_on:
bitcoin:
condition: service_healthy
cln:
condition: service_healthy
lnd:
condition: service_healthy
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- shared:/shared
networks:
- lightning_network
restart: "no"
healthcheck:
test: ["CMD", "test", "-f", "/tmp/setup_complete"]
interval: 5s
timeout: 3s
retries: 60
start_period: 10s
cln:
image: elementsproject/lightningd:v25.09
container_name: cln-regtest
hostname: "${CLN_HOSTNAME}"
environment:
LIGHTNINGD_NETWORK: regtest
command: [
"--bitcoin-rpcconnect=bitcoin",
"--bitcoin-rpcport=18443",
"--bitcoin-rpcuser=bitcoin",
"--bitcoin-rpcpassword=bitcoin123",
"--grpc-port=${CLN_PORT}",
"--grpc-host=0.0.0.0",
"--log-level=info",
"--bind-addr=0.0.0.0:9735",
"--announce-addr=cln:9735"
]
ports:
- "9735:9735" - "${CLN_PORT}:${CLN_PORT}" volumes:
- lnurl-balancer_cln_data:/root/.lightning
depends_on:
bitcoin:
condition: service_healthy
networks:
- lightning_network
- services
restart: unless-stopped
healthcheck:
test: ["CMD", "lightning-cli", "--regtest", "getinfo"]
interval: 5s
timeout: 3s
retries: 12
start_period: 30s
lnd:
image: lightninglabs/lnd:v0.19.3-beta
container_name: lnd-regtest
hostname: "${LND_HOSTNAME}"
command: [
"lnd",
"--bitcoin.active",
"--bitcoin.regtest",
"--bitcoin.node=bitcoind",
"--bitcoind.rpchost=bitcoin:18443",
"--bitcoind.rpcuser=bitcoin",
"--bitcoind.rpcpass=bitcoin123",
"--bitcoind.zmqpubrawblock=tcp://bitcoin:28332",
"--bitcoind.zmqpubrawtx=tcp://bitcoin:28333",
"--rpclisten=0.0.0.0:${LND_PORT}",
"--restlisten=0.0.0.0:8080",
"--listen=0.0.0.0:9734",
"--externalip=lnd:9734",
"--tlsextradomain=localhost",
"--tlsextraip=0.0.0.0",
"--tlsextraip=127.0.0.1",
"--noseedbackup",
"--accept-keysend",
"--accept-amp",
"--debuglevel=info"
]
ports:
- "${LND_PORT}:${LND_PORT}" - "8080:8080" - "9734:9734" volumes:
- lnurl-balancer_lnd_data:/root/.lnd
depends_on:
bitcoin:
condition: service_healthy
networks:
- lightning_network
- services
restart: unless-stopped
healthcheck:
test: ["CMD", "sh", "-c", "lncli --network=regtest getinfo >/dev/null 2>&1 || (echo 'password123' | lncli --network=regtest create --stdin 2>/dev/null || echo 'password123' | lncli --network=regtest unlock --stdin 2>/dev/null)"]
interval: 5s
timeout: 3s
retries: 12
start_period: 30s
postgres:
image: postgres:16-alpine
container_name: postgres-db
hostname: "${POSTGRES_HOSTNAME}"
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_LOG_MIN_MESSAGES: info
command: ["postgres", "-c", "log_min_messages=${POSTGRES_LOG_MIN_MESSAGES:-info}", "-c", "listen_addresses=*"]
volumes:
- lnurl-balancer_postgres_data:/var/lib/postgresql/data
ports:
- "${POSTGRES_PORT}:5432"
networks:
- services
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 5
start_period: 10s
mysql:
image: mysql:8.0
container_name: mysql-db
hostname: "${MYSQL_HOSTNAME}"
environment:
MYSQL_ROOT_PASSWORD: mysql
command: ["mysqld", "--log-error-verbosity=2", "--bind-address=0.0.0.0"]
volumes:
- lnurl-balancer_mysql_data:/var/lib/mysql
ports:
- "${MYSQL_PORT}:3306"
networks:
- services
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pmysql"]
interval: 5s
timeout: 3s
retries: 5
start_period: 10s
credentials-server:
build: ./credentials-server
container_name: credentials-server
hostname: "${CREDENTIALS_SERVER_HOSTNAME}"
volumes:
- shared:/usr/share/nginx/html
ports:
- "${CREDENTIALS_SERVER_PORT}:8888"
networks:
- services
depends_on:
setup:
condition: service_healthy
restart: unless-stopped
entrypoint: ["nginx"]
command: ["-g", "daemon off;"]
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8888/credentials.tar.gz"]
interval: 5s
timeout: 3s
retries: 5
start_period: 10s
volumes:
shared:
external: false
lnurl-balancer_bitcoin_data:
external: false
lnurl-balancer_cln_data:
external: false
lnurl-balancer_lnd_data:
external: false
lnurl-balancer_postgres_data:
external: false
lnurl-balancer_mysql_data:
external: false
networks:
lightning_network:
driver: bridge
services:
name: $SERVICES_NETWORK_NAME
driver: bridge