Spaces:
Paused
Paused
| # Hugging Face Spaces Deployment | |
| This guide explains how to deploy your combined FastAPI backend and Next.js frontend to Hugging Face Spaces. | |
| > β **Build Status**: Docker build is working successfully with resolved path alias issues! | |
| ## Overview | |
| The `Dockerfile.huggingface` creates a single container that runs: | |
| - **FastAPI backend** on port 8002 | |
| - **Next.js frontend** on port 3000 | |
| - **Nginx reverse proxy** on port 7860 (required by Hugging Face Spaces) | |
| - **Supervisor** to manage all processes | |
| ## Files for Hugging Face Spaces | |
| 1. **`Dockerfile`** - Combined Dockerfile for both services (multi-stage build) | |
| 2. **`nginx.conf`** - Nginx configuration for routing | |
| 3. **`supervisord.conf`** - Process manager configuration | |
| 4. **`.dockerignore`** - Optimized to exclude only necessary files | |
| 5. **`next.config.js`** - Enhanced with webpack path alias configuration | |
| 6. **`tsconfig.json`** - Updated with explicit path mappings | |
| ## Deployment Steps | |
| ### 1. Prepare Your Repository | |
| Your repository is already configured with the correct `Dockerfile` for Hugging Face Spaces deployment. | |
| ### 2. Set Environment Variables in Hugging Face Spaces | |
| In your Hugging Face Space settings, add these secrets: | |
| - `GOOGLE_API_KEY` - Your Google API key | |
| - `OPENAI_API_KEY` - Your OpenAI API key | |
| ### 3. Configure Your Space | |
| - **Space Type**: Docker | |
| - **Visibility**: Public or Private (your choice) | |
| - **Hardware**: CPU Basic (or upgrade if needed) | |
| ### 4. Update API URLs in Frontend | |
| Make sure your frontend points to the correct API endpoints: | |
| ```typescript | |
| // In your frontend code, use relative URLs: | |
| const API_BASE_URL = "/api" // This goes to Next.js API routes in src/app/api/ | |
| // Next.js API routes will then proxy to FastAPI using: | |
| // SERVER_BASE_URL=http://localhost:8002 (set in Dockerfile) | |
| ``` | |
| ### 5. Deploy | |
| 1. Push your code to the Hugging Face Space repository | |
| 2. The space will automatically build and deploy | |
| ## How It Works | |
| ### Architecture | |
| ``` | |
| External Request :7860 | |
| β | |
| Nginx Proxy | |
| β | |
| Next.js :3000 (handles ALL routes) | |
| β | |
| /api/* β src/app/api/ routes | |
| β | |
| proxy.ts uses SERVER_BASE_URL | |
| β | |
| FastAPI Backend :8002 | |
| ``` | |
| ### Port Mapping | |
| - **7860** - Main port (required by Hugging Face Spaces) | |
| - **3000** - Next.js frontend (internal) - handles all routing | |
| - **8002** - FastAPI backend (internal) - accessed via Next.js proxy | |
| ### URL Routing | |
| - `/` - Next.js frontend (all routes handled by Next.js) | |
| - `/api/*` - Next.js API routes (in `src/app/api/`) that proxy to FastAPI backend | |
| - `/backend-docs` - Direct FastAPI documentation (for debugging) | |
| - `/backend-openapi.json` - Direct FastAPI OpenAPI schema (for debugging) | |
| ### Process Management | |
| Supervisor manages three processes: | |
| 1. **backend** - FastAPI server (port 8002) | |
| 2. **frontend** - Next.js server (port 3000) - handles all routing and proxying | |
| 3. **nginx** - Reverse proxy (port 7860) - routes all traffic to Next.js | |
| ## Troubleshooting | |
| ### Common Issues | |
| 1. **Build fails with "Module not found: Can't resolve '@/lib/utils'"** | |
| - **FIXED**: This was caused by `lib/` being excluded in `.dockerignore` | |
| - The issue has been resolved by removing the `lib/` exclusion pattern | |
| 2. **Build fails during npm install** | |
| - Check that all package.json dependencies are valid | |
| - Ensure Node.js version compatibility | |
| 3. **FastAPI fails to start** | |
| - Check environment variables are set | |
| - Verify the starfish package is properly configured | |
| - Check logs in the Space's logs tab | |
| 4. **Frontend can't reach backend** | |
| - Ensure API calls use relative URLs (`/api/...`) | |
| - Check that `SERVER_BASE_URL=http://localhost:8002` is set in the Dockerfile | |
| - Verify Next.js API routes in `src/app/api/` are proxying correctly | |
| - For direct FastAPI access, use `/backend-docs` instead of `/docs` | |
| 5. **Space shows "Application starting" indefinitely** | |
| - Check supervisor logs for errors | |
| - Verify all services are starting properly | |
| ### Viewing Logs | |
| In your Hugging Face Space: | |
| 1. Go to the "Logs" tab | |
| 2. Look for errors from supervisor, nginx, backend, or frontend | |
| 3. Logs are also written to `/var/log/` in the container | |
| ### Local Testing | |
| Test the Hugging Face build locally: | |
| ```bash | |
| # Build the image | |
| docker build -t starfishai-web . | |
| # Run with environment variables | |
| docker run -p 7860:7860 3000:3000 8002:8002\ | |
| -e GOOGLE_API_KEY=your_key \ | |
| -e OPENAI_API_KEY=your_key \ | |
| starfishai-web | |
| ``` | |
| Then visit: | |
| - http://localhost:7860 - Main application | |
| - http://localhost:7860/backend-docs - Direct FastAPI documentation | |
| - http://localhost:7860/backend-openapi.json - Direct FastAPI schema | |
| ## Recent Fixes & Improvements | |
| ### Path Alias Resolution Fixed | |
| - **Issue**: Build was failing with `Module not found: Can't resolve '@/lib/utils'` | |
| - **Root Cause**: The `.dockerignore` file was excluding the `lib/` directory | |
| - **Solution**: Removed `lib/` from `.dockerignore` and enhanced path configuration | |
| - **Files Updated**: | |
| - `.dockerignore` - Removed generic `lib/` exclusion | |
| - `next.config.js` - Added explicit webpack path aliases | |
| - `tsconfig.json` - Enhanced path mappings | |
| ### Docker Build Optimization | |
| - **Multi-stage build** for optimal image size | |
| - **Specific Python exclusions** in `.dockerignore` (e.g., `api/__pycache__/` instead of all `__pycache__/`) | |
| - **Enhanced file copying strategy** during build | |
| ## Performance Tips | |
| 1. **Use CPU Basic** for development, upgrade for production | |
| 2. **Optimize Docker image** by removing unnecessary files | |
| 3. **Use caching** for build dependencies | |
| 4. **Monitor resource usage** in the Space dashboard | |
| ## Security Notes | |
| - Never commit API keys to your repository | |
| - Use Hugging Face Spaces secrets for sensitive environment variables | |
| - Consider making your Space private if it contains sensitive data | |
| - Regularly update dependencies for security patches | |
| docker run -d -p 7860:7860 --name starfish-app -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf -v $(pwd)/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf starfish-app | |
| docker build -t starfish-app . | |
| docker build --no-cache -t your-image-name:your-tag . |