Spaces:
Running
Running
| # ---- Build Stage ---- | |
| FROM node:22-slim AS builder | |
| RUN corepack enable && corepack prepare pnpm@9 --activate | |
| WORKDIR /app | |
| # Copy workspace config and lockfile | |
| COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ | |
| COPY .pnpm-approve-builds ./ | |
| # Copy package.json files for all packages | |
| COPY packages/shared/package.json packages/shared/ | |
| COPY packages/web/package.json packages/web/ | |
| COPY packages/server/package.json packages/server/ | |
| # Install dependencies | |
| RUN pnpm install --frozen-lockfile | |
| # Copy source code | |
| COPY packages/shared/ packages/shared/ | |
| COPY packages/web/ packages/web/ | |
| COPY packages/server/ packages/server/ | |
| # Build shared package first, then web and server | |
| RUN pnpm --filter @icc/shared build 2>/dev/null || true | |
| RUN pnpm --filter @icc/web build | |
| RUN pnpm --filter @icc/server build | |
| # ---- Production Stage ---- | |
| FROM node:22-slim AS production | |
| RUN corepack enable && corepack prepare pnpm@9 --activate | |
| WORKDIR /app | |
| # Copy workspace config | |
| COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ | |
| COPY .pnpm-approve-builds ./ | |
| COPY packages/shared/package.json packages/shared/ | |
| COPY packages/server/package.json packages/server/ | |
| # Web package.json needed for workspace resolution | |
| COPY packages/web/package.json packages/web/ | |
| # Install production dependencies only | |
| RUN pnpm install --frozen-lockfile --prod | |
| # Copy built artifacts | |
| COPY --from=builder /app/packages/shared/dist packages/shared/dist/ | |
| COPY --from=builder /app/packages/shared/package.json packages/shared/ | |
| COPY --from=builder /app/packages/server/dist packages/server/dist/ | |
| COPY --from=builder /app/packages/web/dist packages/web/dist/ | |
| # Create data directory for SQLite and screenshots | |
| RUN mkdir -p /app/packages/server/data/screenshots | |
| # Set working directory to server (sqlite.db relative path) | |
| WORKDIR /app/packages/server | |
| # Environment | |
| ENV NODE_ENV=production | |
| ENV PORT=7860 | |
| ENV TZ=America/Toronto | |
| ENV DATABASE_URL=sqlite.db | |
| ENV APP_URL=* | |
| ENV DISABLE_SCREENSHOTS=true | |
| # HuggingFace Spaces exposes port 7860 | |
| EXPOSE 7860 | |
| CMD ["node", "dist/index.js"] | |