Files
plane/apps/web/Dockerfile.web
2025-06-26 14:34:02 +05:30

97 lines
2.9 KiB
Docker

# *****************************************************************************
# STAGE 1: Setup base image
# *****************************************************************************
FROM node:22-alpine AS base
RUN apk add --no-cache libc6-compat
RUN apk update
ARG NEXT_PUBLIC_API_BASE_URL=""
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL
ARG NEXT_PUBLIC_ADMIN_BASE_URL=""
ENV NEXT_PUBLIC_ADMIN_BASE_URL=$NEXT_PUBLIC_ADMIN_BASE_URL
ARG NEXT_PUBLIC_ADMIN_BASE_PATH="/god-mode"
ENV NEXT_PUBLIC_ADMIN_BASE_PATH=$NEXT_PUBLIC_ADMIN_BASE_PATH
ARG NEXT_PUBLIC_LIVE_BASE_URL=""
ENV NEXT_PUBLIC_LIVE_BASE_URL=$NEXT_PUBLIC_LIVE_BASE_URL
ARG NEXT_PUBLIC_LIVE_BASE_PATH="/live"
ENV NEXT_PUBLIC_LIVE_BASE_PATH=$NEXT_PUBLIC_LIVE_BASE_PATH
ARG NEXT_PUBLIC_SPACE_BASE_URL=""
ENV NEXT_PUBLIC_SPACE_BASE_URL=$NEXT_PUBLIC_SPACE_BASE_URL
ARG NEXT_PUBLIC_SPACE_BASE_PATH="/spaces"
ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH
ARG NEXT_PUBLIC_WEB_BASE_URL=""
ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL
ENV NEXT_TELEMETRY_DISABLED=1
ENV TURBO_TELEMETRY_DISABLED=1
# *****************************************************************************
# STAGE 2: Prune the project
# *****************************************************************************
FROM base AS pruner
# Set working directory
WORKDIR /app
RUN corepack enable && corepack prepare pnpm --activate
RUN npm install turbo --global
COPY . .
RUN turbo prune --scope=web --docker
# *****************************************************************************
# STAGE 3: Install dependencies & build the project
# *****************************************************************************
FROM base AS builder
WORKDIR /app
# Copy lockfile and package.json's of isolated subworkspace
COPY --from=pruner /app/out/json/ .
COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml
COPY --from=pruner /app/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
COPY turbo.json turbo.json
# Install dependencies
RUN corepack enable && corepack prepare pnpm --activate
RUN pnpm install
# Build the project
COPY --from=pruner /app/out/full/ .
RUN pnpm turbo run build --filter=web...
# *****************************************************************************
# STAGE 4: Copy the project and start it
# *****************************************************************************
FROM base AS runner
# Set NODE_ENV to production
ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nodejs
USER nodejs
WORKDIR /app
COPY --from=builder /app/web/next.config.js .
COPY --from=builder /app/web/package.json .
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder /app/web/.next/standalone ./
COPY --from=builder /app/web/.next ./web/.next
COPY --from=builder /app/web/public ./web/public
EXPOSE 3000