# syntax=docker/dockerfile:1 FROM node:22-bookworm-slim AS deps RUN apt-get update \ && apt-get install -y --no-install-recommends python3 make g++ openssl ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --ignore-scripts FROM node:22-bookworm-slim AS builder RUN apt-get update \ && apt-get install -y --no-install-recommends python3 make g++ openssl ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NEXT_TELEMETRY_DISABLED=1 ENV DATABASE_URL="file:./build-placeholder.db" RUN npm rebuild better-sqlite3 RUN npx prisma generate RUN npx prisma migrate deploy RUN npm run build FROM node:22-bookworm-slim AS runner WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 RUN apt-get update \ && apt-get install -y --no-install-recommends openssl ca-certificates gosu \ && rm -rf /var/lib/apt/lists/* \ && groupadd --system --gid 1001 nodejs \ && useradd --system --uid 1001 --gid nodejs nextjs COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/prisma.config.ts ./prisma.config.ts COPY --from=builder /app/src/lib/password.ts ./src/lib/password.ts COPY --from=builder /app/src/lib/constants.ts ./src/lib/constants.ts COPY --from=builder /app/src/lib/site-content-defaults.ts ./src/lib/site-content-defaults.ts COPY --from=builder /app/src/lib/week-calendar.ts ./src/lib/week-calendar.ts COPY --from=builder /app/src/generated/prisma ./src/generated/prisma COPY docker/entrypoint.sh /entrypoint.sh RUN npm install prisma@7.5.0 dotenv@17.3.1 --omit=dev \ && npm install -g tsx@4.21.0 \ && chmod +x /entrypoint.sh \ && mkdir -p /app/data /app/public/uploads \ && chown -R nextjs:nodejs /app EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" ENTRYPOINT ["/entrypoint.sh"]