Some checks failed
Deploy — Staging / Lint, Typecheck & Test (push) Successful in 2m6s
Deploy — Staging / Build & push — admin (push) Failing after 2m7s
Deploy — Staging / Build & push — storefront (push) Failing after 1m35s
Deploy — Staging / Deploy to staging VPS (push) Has been skipped
- Added NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME to both admin and storefront Dockerfiles to ensure it is available during the build process. - Updated deploy-staging.yml to pass the new Cloudinary variable as a build argument. - Clarified comments regarding the handling of NEXT_PUBLIC_* variables and Gitea secret prefixes. This change enhances the build configuration for both applications, ensuring all necessary environment variables are correctly passed during the Docker build process.
65 lines
2.5 KiB
Docker
65 lines
2.5 KiB
Docker
# Build context: ./out (turbo prune admin --docker)
|
|
# out/json/ — package.json files only → used by deps stage for layer caching
|
|
# out/full/ — full pruned monorepo → used by builder stage for source
|
|
# out/package-lock.json
|
|
|
|
# ── Stage 1: deps ────────────────────────────────────────────────────────────
|
|
FROM node:20-alpine AS deps
|
|
|
|
RUN apk add --no-cache libc6-compat
|
|
WORKDIR /app
|
|
|
|
# Upgrade npm to match the project's packageManager (npm@11). The package-lock.json
|
|
# was generated with npm 11 — npm 10 (bundled with node:20) can't fully parse it,
|
|
# causing turbo prune to generate an incomplete pruned lockfile and npm ci to miss
|
|
# packages.
|
|
RUN npm install -g npm@11 --quiet
|
|
|
|
COPY json/ .
|
|
COPY package-lock.json .
|
|
RUN npm ci
|
|
|
|
# ── Stage 2: builder ─────────────────────────────────────────────────────────
|
|
FROM node:20-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY full/ .
|
|
|
|
# NEXT_PUBLIC_* vars are baked into the client bundle at build time by Next.js.
|
|
# They must be present here (not just at runtime) or SSG/prerender fails.
|
|
# Passed via --build-arg in CI. Note: Gitea secrets use a STAGING_/PROD_ prefix
|
|
# which is stripped by the workflow before being forwarded here as build args.
|
|
ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
|
|
ARG NEXT_PUBLIC_CONVEX_URL
|
|
ARG NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME
|
|
ENV NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=$NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY \
|
|
NEXT_PUBLIC_CONVEX_URL=$NEXT_PUBLIC_CONVEX_URL \
|
|
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=$NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME \
|
|
NEXT_TELEMETRY_DISABLED=1
|
|
|
|
RUN npx turbo build --filter=admin
|
|
|
|
# ── Stage 3: runner ──────────────────────────────────────────────────────────
|
|
FROM node:20-alpine AS runner
|
|
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production \
|
|
NEXT_TELEMETRY_DISABLED=1 \
|
|
HOSTNAME=0.0.0.0 \
|
|
PORT=3001
|
|
|
|
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
|
|
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/admin/.next/standalone ./
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/admin/.next/static ./apps/admin/.next/static
|
|
COPY --from=builder --chown=nextjs:nodejs /app/apps/admin/public ./apps/admin/public
|
|
|
|
USER nextjs
|
|
|
|
EXPOSE 3001
|
|
|
|
CMD ["node", "server.js"]
|