Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions compose/btclnd.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#
# Dockerfile for bitcart-btclnd daemon
#
# The LND binary itself is fetched at runtime by the daemon
# (see daemons/lnd_process.py:LNDBinaryManager) and cached on the
# data volume, so it is intentionally NOT baked into the image.
#

FROM python:3.12-alpine AS base
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

ENV ELECTRUM_USER=electrum
ENV ELECTRUM_HOME=/home/$ELECTRUM_USER
ENV ELECTRUM_DIRECTORY=${ELECTRUM_HOME}/.bitcart-btclnd
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV BTCLND_HOST=0.0.0.0
LABEL org.bitcart.image=btclnd-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add git python3-dev build-base libffi-dev && \
cd $ELECTRUM_HOME/site && \
uv sync --frozen --no-dev --group btclnd --group otel && \
uv run opentelemetry-bootstrap -a requirements | uv pip install --requirement -

FROM base AS build-image

RUN adduser -D $ELECTRUM_USER && \
mkdir -p /data/ && \
ln -sf /data/ $ELECTRUM_DIRECTORY && \
chown ${ELECTRUM_USER} $ELECTRUM_DIRECTORY && \
mkdir -p $ELECTRUM_HOME/site && \
chown ${ELECTRUM_USER} $ELECTRUM_HOME/site && \
apk add --no-cache libsecp256k1-dev git tor curl && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum $ELECTRUM_HOME/site/.venv $ELECTRUM_HOME/.venv
COPY --from=compile-image --chown=electrum $ELECTRUM_HOME/site $ELECTRUM_HOME/site

ENV PYTHONUNBUFFERED=1 PYTHONMALLOC=malloc LD_PRELOAD=libjemalloc.so.2 MALLOC_CONF=background_thread:true,max_background_threads:1,metadata_thp:auto,dirty_decay_ms:80000,muzzy_decay_ms:80000
ENV PATH="$ELECTRUM_HOME/.venv/bin:$PATH"
USER $ELECTRUM_USER
WORKDIR $ELECTRUM_HOME/site

CMD ["just","daemon", "btclnd"]
1 change: 1 addition & 0 deletions dev-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ cat >conf/.env <<EOF
DB_HOST=database
REDIS_HOST=redis://redis
BTC_HOST=bitcoin
BTCLND_HOST=bitcoinlnd
LTC_HOST=litecoin
BCH_HOST=bitcoincash
XRG_HOST=ergon
Expand Down
1 change: 1 addition & 0 deletions generator/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# Crypto constants
CRYPTOS = {
"btc": {"component": "bitcoin"},
"btclnd": {"component": "bitcoinlnd"},
"ltc": {"component": "litecoin"},
"bch": {"component": "bitcoincash"},
"xrg": {"component": "ergon"},
Expand Down
29 changes: 29 additions & 0 deletions generator/docker-components/bitcoinlnd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
services:
bitcoinlnd:
restart: unless-stopped
image: bitcart/bitcart-btclnd:stable
environment:
BTCLND_NETWORK: ${BTCLND_NETWORK:-mainnet}
BTCLND_NEUTRINO_PEERS: ${BTCLND_NEUTRINO_PEERS:-}
BTCLND_DEBUG: ${BTCLND_DEBUG:-false}
BTCLND_LND_EXTRA_ARGS: ${BTCLND_LND_EXTRA_ARGS:-}
expose:
- "5012"
ports:
# Lightning P2P port range. One port per non-Tor LND wallet; must
# be reachable from the outside so peers can open inbound channels.
# Tor-enabled wallets do not need a published port (the hidden
# service handles inbound). Default range = 10 wallets; override
# BTCLND_P2P_PORT_RANGE in the env to widen it (e.g. 9735-9834).
- "${BTCLND_P2P_PORT_RANGE:-9735-9744}:${BTCLND_P2P_PORT_RANGE:-9735-9744}"
volumes:
- "bitcoinlnd_datadir:/data"

backend:
depends_on:
- bitcoinlnd
links:
- bitcoinlnd

volumes:
bitcoinlnd_datadir:
8 changes: 8 additions & 0 deletions generator/docker-components/btc-ln.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
services:
bitcoin:
environment:
BTC_LIGHTNING_LISTEN: "0.0.0.0:9735"
ports:
- "9735:9735"
expose:
- "9735"