FROM node:22-alpine AS base FROM base AS deps RUN apk add --no-cache libc6-compat openssl WORKDIR /app COPY package.json ./ ENV NODE_ENV=production RUN npm i --omit=dev FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ SKIP_REDIS="true" ARG BASE_URL NEXT_PUBLIC_BASE_URL NEXT_PUBLIC_STRIPE_PUBLIC_KEY ENV BASE_URL=$BASE_URL \ NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL \ NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY \ STRIPE_SECRET_KEY="mock" \ STRIPE_WEBHOOK_SECRET="mock" RUN SKIP_ENV_VALIDATION=1 npm run build FROM base AS runner WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ SKIP_REDIS="false" ARG BASE_URL ENV BASE_URL=$BASE_URL ARG NEXT_PUBLIC_BASE_URL ENV NEXT_PUBLIC_BASE_URL=$NEXT_PUBLIC_BASE_URL ARG INTERNAL_BASE_URL ENV INTERNAL_BASE_URL=$INTERNAL_BASE_URL ARG POSTGRES_USER ARG POSTGRES_PASSWORD ARG POSTGRES_DB ARG PGHOST ARG PGPORT ENV PGHOST=$PGHOST ENV POSTGRES_DB=$POSTGRES_DB ENV PGPORT=$PGPORT ENV POSTGRES_USER=$POSTGRES_USER ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD ARG JWT_SECRET ENV JWT_SECRET=$JWT_SECRET ARG BACKENDSERVER_URL ENV BACKENDSERVER_URL=$BACKENDSERVER_URL ARG STRIPE_SECRET_KEY ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY ARG NEXT_PUBLIC_STRIPE_PUBLIC_KEY ENV NEXT_PUBLIC_STRIPE_PUBLIC_KEY=$NEXT_PUBLIC_STRIPE_PUBLIC_KEY ARG STRIPE_WEBHOOK_SECRET ENV STRIPE_WEBHOOK_SECRET=$STRIPE_WEBHOOK_SECRET ARG FIC_CLIENT_ID ENV FIC_CLIENT_ID=$FIC_CLIENT_ID ARG FIC_ACCESS_TOKEN ENV FIC_ACCESS_TOKEN=$FIC_ACCESS_TOKEN ARG FIC_COMPANY_ID ENV FIC_COMPANY_ID=$FIC_COMPANY_ID ARG ARUBA_USER ENV ARUBA_USER=$ARUBA_USER ARG ARUBA_PASS ENV ARUBA_PASS=$ARUBA_PASS ARG EXP_API_USER ENV EXP_API_USER=$EXP_API_USER ARG EXP_API_PASS ENV EXP_API_PASS=$EXP_API_PASS ARG KEYDB_URL ENV KEYDB_URL=$KEYDB_URL ARG TILES_URL ENV TILES_URL=$TILES_URL ARG SKEBBY_USER ENV SKEBBY_USER=$SKEBBY_USER ARG SKEBBY_PASS ENV SKEBBY_PASS=$SKEBBY_PASS ENV REVALIDATION_SECRET="SWKpgaaLfsyeqV1eOT0WG7TUFBewir8kJXure3O37ki8Lt4Z4IiEgBW4zPHDdM5c" ARG STORAGE_URL ENV STORAGE_URL=$STORAGE_URL ARG STORAGE_TOKEN ENV STORAGE_TOKEN=$STORAGE_TOKEN RUN apk add --no-cache curl pandoc typst RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 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 COPY --from=builder --chown=nextjs:nodejs /app/typst ./typst RUN mkdir -p /app/tmp && chown nextjs:nodejs /app/tmp USER nextjs EXPOSE 3000 ENV PORT=3000 CMD ["node", "server.js"]