From 1a255b754c8250d127835e74556a6259e83e07e1 Mon Sep 17 00:00:00 2001 From: moisesPomilio <93723302+moisesPompilio@users.noreply.github.com> Date: Fri, 17 Oct 2025 16:29:45 -0300 Subject: [PATCH 1/2] add Dockerfile for building with configurable features Implements multi-stage build to produce a small final image by discarding build dependencies. Supports optional BUILD_FEATURES for additional features, with cached compilation in builder stage. --- .dockerignore | 1 + Dockerfile | 40 +++++++++++++++++++++++++++++++ ldk-server/ldk-server-config.toml | 2 +- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +/target diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a61f78a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +FROM debian:13.1-slim@sha256:1caf1c703c8f7e15dcf2e7769b35000c764e6f50e4d7401c355fb0248f3ddfdb AS builder + +ARG BUILD_FEATURES="" + +RUN apt-get update && apt-get install -y \ + build-essential \ + cmake \ + curl \ + git \ + libssl-dev \ + pkg-config + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +ENV PATH="/root/.cargo/bin:${PATH}" +RUN rustup default 1.90.0 + +WORKDIR /opt/app + +COPY Cargo.* ./ +COPY ldk-server/ ldk-server/ +COPY ldk-server-cli/ ldk-server-cli/ +COPY ldk-server-client/ ldk-server-client/ +COPY ldk-server-protos/ ldk-server-protos/ +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + if [ -n "$BUILD_FEATURES" ]; then \ + cargo build --release --features "$BUILD_FEATURES"; \ + else \ + cargo build --release; \ + fi + +FROM debian:13.1-slim@sha256:1caf1c703c8f7e15dcf2e7769b35000c764e6f50e4d7401c355fb0248f3ddfdb + +COPY --from=builder /opt/app/target/release/ldk-server /usr/local/bin/ldk-server +COPY --from=builder /opt/app/target/release/ldk-server-cli /usr/local/bin/ldk-server-cli +COPY --from=builder /opt/app/ldk-server/ldk-server-config.toml /usr/local/bin/ldk-server-config.toml +RUN chmod +x /usr/local/bin/ldk-server + +EXPOSE 3000 3001 + +ENTRYPOINT [ "ldk-server", "/usr/local/bin/ldk-server-config.toml" ] diff --git a/ldk-server/ldk-server-config.toml b/ldk-server/ldk-server-config.toml index 7f5e7ba..96d1afe 100644 --- a/ldk-server/ldk-server-config.toml +++ b/ldk-server/ldk-server-config.toml @@ -2,7 +2,7 @@ [node] network = "regtest" # Bitcoin network to use listening_address = "localhost:3001" # Lightning node listening address -rest_service_address = "127.0.0.1:3002" # LDK Server REST address +rest_service_address = "127.0.0.1:3000" # LDK Server REST address # Storage settings [storage.disk] From ccdefcd3a55f0d545f4dbb2ae2b5106d0aec407c Mon Sep 17 00:00:00 2001 From: moisesPomilio <93723302+moisesPompilio@users.noreply.github.com> Date: Fri, 17 Oct 2025 16:27:10 -0300 Subject: [PATCH 2/2] add docker-compose.yml for LDK Server testing introduces docker-compose.yml with Bitcoin Core, CLN, and LND for Lightning testing. The default profile runs these services; the 'ldk-server' profile adds the LDK server; the 'rabbitmq' profile includes RabbitMQ for events. --- docker-compose.yml | 123 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..581d203 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,123 @@ +services: + ldk-server: + container_name: ldk-server + build: + context: . + args: + BUILD_FEATURES: "" + command: [ + "--node-listening-address=0.0.0.0:3001", + "--node-rest-service-address=0.0.0.0:3000", + "--bitcoind-rpc-host=ldk-server-bitcoin", + "--bitcoind-rpc-port=18443", + "--bitcoind-rpc-user=user", + "--bitcoind-rpc-password=pass", + ] + ports: + - "3000:3000" + - "3001:3001" + networks: + - ldk-server + depends_on: + bitcoin: + condition: service_healthy + profiles: ["ldk-server"] + + bitcoin: + container_name: ldk-server-bitcoin + image: blockstream/bitcoind:29.1@sha256:9fcffa83feed0fc382dfb2f26990ca07656d150ba49434096a5aeedac6695a01 + platform: linux/amd64 + command: + [ + "bitcoind", + "-printtoconsole", + "-regtest=1", + "-rpcallowip=0.0.0.0/0", + "-rpcbind=0.0.0.0", + "-rpcuser=user", + "-rpcpassword=pass", + "-fallbackfee=0.00001", + "-zmqpubrawblock=tcp://0.0.0.0:28332", + "-zmqpubrawtx=tcp://0.0.0.0:28333" + ] + ports: + - "18443:18443" + - "18444:18444" + networks: + - ldk-server + healthcheck: + test: ["CMD", "bitcoin-cli", "-regtest", "-rpcuser=user", "-rpcpassword=pass", "getblockchaininfo"] + interval: 5s + timeout: 10s + retries: 5 + # Example command: bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass getblockchaininfo + + lnd: + image: lightninglabs/lnd:v0.18.5-beta@sha256:2b560c9beb559c57ab2f2da1dfed80d286cf11a6dc6e4354cab84aafba79b6f6 + container_name: ldk-server-lnd + ports: + - "9735:9735" # P2P + - "10009:10009" # RPC + command: + - "--noseedbackup" + - "--trickledelay=5000" + - "--alias=ldk-node-lnd-test" + - "--externalip=lnd:9735" + - "--bitcoin.active" + - "--bitcoin.regtest" + - "--bitcoin.node=bitcoind" + - "--bitcoind.rpchost=ldk-server-bitcoin:18443" + - "--bitcoind.rpcuser=user" + - "--bitcoind.rpcpass=pass" + - "--bitcoind.zmqpubrawblock=tcp://ldk-server-bitcoin:28332" + - "--bitcoind.zmqpubrawtx=tcp://ldk-server-bitcoin:28333" + - "--accept-keysend" + - "--accept-amp" + - "--rpclisten=0.0.0.0:10009" + - "--tlsextradomain=lnd" + - "--tlsextraip=0.0.0.0" + - "--listen=0.0.0.0:9735" + depends_on: + bitcoin: + condition: service_healthy + networks: + - ldk-server + # Example command: lncli --tlscertpath=/root/.lnd/tls.cert --macaroonpath=/root/.lnd/data/chain/bitcoin/regtest/admin.macaroon getinfo + + cln: + image: blockstream/lightningd:v25.05@sha256:4f61a5e77deb27c14ed223dd789bb3bfafe00c0c13f4f1e973c0a43b8ad5de90 + container_name: ldk-server-cln + platform: linux/amd64 + command: + [ + "--bitcoin-rpcconnect=ldk-server-bitcoin", + "--bitcoin-rpcport=18443", + "--bitcoin-rpcuser=user", + "--bitcoin-rpcpassword=pass", + "--network=regtest", + "--log-level=debug", + "--alias=ldk-server-cln", + ] + ports: + - "19846:19846" # RPC + - "9736:9736" # P2P + depends_on: + bitcoin: + condition: service_healthy + networks: + - ldk-server + # Example command: lightning-cli --network=regtest getinfo + + rabbitmq: + image: rabbitmq:3-management + container_name: ldk-server-rabbitmq + ports: + - "5672:5672" + - "15672:15672" + networks: + - ldk-server + profiles: ["rabbitmq"] + +networks: + ldk-server: + driver: bridge \ No newline at end of file