diff --git a/Dockerfile b/Dockerfile index ca0b6fd..d2242ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,71 +2,51 @@ FROM node:20-alpine AS builder WORKDIR /app RUN npm install -g pnpm -# Copy workspace config COPY pnpm-workspace.yaml package.json tsconfig.base.json pnpm-lock.yaml ./ - -# Copy package.json files for workspace resolution COPY packages/shared/package.json packages/shared/ COPY apps/api/package.json apps/api/ COPY apps/dashboard/package.json apps/dashboard/ -# Install dependencies (including devDependencies for building) RUN pnpm install --frozen-lockfile -# Copy source code COPY packages/shared packages/shared COPY apps/api apps/api COPY apps/dashboard apps/dashboard -# Build shared package first RUN pnpm --filter @kooltab/shared run build - -# Generate Prisma client RUN cd apps/api && npx prisma generate - -# Build API and Dashboard RUN pnpm --filter @kooltab/api run build RUN pnpm --filter @kooltab/dashboard run build -# Flatten symlinks in node_modules so Docker COPY works reliably -RUN cp -rL node_modules /app/node_modules_flat - -# ---- Production API image ---- +# ---- Deploy the API with pnpm deploy ----- FROM node:20-alpine AS api +RUN npm install -g pnpm WORKDIR /app - -# Copy built API output COPY --from=builder /app/apps/api/dist ./dist COPY --from=builder /app/apps/api/prisma ./prisma COPY --from=builder /app/apps/api/package.json ./ - -# Copy flat node_modules (no pnpm symlinks) -COPY --from=builder /app/node_modules_flat ./node_modules - -# Copy built shared package (replaces workspace symlink with real files) -COPY --from=builder /app/packages/shared/dist ./node_modules/@kooltab/shared/dist -COPY --from=builder /app/packages/shared/package.json ./node_modules/@kooltab/shared/package.json +COPY --from=builder /app/pnpm-lock.yaml ./ +COPY --from=builder /app/pnpm-workspace.yaml ./ +COPY --from=builder /app/packages/shared/package.json ./packages/shared/ +COPY --from=builder /app/packages/shared/dist ./packages/shared/dist/ +RUN pnpm install --frozen-lockfile --prod EXPOSE 3001 - -# Run migrations on startup, then start server CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main.js"] -# ---- Production Dashboard image ---- +# ---- Deploy the Dashboard with pnpm deploy ----- FROM node:20-alpine AS dashboard +RUN npm install -g pnpm WORKDIR /app - COPY --from=builder /app/apps/dashboard/.next ./.next +COPY --from=builder /app/apps/dashboard/public ./public 2>/dev/null || mkdir -p public COPY --from=builder /app/apps/dashboard/package.json ./ COPY --from=builder /app/apps/dashboard/next.config.js ./ -RUN mkdir -p public - -# Copy flat node_modules (no pnpm symlinks) -COPY --from=builder /app/node_modules_flat ./node_modules - -# Copy built shared package -COPY --from=builder /app/packages/shared/dist ./node_modules/@kooltab/shared/dist +COPY --from=builder /app/pnpm-lock.yaml ./ +COPY --from=builder /app/pnpm-workspace.yaml ./ +COPY --from=builder /app/packages/shared/package.json ./packages/shared/ +COPY --from=builder /app/packages/shared/dist ./packages/shared/dist/ +RUN pnpm install --frozen-lockfile --prod EXPOSE 3000 - CMD ["node", "node_modules/next/dist/bin/next", "start"] \ No newline at end of file