FROM node:24-bookworm-slim AS base ENV HOME=/app RUN corepack enable && corepack prepare yarn@1.22.22 --activate RUN apt-get update && apt-get install -y --no-install-recommends \ openssl \ ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app FROM base AS deps COPY package.json yarn.lock ./ COPY prisma ./prisma/ RUN yarn install --frozen-lockfile FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY --from=deps /app/prisma ./prisma COPY . . ARG NEXT_PUBLIC_ENVIRONMENT=production ARG NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID ENV NEXT_PUBLIC_ENVIRONMENT=$NEXT_PUBLIC_ENVIRONMENT \ NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=$NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID \ NEXT_TELEMETRY_DISABLED=1 RUN yarn prisma generate RUN yarn build FROM base AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 ENV PORT=3000 ENV HOSTNAME=0.0.0.0 RUN groupadd --system --gid 1001 nodejs && \ useradd --system --uid 1001 --gid nodejs --create-home nextjs COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static # Prisma COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma COPY --from=builder /app/node_modules/prisma ./node_modules/prisma COPY --from=builder /app/node_modules/.bin ./node_modules/.bin COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/yarn.lock ./yarn.lock COPY --from=builder /app/prisma ./prisma RUN chown -R nextjs:nodejs /app USER nextjs EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \ CMD node -e "require('http').get('http://localhost:3000/', (res) => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))" CMD ["node", "server.js"]