kanban-dev-webapp/Dockerfile
Dave 2d87cd505b chore(config): update .gitignore and enhance Next.js configuration
Added .superpowers directory to .gitignore to prevent tracking of specific Pocketbase data. Updated Next.js configuration to enable standalone output for optimized Docker image builds, reducing the need for the full node_modules tree.
2026-09-19 07:52:09 +02:00

56 lines
1.8 KiB
Docker

# Client Board — production image for Coolify.
#
# This container is the Next.js app ONLY. PocketBase is a separate, already-
# hosted service (see docs/superpowers memory: "Coolify-only PocketBase") —
# this Dockerfile does not run or bundle it.
#
# NEXT_PUBLIC_APP_URL and NEXT_PUBLIC_PB_URL are inlined into the client
# JavaScript bundle at BUILD time, not read at container start. Coolify must
# be told to pass them as build arguments (its "Build Variables" section),
# not just as runtime environment variables — a value only set at runtime
# will be missing from the browser bundle entirely.
# ---- deps: install once, reused unless package*.json changes ----
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# ---- builder: compile with the build-time public vars baked in ----
FROM node:22-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ARG NEXT_PUBLIC_APP_URL
ARG NEXT_PUBLIC_PB_URL
ENV NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL
ENV NEXT_PUBLIC_PB_URL=$NEXT_PUBLIC_PB_URL
ENV NEXT_TELEMETRY_DISABLED=1
RUN npm run build
# ---- runner: the small image Coolify actually deploys ----
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Standalone's server only binds every interface when told to — left at the
# default it binds localhost-only, which is unreachable from outside the
# container.
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
RUN addgroup --system --gid 1001 nodejs \
&& adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]