# Build stage FROM node:20-alpine AS builder WORKDIR /app # Copy package files COPY package.json package-lock.json* ./ # Install dependencies RUN npm ci # Copy Prisma schema COPY prisma ./prisma/ # Copy source files COPY . . # Build TypeScript RUN npm run build # Production stage FROM node:20-bookworm-slim AS runner WORKDIR /app # Set to production ENV NODE_ENV=production # Install OpenSSL for Prisma RUN apt-get update && apt-get install -y openssl && rm -rf /var/lib/apt/lists/* # Create non-root user for security RUN groupadd --system --gid 1001 nodejs RUN useradd --system --uid 1001 --gid nodejs appuser # Copy package files COPY package.json package-lock.json* ./ # Install production dependencies only RUN npm ci --only=production # Copy Prisma schema and generate client for debian COPY prisma ./prisma/ RUN npx prisma generate # Copy built files COPY --from=builder /app/dist ./dist # Create uploads directory RUN mkdir -p uploads && chown -R appuser:nodejs uploads # Set correct ownership RUN chown -R appuser:nodejs /app # Switch to non-root user USER appuser # Expose port (Hugging Face Spaces uses 7860) EXPOSE 7860 # Set port ENV PORT=7860 # Start the application CMD ["node", "dist/index.js"]