diff --git a/cashtab.Dockerfile b/cashtab.Dockerfile index 1e93e9b75..b99c9dd33 100644 --- a/cashtab.Dockerfile +++ b/cashtab.Dockerfile @@ -1,98 +1,102 @@ # Multi-stage # 1) rust image for ecash-lib # 2) Node image for building frontend assets # 3) nginx stage to serve frontend assets # Stage 1 - rust machine for building ecash-lib-wasm FROM rust:1.76.0 AS WasmBuilder RUN apt-get update \ && apt-get install clang binaryen -y \ && rustup target add wasm32-unknown-unknown \ && cargo install -f wasm-bindgen-cli@0.2.92 # Copy Cargo.toml WORKDIR /app/ COPY Cargo.toml . # Copy chronik to same directory structure as monorepo # This needs to be in place to run ./build-wasm WORKDIR /app/chronik/ COPY chronik/ . +# Copy secp256k1 to same directory structure as monorepo +WORKDIR /app/src/secp256k1 +COPY src/secp256k1/ . + # Copy ecash-secp256k1, ecash-lib and ecash-lib-wasm files to same directory structure as monorepo WORKDIR /app/modules/ecash-secp256k1 COPY modules/ecash-secp256k1 . WORKDIR /app/modules/ecash-lib COPY modules/ecash-lib . WORKDIR /app/modules/ecash-lib-wasm COPY modules/ecash-lib-wasm . # Build web assembly for ecash-lib RUN ./build-wasm.sh # Stage 2 FROM node:20-buster-slim AS builder # Copy static assets from WasmBuilder stage (ecash-lib-wasm and ecash-lib, with wasm built in place) WORKDIR /app/modules COPY --from=WasmBuilder /app/modules . # Build all local Cashtab dependencies # ecashaddrjs WORKDIR /app/modules/ecashaddrjs COPY modules/ecashaddrjs/ . RUN npm ci RUN npm run build # chronik-client WORKDIR /app/modules/chronik-client COPY modules/chronik-client/ . RUN npm ci RUN npm run build # ecash-lib WORKDIR /app/modules/ecash-lib RUN npm ci RUN npm run build # ecash-agora WORKDIR /app/modules/ecash-agora COPY modules/ecash-agora/ . RUN npm ci RUN npm run build # ecash-script WORKDIR /app/modules/ecash-script COPY modules/ecash-script/ . RUN npm ci # Now that local dependencies are ready, build cashtab WORKDIR /app/cashtab # Copy only the package files and install necessary dependencies. # This reduces cache busting when source files are changed. COPY cashtab/package.json . COPY cashtab/package-lock.json . # Docker should not rebuild deps just because package.json version bump # So, always keep package.json and package-lock.json at 1.0.0 in the docker image # Note: it will be overwritten before npm run build by the latest package.json RUN npm version --allow-same-version 1.0.0 RUN npm ci # Copy the rest of the project files and build COPY cashtab/ . RUN npm run build # Stage 3 FROM nginx ARG NGINX_CONF=nginx.conf COPY cashtab/$NGINX_CONF /etc/nginx/conf.d/default.conf # Set working directory to nginx asset directory # Copy static assets from builder stage COPY --from=builder /app/cashtab/build /usr/share/nginx/html/ # Containers run nginx with global directives and daemon off ENTRYPOINT ["nginx", "-g", "daemon off;"] diff --git a/ecash-lib.Dockerfile b/ecash-lib.Dockerfile index 10bc372a5..55473e649 100644 --- a/ecash-lib.Dockerfile +++ b/ecash-lib.Dockerfile @@ -1,60 +1,64 @@ # Copyright (c) 2024 The Bitcoin developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # Stage 1 - rust machine for building ecash-lib-wasm FROM rust:1.76.0 AS WasmBuilder RUN apt-get update \ && apt-get install clang binaryen -y \ && rustup target add wasm32-unknown-unknown \ && cargo install -f wasm-bindgen-cli@0.2.92 # Copy Cargo.toml WORKDIR /app/ COPY Cargo.toml . # Copy chronik to same directory structure as monorepo # This needs to be in place to run ./build-wasm WORKDIR /app/chronik/ COPY chronik/ . +# Copy secp256k1 to same directory structure as monorepo +WORKDIR /app/src/secp256k1 +COPY src/secp256k1/ . + # Copy ecash-secp256k1, ecash-lib and ecash-lib-wasm files to same directory structure as monorepo WORKDIR /app/modules/ecash-secp256k1 COPY modules/ecash-secp256k1 . WORKDIR /app/modules/ecash-lib COPY modules/ecash-lib . WORKDIR /app/modules/ecash-lib-wasm COPY modules/ecash-lib-wasm . # Build web assembly for ecash-lib RUN ./build-wasm.sh # Stage 2 - Node image for running npm publish FROM node:20-buster-slim # Copy static assets from WasmBuilder stage (ecash-lib-wasm and ecash-lib, with wasm built in place) WORKDIR /app/modules COPY --from=WasmBuilder /app/modules . # Build out local dependencies of ecash-lib # ecashaddrjs (dependency of chronik-client) WORKDIR /app/modules/ecashaddrjs COPY modules/ecashaddrjs/ . RUN npm ci RUN npm run build # chronik-client WORKDIR /app/modules/chronik-client COPY modules/chronik-client/ . RUN npm ci RUN npm run build # Build ecash-lib WORKDIR /app/modules/ecash-lib RUN npm ci RUN npm run build # Publish ecash-lib CMD [ "npm", "publish" ] diff --git a/token-server.Dockerfile b/token-server.Dockerfile index 0652067f5..344532006 100644 --- a/token-server.Dockerfile +++ b/token-server.Dockerfile @@ -1,80 +1,84 @@ # Copyright (c) 2024 The Bitcoin developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. # Multi-stage # 1) rust image for ecash-lib # 2) Node image for prod deployment of token-server # 1) rust image for ecash-lib FROM rust:1.76.0 AS wasmbuilder RUN apt-get update \ && apt-get install clang binaryen -y \ && rustup target add wasm32-unknown-unknown \ && cargo install -f wasm-bindgen-cli@0.2.92 # Copy Cargo.toml WORKDIR /app/ COPY Cargo.toml . # Copy chronik to same directory structure as monorepo # This needs to be in place to run ./build-wasm WORKDIR /app/chronik/ COPY chronik/ . +# Copy secp256k1 to same directory structure as monorepo +WORKDIR /app/src/secp256k1 +COPY src/secp256k1/ . + # Copy ecash-secp256k1, ecash-lib and ecash-lib-wasm files to same directory structure as monorepo WORKDIR /app/modules/ecash-secp256k1 COPY modules/ecash-secp256k1 . WORKDIR /app/modules/ecash-lib COPY modules/ecash-lib . WORKDIR /app/modules/ecash-lib-wasm COPY modules/ecash-lib-wasm . # Build web assembly for ecash-lib RUN ./build-wasm.sh # 2) Node image for prod deployment of token-server FROM node:20-buster-slim # Copy static assets from wasmbuilder stage (ecash-lib-wasm and ecash-lib, with wasm built in place) WORKDIR /app/modules COPY --from=wasmbuilder /app/modules . # Build all local token-server dependencies # ecashaddrjs WORKDIR /app/modules/ecashaddrjs COPY modules/ecashaddrjs/ . RUN npm ci RUN npm run build # chronik-client WORKDIR /app/modules/chronik-client COPY modules/chronik-client/ . RUN npm ci RUN npm run build # ecash-lib WORKDIR /app/modules/ecash-lib RUN npm ci RUN npm run build # Now that local dependencies are ready, build token-server WORKDIR /app/apps/token-server # Copy only the package files and install necessary dependencies. # This reduces cache busting when source files are changed. COPY apps/token-server/package.json . COPY apps/token-server/package-lock.json . RUN npm ci # Copy the rest of the project files COPY apps/token-server/ . # Compile typescript. Outputs to dist/ dir RUN npm run build # token-server runs with "node dist/index.js" CMD [ "node", "dist/index.js" ]