Spaces:
Running
Running
| # Base Image | |
| FROM node:20-slim | |
| # Set working directory | |
| WORKDIR /app | |
| # Install system dependencies (needed for some npm packages) | |
| RUN apt-get update && apt-get install -y \ | |
| python3 \ | |
| make \ | |
| g++ \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Copy package files first for better layer caching | |
| COPY package.json package-lock.json ./ | |
| # Install all dependencies including dev dependencies (needed for TypeScript build) | |
| # Don't set NODE_ENV=production yet, so devDependencies are installed | |
| RUN npm ci && npm cache clean --force | |
| # Copy source code and config files | |
| COPY tsconfig.json ./ | |
| COPY ormconfig.ts ./ | |
| COPY src ./src | |
| COPY start.sh ./ | |
| # Build TypeScript (migrations will be compiled to dist/migrations/*.js) | |
| # Use --verbose flag to see detailed errors | |
| RUN npm run build 2>&1 || (echo "TypeScript compilation failed. Check errors above." && exit 1) | |
| # Verify build succeeded - check key files exist | |
| RUN test -f dist/index.js || (echo "Build failed: dist/index.js not found" && exit 1) | |
| RUN test -d dist/migrations || echo "Warning: migrations directory not found" | |
| RUN test -f dist/scripts/run-migrations.js || echo "Warning: migration script not found" | |
| # Remove dev dependencies after build | |
| RUN npm prune --production | |
| # Set NODE_ENV for production runtime | |
| ENV NODE_ENV=production | |
| # Make startup script executable | |
| RUN chmod +x ./start.sh | |
| # Expose port (Hugging Face Spaces uses 7860) | |
| EXPOSE 7860 | |
| # Use the startup script | |
| CMD ["./start.sh"] | |