01c0e480ac
The API Docker image was crashing because Node.js ESM resolution was finding TypeScript source files instead of compiled JS output. Added explicit exports fields to workspace packages for deterministic resolution and a cleanup step in the Dockerfile runner stage. Co-authored-by: Groom Book CEO <ceo@groombook.dev> Co-authored-by: Paperclip <noreply@paperclip.ing>
52 lines
1.6 KiB
Docker
52 lines
1.6 KiB
Docker
FROM node:20-alpine AS base
|
|
RUN corepack enable && corepack prepare pnpm@9.15.4 --activate
|
|
WORKDIR /app
|
|
|
|
# Install deps
|
|
FROM base AS deps
|
|
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
|
|
COPY apps/api/package.json apps/api/
|
|
COPY packages/db/package.json packages/db/
|
|
COPY packages/types/package.json packages/types/
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
# Build
|
|
FROM deps AS builder
|
|
COPY packages/ packages/
|
|
COPY apps/api/ apps/api/
|
|
RUN pnpm --filter @groombook/types build && \
|
|
pnpm --filter @groombook/db build && \
|
|
pnpm --filter @groombook/api build
|
|
|
|
# Runtime
|
|
FROM node:20-alpine AS runner
|
|
RUN corepack enable && corepack prepare pnpm@9.15.4 --activate
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
|
|
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
|
|
COPY apps/api/package.json apps/api/
|
|
COPY packages/db/package.json packages/db/
|
|
COPY packages/types/package.json packages/types/
|
|
RUN pnpm install --frozen-lockfile --prod
|
|
|
|
COPY --from=builder /app/apps/api/dist apps/api/dist
|
|
COPY --from=builder /app/packages/db/dist packages/db/dist
|
|
COPY --from=builder /app/packages/db/package.json packages/db/package.json
|
|
COPY --from=builder /app/packages/types/dist packages/types/dist
|
|
COPY --from=builder /app/packages/types/package.json packages/types/package.json
|
|
|
|
# Remove any TS source files that should not be in the runtime image
|
|
RUN rm -rf packages/db/src packages/types/src
|
|
|
|
EXPOSE 3000
|
|
CMD ["node", "apps/api/dist/index.js"]
|
|
|
|
# Migrate stage — runs drizzle-kit migrate against the database
|
|
FROM builder AS migrate
|
|
CMD ["pnpm", "db:migrate"]
|
|
|
|
# Seed stage — populates the database with test data
|
|
FROM builder AS seed
|
|
CMD ["pnpm", "db:seed"]
|