# WidgeTDC Backend - Simple Dockerfile for HuggingFace Spaces FROM node:20-alpine # Install dependencies for native modules and Prisma RUN apk add --no-cache python3 make g++ git openssl openssl-dev WORKDIR /app # Copy all package files COPY package*.json ./ COPY packages/domain-types/package*.json ./packages/domain-types/ COPY packages/mcp-types/package*.json ./packages/mcp-types/ # Install dependencies RUN npm install # Copy source code COPY packages/ ./packages/ COPY src/ ./src/ COPY prisma/ ./prisma/ COPY tsconfig.json ./ # Build shared packages RUN cd packages/domain-types && npm run build RUN cd packages/mcp-types && npm run build # Generate Prisma client RUN npx prisma generate || true # Build backend with esbuild (bypasses TypeScript strict checking) RUN npx esbuild src/index.ts --bundle --platform=node --target=node20 \ --outfile=dist/index.js \ --external:@prisma/client \ --external:better-sqlite3 \ --external:pg-native \ --external:@xenova/transformers \ --external:onnxruntime-node \ --external:sharp \ --external:canvas \ --format=cjs \ --log-level=warning # Create data directories RUN mkdir -p /app/data/dropzone /app/data/vidensarkiv /app/data/agents /app/data/harvested # Set permissions for non-root user RUN chown -R 1000:1000 /app USER 1000 # Environment ENV NODE_ENV=production ENV PORT=7860 ENV DOCKER=true ENV HF_SPACE=true EXPOSE 7860 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD node -e "require('http').get('http://localhost:7860/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))" CMD ["node", "dist/index.js"]