Two-app pnpm workspace for the gashboard (mining dashboard) project: @gashboard/api (Express 5 + TS) and @gashboard/web (Vue 3 + Vite + TS). Shared tsconfig.base.json. Multi-stage Dockerfile (node:22.12-alpine, non-root, healthchecked) and docker-compose.yml ready to deploy as a Portainer Stack on Umbrel — joins umbrel_main_network so it can reach the Datum container directly. .env.example documents every var; README covers the Portainer deploy flow and the security posture. Note: Dockerfile has a TODO marker to SHA256-pin the base image before shipping to production. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
42 lines
1.2 KiB
Docker
42 lines
1.2 KiB
Docker
# NOTE: pin this base by SHA256 before first deploy. To resolve:
|
|
# docker pull node:22.12.0-alpine
|
|
# docker inspect --format='{{index .RepoDigests 0}}' node:22.12.0-alpine
|
|
# then replace the FROM lines below with `node@sha256:<digest>`.
|
|
ARG NODE_IMAGE=node:22.12.0-alpine
|
|
|
|
FROM ${NODE_IMAGE} AS deps
|
|
WORKDIR /app
|
|
RUN corepack enable && corepack prepare pnpm@9.12.3 --activate
|
|
COPY pnpm-workspace.yaml package.json ./
|
|
COPY apps/api/package.json apps/api/
|
|
COPY apps/web/package.json apps/web/
|
|
RUN pnpm install --frozen-lockfile=false
|
|
|
|
FROM deps AS build-api
|
|
WORKDIR /app
|
|
COPY apps/api apps/api
|
|
RUN pnpm --filter @gashboard/api build
|
|
|
|
FROM deps AS build-web
|
|
WORKDIR /app
|
|
COPY apps/web apps/web
|
|
RUN pnpm --filter @gashboard/web build
|
|
|
|
FROM ${NODE_IMAGE} AS runtime
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
RUN apk add --no-cache wget tini
|
|
RUN corepack enable && corepack prepare pnpm@9.12.3 --activate
|
|
|
|
COPY pnpm-workspace.yaml package.json ./
|
|
COPY apps/api/package.json apps/api/
|
|
RUN pnpm install --filter @gashboard/api --prod --frozen-lockfile=false
|
|
|
|
COPY --from=build-api /app/apps/api/dist apps/api/dist
|
|
COPY --from=build-web /app/apps/web/dist apps/api/public
|
|
|
|
USER node
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["/sbin/tini", "--"]
|
|
CMD ["node", "apps/api/dist/index.js"]
|