diff --git a/compose/btclnd.Dockerfile b/compose/btclnd.Dockerfile new file mode 100644 index 0000000..b376c7b --- /dev/null +++ b/compose/btclnd.Dockerfile @@ -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"] diff --git a/dev-setup.sh b/dev-setup.sh index 4e172a4..7b7e60a 100755 --- a/dev-setup.sh +++ b/dev-setup.sh @@ -13,6 +13,7 @@ cat >conf/.env <