Template
CI reads Infisical staging as the read-only convexmonorepo-base-ci machine identity, runs the quality gate, and builds and pushes the image. The template is not deployed, so there is no Convex or VPS deploy step. The local stack moves to its own Compose name and ports so it runs beside the Payload template's, and it syncs the Convex runtime env. The scripts pick up Infisical account switching, dev-kill and a cache-safe CI install.
66 lines
1.9 KiB
Docker
66 lines
1.9 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM docker.io/oven/bun:1.3.14-alpine AS base
|
|
|
|
# Builder stage
|
|
FROM base AS builder
|
|
RUN apk add --no-cache curl libc6-compat
|
|
WORKDIR /app
|
|
|
|
ARG SENTRY_AUTH_TOKEN
|
|
ARG SENTRY_DISABLE_AUTO_UPLOAD=false
|
|
ARG NEXT_PUBLIC_SITE_URL
|
|
ARG NEXT_PUBLIC_CONVEX_URL
|
|
ARG NEXT_PUBLIC_PLAUSIBLE_SRC
|
|
ARG NEXT_PUBLIC_POSTHOG_KEY
|
|
ARG NEXT_PUBLIC_POSTHOG_HOST
|
|
ARG NEXT_PUBLIC_SENTRY_DSN
|
|
ARG NEXT_PUBLIC_SENTRY_URL
|
|
ARG NEXT_PUBLIC_SENTRY_ORG
|
|
ARG NEXT_PUBLIC_SENTRY_PROJECT_NAME
|
|
|
|
ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
|
|
ENV SENTRY_DISABLE_AUTO_UPLOAD=$SENTRY_DISABLE_AUTO_UPLOAD
|
|
ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL
|
|
ENV NEXT_PUBLIC_CONVEX_URL=$NEXT_PUBLIC_CONVEX_URL
|
|
ENV NEXT_PUBLIC_PLAUSIBLE_SRC=$NEXT_PUBLIC_PLAUSIBLE_SRC
|
|
ENV NEXT_PUBLIC_POSTHOG_KEY=$NEXT_PUBLIC_POSTHOG_KEY
|
|
ENV NEXT_PUBLIC_POSTHOG_HOST=$NEXT_PUBLIC_POSTHOG_HOST
|
|
ENV NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN
|
|
ENV NEXT_PUBLIC_SENTRY_URL=$NEXT_PUBLIC_SENTRY_URL
|
|
ENV NEXT_PUBLIC_SENTRY_ORG=$NEXT_PUBLIC_SENTRY_ORG
|
|
ENV NEXT_PUBLIC_SENTRY_PROJECT_NAME=$NEXT_PUBLIC_SENTRY_PROJECT_NAME
|
|
|
|
# Copy source code (node_modules excluded via .dockerignore)
|
|
COPY . .
|
|
|
|
# Install all dependencies
|
|
ENV HUSKY=0
|
|
RUN bun install --frozen-lockfile
|
|
|
|
# Build with proper environment
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
ENV NODE_ENV=production
|
|
RUN sh scripts/build-next-bundle
|
|
|
|
# Runner stage
|
|
FROM docker.io/library/node:22-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV NEXT_TELEMETRY_DISABLED=1
|
|
|
|
RUN addgroup --system --gid 1001 nodejs && \
|
|
adduser --system --uid 1001 nextjs
|
|
|
|
# Copy built application
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/.next/static ./apps/next/.next/static
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/next/public ./apps/next/public
|
|
|
|
USER nextjs
|
|
EXPOSE 3000
|
|
ENV PORT=3000
|
|
ENV HOSTNAME="0.0.0.0"
|
|
|
|
CMD ["node", "apps/next/server.js"]
|