Barazo default frontend barazo.forum
at main 83 lines 3.0 kB view raw
1# Multi-stage build for barazo-web (Next.js standalone) 2# Build context: monorepo root (docker build -f barazo-web/Dockerfile .) 3 4# --------------------------------------------------------------------------- 5# Stage 1: Install dependencies 6# --------------------------------------------------------------------------- 7FROM node:24-alpine AS deps 8RUN apk add --no-cache libc6-compat 9WORKDIR /workspace 10 11# Enable pnpm via corepack 12RUN corepack enable && corepack prepare pnpm@10.29.2 --activate 13 14# Copy workspace root config (including .npmrc for inject-workspace-packages) 15COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ 16 17# Copy all workspace package.json files (needed for pnpm install) 18COPY barazo-lexicons/package.json ./barazo-lexicons/ 19COPY barazo-api/package.json ./barazo-api/ 20COPY barazo-web/package.json ./barazo-web/ 21COPY barazo-plugins/packages/plugin-signatures/package.json ./barazo-plugins/packages/plugin-signatures/ 22 23# Install all dependencies 24RUN pnpm install --frozen-lockfile 25 26# --------------------------------------------------------------------------- 27# Stage 2: Build 28# --------------------------------------------------------------------------- 29FROM node:24-alpine AS builder 30WORKDIR /workspace 31 32RUN corepack enable && corepack prepare pnpm@10.29.2 --activate 33 34# Copy installed dependencies 35COPY --from=deps /workspace/ ./ 36 37# Copy lexicons source (workspace dependency) 38COPY barazo-lexicons/ ./barazo-lexicons/ 39 40# Copy plugins source (workspace dependency — frontend components bundled by Next.js) 41COPY barazo-plugins/ ./barazo-plugins/ 42 43# Copy web source 44COPY barazo-web/ ./barazo-web/ 45 46# Build lexicons first (workspace dependency), then Next.js. 47# Plugin frontend source is compiled by Next.js via transpilePackages. 48ENV NEXT_TELEMETRY_DISABLED=1 49RUN pnpm --filter @singi-labs/lexicons build && \ 50 pnpm --filter @singi-labs/web build 51 52# --------------------------------------------------------------------------- 53# Stage 3: Production runner 54# --------------------------------------------------------------------------- 55FROM node:24-alpine AS runner 56WORKDIR /app 57 58ENV NODE_ENV=production 59ENV NEXT_TELEMETRY_DISABLED=1 60# docker-compose healthcheck expects port 3001 61ENV PORT=3001 62# Bind to all interfaces (default binds to container hostname only) 63ENV HOSTNAME=0.0.0.0 64 65# Create non-root user 66RUN addgroup --system --gid 1001 nodejs && \ 67 adduser --system --uid 1001 nextjs 68 69# Copy standalone server (includes node_modules and server.js) 70COPY --from=builder --chown=nextjs:nodejs /workspace/barazo-web/.next/standalone/ ./ 71 72# Copy static assets into the standalone output (must be relative to server.js) 73COPY --from=builder --chown=nextjs:nodejs /workspace/barazo-web/.next/static/ ./barazo-web/.next/static/ 74COPY --from=builder --chown=nextjs:nodejs /workspace/barazo-web/public/ ./barazo-web/public/ 75 76USER nextjs 77 78EXPOSE 3001 79 80HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \ 81 CMD wget -qO- http://127.0.0.1:3001/api/health || exit 1 82 83CMD ["node", "barazo-web/server.js"]