aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-03-19 10:56:35 -0700
committerAdam Soltys <[email protected]>2026-03-19 10:56:39 -0700
commit34e78d287622b0f04769d686a07267faa2ca5d3a (patch)
treea060e690a647975e2eca334eb3af48cfb5b7ba49
parenta6ae2c65f26aeff292028c6851b68347312fb3af (diff)
downloadcoinos-server-34e78d287622b0f04769d686a07267faa2ca5d3a.tar.gz
coinos-server-34e78d287622b0f04769d686a07267faa2ca5d3a.zip
dockerfiles
-rw-r--r--Dockerfile.postgres23
-rw-r--r--docker/arkd.Dockerfile6
-rw-r--r--docker/base.Dockerfile19
-rw-r--r--docker/bitcoin.Dockerfile11
-rw-r--r--docker/chopsticks.Dockerfile6
-rw-r--r--docker/electrs.Dockerfile6
-rw-r--r--docker/elements.Dockerfile11
-rw-r--r--docker/kvrocks.Dockerfile6
-rw-r--r--docker/lightningd.Dockerfile13
-rw-r--r--docker/strfry.Dockerfile18
-rw-r--r--docker/tigerbeetle.Dockerfile6
-rwxr-xr-xsetup.sh31
12 files changed, 154 insertions, 2 deletions
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