# WidgeTDC Backend - Hugging Face Spaces # Using node:20-slim (Debian-based) for glibc compatibility with onnxruntime-node FROM node:20-slim AS builder # Install OpenSSL for Prisma RUN apt-get update -y && apt-get install -y openssl libssl-dev ca-certificates && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy root workspace config COPY package*.json ./ COPY tsconfig.base.json ./ # Copy workspace packages (needed for workspace:* resolution) COPY packages/domain-types ./packages/domain-types/ COPY packages/mcp-types ./packages/mcp-types/ # Copy backend package.json and prisma COPY apps/backend/package*.json ./apps/backend/ COPY apps/backend/prisma ./apps/backend/prisma/ # Install dependencies with workspace resolution RUN npm ci # Generate Prisma client RUN cd apps/backend && npx prisma generate # Copy backend source code and tsconfig COPY apps/backend/src ./apps/backend/src/ COPY apps/backend/tsconfig.json ./apps/backend/ # Build shared packages first RUN cd packages/domain-types && npm run build RUN cd packages/mcp-types && npm run build # Build backend RUN cd apps/backend && npm run build-fixed # Final stage - Debian-based for glibc compatibility FROM node:20-slim WORKDIR /app # Install OpenSSL for Prisma runtime RUN apt-get update -y && apt-get install -y openssl ca-certificates && rm -rf /var/lib/apt/lists/* # Copy built artifacts COPY --from=builder /app/apps/backend/dist ./dist COPY --from=builder /app/apps/backend/package.json ./ COPY --from=builder /app/node_modules ./node_modules # Copy sql.js WASM file for SQLite fallback COPY --from=builder /app/node_modules/sql.js/dist/sql-wasm.wasm ./dist/ # Environment ENV NODE_ENV=production ENV PORT=7860 EXPOSE 7860 CMD ["node", "dist/index.cjs"]