Skip to content

Commit

Permalink
Use uv for docker images
Browse files Browse the repository at this point in the history
  • Loading branch information
MrNaif2018 committed Dec 24, 2024
1 parent 70e5822 commit aa82c85
Show file tree
Hide file tree
Showing 21 changed files with 479 additions and 76 deletions.
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ jobs:
name: install dependencies
command: |
cd generator
pip install -r requirements.txt
pip install -r test-requirements.txt
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync --frozen --compile-bytecode
- run:
name: run tests
Expand Down
16 changes: 10 additions & 6 deletions compose/Dockerfile-coin.template
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
FROM python:3.11-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}/.{{ env.name }}{{ if env.custom == "false" and env.coin != "btc" then "-"+env.coin else "" end }}
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV {{ env.coin | ascii_upcase }}_HOST=0.0.0.0
LABEL org.bitcart.image={{ env.coin }}-daemon

Expand All @@ -12,15 +16,14 @@ FROM base AS compile-image
COPY bitcart $ELECTRUM_HOME/site

{{ if env.bases == "btc" then ( -}}
RUN apk add python3-dev build-base libffi-dev{{ if env.coin == "ltc" then " openssl-dev" else . end }} && \
RUN apk add git python3-dev build-base libffi-dev{{ if env.coin == "ltc" then " openssl-dev" else . end }} && \
{{ ) elif env.bases == "bch" then ( -}}
RUN apk add gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev openssl-dev rust cargo && \
RUN apk add git gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev openssl-dev rust cargo && \
{{ ) else ( -}}
RUN apk add gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev && \
RUN apk add git gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev && \
{{ ) end -}}
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/{{ env.coin }}.txt
uv sync --frozen --no-dev --group {{ env.coin }}

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
11 changes: 7 additions & 4 deletions compose/backend.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@ FROM golang:1.23-alpine AS go-builder
RUN CGO_ENABLED=0 go install -ldflags '-X main.Version=docker -X main.envFile=/app/conf/.env' github.com/bitcart/bitcart-cli@master

FROM python:3.11-slim-bullseye
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

ARG TARGETPLATFORM
ENV IN_DOCKER=1
ENV GOSU_VERSION=1.16
LABEL org.bitcart.image=backend
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1

COPY bitcart /app
COPY scripts/docker-entrypoint.sh /usr/local/bin/
Expand All @@ -19,12 +23,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends iproute2 openss
chmod +x /usr/local/bin/gosu && \
groupadd --gid 1000 electrum && \
useradd --uid 1000 --gid electrum --shell /bin/bash --create-home electrum && \
pip install -r requirements/deterministic/web.txt && \
pip install -r requirements/deterministic/production.txt && \
uv sync --frozen --no-dev --group web --group production && \
apt-get purge -y build-essential python3-dev libffi-dev wget && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /root/.cache/pip
rm -rf /var/lib/apt/lists/*
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="/app/.venv/bin:$PATH"
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["sh"]
12 changes: 8 additions & 4 deletions compose/bch.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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}/.electron-cash
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV BCH_HOST=0.0.0.0
LABEL org.bitcart.image=bch-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev openssl-dev rust cargo && \
RUN apk add git gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev openssl-dev rust cargo && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/bch.txt
uv sync --frozen --no-dev --group bch

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
12 changes: 8 additions & 4 deletions compose/bnb.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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-bnb
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV BNB_HOST=0.0.0.0
LABEL org.bitcart.image=bnb-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev && \
RUN apk add git gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/bnb.txt
uv sync --frozen --no-dev --group bnb

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
12 changes: 8 additions & 4 deletions compose/bsty.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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}/.electrum-bsty
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV BSTY_HOST=0.0.0.0
LABEL org.bitcart.image=bsty-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add python3-dev build-base libffi-dev && \
RUN apk add git python3-dev build-base libffi-dev && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/bsty.txt
uv sync --frozen --no-dev --group bsty

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
12 changes: 8 additions & 4 deletions compose/btc.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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}/.electrum
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV BTC_HOST=0.0.0.0
LABEL org.bitcart.image=btc-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add python3-dev build-base libffi-dev && \
RUN apk add git python3-dev build-base libffi-dev && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/btc.txt
uv sync --frozen --no-dev --group btc

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
12 changes: 8 additions & 4 deletions compose/eth.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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-eth
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV ETH_HOST=0.0.0.0
LABEL org.bitcart.image=eth-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev && \
RUN apk add git gcc python3-dev musl-dev automake autoconf libtool file git make libffi-dev && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/eth.txt
uv sync --frozen --no-dev --group eth

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
12 changes: 8 additions & 4 deletions compose/grs.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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}/.electrum-grs
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV GRS_HOST=0.0.0.0
LABEL org.bitcart.image=grs-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add python3-dev build-base libffi-dev && \
RUN apk add git python3-dev build-base libffi-dev && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/grs.txt
uv sync --frozen --no-dev --group grs

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
12 changes: 8 additions & 4 deletions compose/ltc.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,25 @@
#

FROM python:3.11-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}/.electrum-ltc
ENV IN_DOCKER=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_NO_CACHE=1
ENV UV_NO_SYNC=1
ENV LTC_HOST=0.0.0.0
LABEL org.bitcart.image=ltc-daemon

FROM base AS compile-image

COPY bitcart $ELECTRUM_HOME/site

RUN apk add python3-dev build-base libffi-dev openssl-dev && \
RUN apk add git python3-dev build-base libffi-dev openssl-dev && \
cd $ELECTRUM_HOME/site && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/base.txt && \
pip3 install --no-warn-script-location --user -r requirements/deterministic/daemons/ltc.txt
uv sync --frozen --no-dev --group ltc

FROM base AS build-image

Expand All @@ -33,10 +36,11 @@ RUN adduser -D $ELECTRUM_USER && \
apk add --no-cache libsecp256k1-dev git && \
apk add --no-cache --repository=https://dl-cdn.alpinelinux.org/alpine/edge/main jemalloc

COPY --from=compile-image --chown=electrum /root/.local $ELECTRUM_HOME/.local
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

Expand Down
Loading

0 comments on commit aa82c85

Please sign in to comment.