| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- # ---- Base ----
- FROM node:20-slim AS base
- RUN corepack enable pnpm
- WORKDIR /app
- # Install build dependencies for native modules (better-sqlite3)
- RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
- # ---- Dependencies ----
- FROM base AS deps
- COPY package.json pnpm-lock.yaml ./
- COPY prisma ./prisma/
- COPY prisma.config.ts ./
- RUN pnpm install --frozen-lockfile
- # ---- Build ----
- FROM base AS build
- COPY --from=deps /app/node_modules ./node_modules
- COPY . .
- RUN pnpm prisma generate
- RUN pnpm build
- # ---- Web (Next.js standalone server) ----
- FROM node:20-slim AS web
- WORKDIR /app
- ENV NODE_ENV=production
- # Copy standalone output
- COPY --from=build /app/.next/standalone ./
- COPY --from=build /app/.next/static ./.next/static
- COPY --from=build /app/public ./public
- # Copy Prisma client + schema for db:push at runtime
- COPY --from=build /app/generated ./generated
- COPY --from=build /app/prisma ./prisma
- COPY --from=build /app/prisma.config.ts ./prisma.config.ts
- # Copy better-sqlite3 native binding
- COPY --from=deps /app/node_modules/.pnpm/better-sqlite3@*/node_modules/better-sqlite3/build ./node_modules/better-sqlite3/build
- COPY --from=deps /app/node_modules/.pnpm/@prisma+adapter-better-sqlite3@*/node_modules/@prisma/adapter-better-sqlite3 ./node_modules/@prisma/adapter-better-sqlite3
- # SQLite data directory
- RUN mkdir -p /app/data
- ENV DATABASE_URL="file:/app/data/prod.db"
- EXPOSE 3000
- CMD ["node", "server.js"]
- # ---- Worker ----
- FROM base AS worker
- WORKDIR /app
- ENV NODE_ENV=production
- COPY --from=deps /app/node_modules ./node_modules
- COPY --from=build /app/generated ./generated
- COPY . .
- # SQLite data directory (shared via volume)
- RUN mkdir -p /app/data
- ENV DATABASE_URL="file:/app/data/prod.db"
- CMD ["pnpm", "tsx", "src/worker/index.ts"]
|