From 34e78d287622b0f04769d686a07267faa2ca5d3a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 19 Mar 2026 10:56:35 -0700 Subject: dockerfiles --- Dockerfile.postgres | 23 +++++++++++++++++++++++ docker/arkd.Dockerfile | 6 ++++++ docker/base.Dockerfile | 19 +++++++++++++++++++ docker/bitcoin.Dockerfile | 11 +++++++++++ docker/chopsticks.Dockerfile | 6 ++++++ docker/electrs.Dockerfile | 6 ++++++ docker/elements.Dockerfile | 11 +++++++++++ docker/kvrocks.Dockerfile | 6 ++++++ docker/lightningd.Dockerfile | 13 +++++++++++++ docker/strfry.Dockerfile | 18 ++++++++++++++++++ docker/tigerbeetle.Dockerfile | 6 ++++++ setup.sh | 31 +++++++++++++++++++++++++++++-- 12 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 Dockerfile.postgres create mode 100644 docker/arkd.Dockerfile create mode 100644 docker/base.Dockerfile create mode 100644 docker/bitcoin.Dockerfile create mode 100644 docker/chopsticks.Dockerfile create mode 100644 docker/electrs.Dockerfile create mode 100644 docker/elements.Dockerfile create mode 100644 docker/kvrocks.Dockerfile create mode 100644 docker/lightningd.Dockerfile create mode 100644 docker/strfry.Dockerfile create mode 100644 docker/tigerbeetle.Dockerfile diff --git a/Dockerfile.postgres b/Dockerfile.postgres new file mode 100644 index 00000000..da3b35ff --- /dev/null +++ b/Dockerfile.postgres @@ -0,0 +1,23 @@ +FROM postgres:18 AS pg +FROM ghcr.io/coinos/base +USER root +COPY --from=pg /usr/lib/postgresql /usr/lib/postgresql +COPY --from=pg /usr/share/postgresql /usr/share/postgresql +COPY --from=pg /usr/local/bin/docker-entrypoint.sh /usr/local/bin/ +COPY --from=pg /lib/x86_64-linux-gnu/libpq.so.5* /lib/x86_64-linux-gnu/ +COPY --from=pg /usr/local/bin/gosu /usr/local/bin/ +RUN ln -s /usr/lib/postgresql/18/bin/* /usr/local/bin/ \ + && apt-get update && apt-get install -y --no-install-recommends libicu76 libreadline8t64 libxml2 libxslt1.1 libssl3t64 liblz4-1 libzstd1 libnuma1 liburing2 locales \ + && rm -rf /var/lib/apt/lists/* \ + && sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && locale-gen \ + && groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 --home-dir=/var/lib/postgresql --shell=/bin/bash postgres \ + && mkdir -p /var/run/postgresql /var/lib/postgresql /docker-entrypoint-initdb.d \ + && chown -R postgres:postgres /var/run/postgresql /var/lib/postgresql +WORKDIR / +ENV PGDATA=/var/lib/postgresql/data +ENV PG_MAJOR=18 +STOPSIGNAL SIGINT +USER postgres +EXPOSE 5432 +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["postgres"] diff --git a/docker/arkd.Dockerfile b/docker/arkd.Dockerfile new file mode 100644 index 00000000..08deb403 --- /dev/null +++ b/docker/arkd.Dockerfile @@ -0,0 +1,6 @@ +FROM asoltys/arkd AS source + +FROM ghcr.io/coinos/base +USER root +COPY --from=source /app/arkd /app/ark /usr/local/bin/ +ENTRYPOINT ["arkd"] diff --git a/docker/base.Dockerfile b/docker/base.Dockerfile new file mode 100644 index 00000000..554a75de --- /dev/null +++ b/docker/base.Dockerfile @@ -0,0 +1,19 @@ +FROM debian:trixie-slim + +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl unzip ca-certificates wget \ + libpq5 libsodium23 libatomic1 jq socat inotify-tools \ + liblmdb0 libsecp256k1-2 tini \ + && curl -fsSL https://bun.sh/install | bash \ + && mv /root/.bun/bin/bun /usr/local/bin/bun \ + && ln -s /usr/local/bin/bun /usr/local/bin/bunx \ + && rm -rf /root/.bun \ + && apt-get purge -y curl unzip \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + /usr/share/doc /usr/share/man /usr/share/locale \ + /usr/share/info /var/log/* /tmp/* + +RUN groupadd -g 1000 bun && useradd -u 1000 -g bun -m -s /bin/sh bun +WORKDIR /home/bun/app +USER bun diff --git a/docker/bitcoin.Dockerfile b/docker/bitcoin.Dockerfile new file mode 100644 index 00000000..d222d0a5 --- /dev/null +++ b/docker/bitcoin.Dockerfile @@ -0,0 +1,11 @@ +FROM ghcr.io/coinos/base AS builder +ARG VERSION=30.2 +USER root +RUN wget -qO- https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION-x86_64-linux-gnu.tar.gz | tar -xz --strip-components=1 -C /usr/local + +FROM ghcr.io/coinos/base +USER root +COPY --from=builder /usr/local/bin/bitcoind /usr/local/bin/bitcoin-cli /usr/local/bin/ +RUN usermod -l bitcoin bun && usermod -d /home/bitcoin -m bitcoin && groupmod -n bitcoin bun +USER bitcoin +ENTRYPOINT ["bitcoind"] diff --git a/docker/chopsticks.Dockerfile b/docker/chopsticks.Dockerfile new file mode 100644 index 00000000..c4cc3f27 --- /dev/null +++ b/docker/chopsticks.Dockerfile @@ -0,0 +1,6 @@ +FROM ghcr.io/vulpemventures/nigiri-chopsticks AS source + +FROM ghcr.io/coinos/base +USER root +COPY --from=source /app /usr/local/bin/chopsticks +ENTRYPOINT ["chopsticks"] diff --git a/docker/electrs.Dockerfile b/docker/electrs.Dockerfile new file mode 100644 index 00000000..6a16942d --- /dev/null +++ b/docker/electrs.Dockerfile @@ -0,0 +1,6 @@ +FROM ghcr.io/vulpemventures/electrs AS source + +FROM ghcr.io/coinos/base +USER root +COPY --from=source /build/electrs /build/electrs +ENTRYPOINT ["/build/electrs"] diff --git a/docker/elements.Dockerfile b/docker/elements.Dockerfile new file mode 100644 index 00000000..98cba809 --- /dev/null +++ b/docker/elements.Dockerfile @@ -0,0 +1,11 @@ +FROM ghcr.io/coinos/base AS builder +ARG VERSION=23.3.2 +USER root +RUN wget -qO- https://github.com/ElementsProject/elements/releases/download/elements-$VERSION/elements-$VERSION-x86_64-linux-gnu.tar.gz | tar -xz --strip-components=1 -C /usr/local + +FROM ghcr.io/coinos/base +USER root +COPY --from=builder /usr/local/bin/elementsd /usr/local/bin/elements-cli /usr/local/bin/ +RUN usermod -l elements bun && usermod -d /home/elements -m elements && groupmod -n elements bun +USER elements +ENTRYPOINT ["elementsd"] diff --git a/docker/kvrocks.Dockerfile b/docker/kvrocks.Dockerfile new file mode 100644 index 00000000..c486a1b2 --- /dev/null +++ b/docker/kvrocks.Dockerfile @@ -0,0 +1,6 @@ +FROM apache/kvrocks AS source + +FROM ghcr.io/coinos/base +USER root +COPY --from=source /usr/bin/kvrocks /usr/bin/kvrocks +ENTRYPOINT ["kvrocks"] diff --git a/docker/lightningd.Dockerfile b/docker/lightningd.Dockerfile new file mode 100644 index 00000000..e7e3db4d --- /dev/null +++ b/docker/lightningd.Dockerfile @@ -0,0 +1,13 @@ +FROM elementsproject/lightningd:v25.12.1 AS source + +FROM ghcr.io/coinos/base +USER root +COPY --from=source /usr/local/ /usr/local/ +COPY --from=source /usr/bin/bitcoin-cli /usr/bin/ +COPY --from=source /entrypoint.sh /entrypoint.sh + +ENV LIGHTNINGD_DATA=/root/.lightning +ENV LIGHTNINGD_NETWORK=bitcoin +EXPOSE 9735 9835 +VOLUME ["/root/.lightning"] +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/strfry.Dockerfile b/docker/strfry.Dockerfile new file mode 100644 index 00000000..dff5448d --- /dev/null +++ b/docker/strfry.Dockerfile @@ -0,0 +1,18 @@ +FROM debian:trixie-slim AS builder +RUN apt-get update && apt-get install -y --no-install-recommends \ + git g++ make pkg-config ca-certificates \ + liblmdb-dev libflatbuffers-dev libsecp256k1-dev \ + libb2-dev libzstd-dev libssl-dev zlib1g-dev \ + && rm -rf /var/lib/apt/lists/* +RUN git clone --depth 1 https://github.com/hoytech/strfry.git /build +WORKDIR /build +RUN git submodule update --init +RUN make setup-golpe && make -j$(nproc) +RUN strip --strip-unneeded strfry + +FROM ghcr.io/coinos/base +USER root +WORKDIR /app +COPY --from=builder /build/strfry /app/strfry +ENTRYPOINT ["tini", "--"] +CMD ["/app/strfry", "relay"] diff --git a/docker/tigerbeetle.Dockerfile b/docker/tigerbeetle.Dockerfile new file mode 100644 index 00000000..a85ad165 --- /dev/null +++ b/docker/tigerbeetle.Dockerfile @@ -0,0 +1,6 @@ +FROM ghcr.io/tigerbeetle/tigerbeetle AS source + +FROM ghcr.io/coinos/base +USER root +COPY --from=source /tigerbeetle /usr/local/bin/tigerbeetle +ENTRYPOINT ["tigerbeetle"] diff --git a/setup.sh b/setup.sh index e74400a4..0aa965b8 100755 --- a/setup.sh +++ b/setup.sh @@ -167,6 +167,31 @@ setup_config() { fi } +# ── phase 2b: VAPID keys ───────────────────────────────────────────── +# Run after setup_data since the snapshot may overwrite config.ts + +setup_vapid() { + if grep -q 'pk: ""' config.ts 2>/dev/null; then + step "Generating VAPID keys" + local vapid_json + vapid_json=$(docker run --rm -w /home/bun/app -v "$DIR":/home/bun/app \ + ghcr.io/coinos/base bun -e \ + "const wp = require('web-push'); const k = wp.generateVAPIDKeys(); console.log(JSON.stringify(k))" 2>/dev/null) || true + if [ -n "$vapid_json" ]; then + local vapid_pk vapid_sk + vapid_pk=$(echo "$vapid_json" | grep -o '"publicKey":"[^"]*"' | cut -d'"' -f4) + vapid_sk=$(echo "$vapid_json" | grep -o '"privateKey":"[^"]*"' | cut -d'"' -f4) + if [ -n "$vapid_pk" ] && [ -n "$vapid_sk" ]; then + sed -i "s|pk: \"\"|pk: \"$vapid_pk\"|" config.ts + sed -i "s|sk: \"\"|sk: \"$vapid_sk\"|" config.ts + ok "Generated VAPID keys" + fi + else + warn "Could not generate VAPID keys — web push notifications won't work" + fi + fi +} + # ── phase 3: data directories ─────────────────────────────────────── setup_data() { @@ -312,8 +337,9 @@ install_deps() { fi if [ ! -f "$ui_dir/.env" ] && [ -f "$ui_dir/.env.sample" ]; then - cp "$ui_dir/.env.sample" "$ui_dir/.env" - ok "Created UI .env" + sed 's|PUBLIC_COINOS_URL=http://localhost:3119|PUBLIC_COINOS_URL=http://app:3119|' \ + "$ui_dir/.env.sample" > "$ui_dir/.env" + ok "Created UI .env (with Docker service URLs)" fi if [ -d "$ui_dir/node_modules" ]; then @@ -659,6 +685,7 @@ main() { check_prereqs setup_config setup_data + setup_vapid setup_tigerbeetle setup_network install_deps -- cgit v1.2.3