Barazo default frontend
barazo.forum
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"]