# syntax=docker/dockerfile:1.7 # BloxOS dashboard image: Next.js standalone server, served same-origin # with the hub behind one reverse proxy, so NEXT_PUBLIC_HUB_URL is empty. # # The build stage runs on the build platform: the output is JavaScript and # static assets, and the dashboard never uses next/image (see next.config.ts), # so no target-specific native module is needed. The runtime stage has no # RUN steps, so a multi-platform build needs no emulation. FROM --platform=$BUILDPLATFORM node:22-alpine AS build ENV PNPM_HOME=/pnpm \ PATH=/pnpm:$PATH \ NEXT_TELEMETRY_DISABLED=1 \ NEXT_PUBLIC_HUB_URL= RUN corepack enable && corepack prepare pnpm@10.33.2 --activate WORKDIR /app COPY dashboard/package.json dashboard/pnpm-lock.yaml ./ RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile COPY dashboard/ ./ ARG BLOXOS_BUILD_VERSION=development ARG BLOXOS_BUILD_REVISION=unknown ENV BLOXOS_BUILD_VERSION=$BLOXOS_BUILD_VERSION \ BLOXOS_BUILD_REVISION=$BLOXOS_BUILD_REVISION RUN pnpm build FROM node:22-alpine ENV NODE_ENV=production \ HOSTNAME=0.0.0.0 \ PORT=3000 \ NEXT_TELEMETRY_DISABLED=1 WORKDIR /app COPY --from=build --chown=node:node /app/.next/standalone ./ COPY --from=build --chown=node:node /app/.next/static ./.next/static COPY --from=build --chown=node:node /app/public ./public USER node EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ CMD wget -qO- http://127.0.0.1:3000/login >/dev/null || exit 1 CMD ["node", "server.js"]