35 lines
1.3 KiB
Docker
35 lines
1.3 KiB
Docker
# ─── Build stage ───────────────────────────────────────────────
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
RUN npm install -g pnpm@9
|
|
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
|
|
COPY web/package.json ./web/package.json
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
COPY web/ ./web/
|
|
WORKDIR /app/web
|
|
RUN pnpm build
|
|
|
|
# ─── Runtime stage ────────────────────────────────────────────
|
|
FROM node:22-alpine
|
|
WORKDIR /app
|
|
|
|
RUN npm install -g pnpm@9 tsx
|
|
COPY --from=builder /app/pnpm-workspace.yaml /app/package.json /app/pnpm-lock.yaml ./
|
|
COPY --from=builder /app/web/package.json ./web/package.json
|
|
RUN pnpm install --frozen-lockfile --prod
|
|
|
|
COPY --from=builder /app/web/.output ./.output
|
|
COPY --from=builder /app/web/src/server/db ./src/server/db
|
|
COPY --from=builder /app/web/src/server/jobs ./src/server/jobs
|
|
COPY --from=builder /app/web/src/server/services ./src/server/services
|
|
COPY --from=builder /app/web/src/server/lib ./src/server/lib
|
|
COPY --from=builder /app/web/tsconfig.json ./web/tsconfig.json
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
# Default: run scheduler (override CMD for other use cases)
|
|
CMD ["tsx", "src/server/jobs/start.ts"]
|