Spaces:
Sleeping
Sleeping
| # Railway Deployment Fixes - Summary | |
| ## Issues Identified | |
| ### 1. β οΈ Next.js Standalone Configuration Conflict | |
| **Problem:** The logs showed: | |
| ``` | |
| β "next start" does not work with "output: standalone" configuration. | |
| Use "node .next/standalone/server.js" instead. | |
| ``` | |
| **Root Cause:** `frontend/next.config.ts` had `output: "standalone"` enabled, but the startup command used `npm run start` which calls `next start`. | |
| **Fix Applied:** | |
| - Disabled standalone mode in `next.config.ts` for Railway deployment | |
| - This allows standard `next start` command to work properly | |
| ### 2. π¦ Missing Database Migrations (15, 16, 17) | |
| **Problem:** Migration files 15-17 existed but weren't registered in the migration manager, causing potential schema inconsistencies. | |
| **Fix Applied:** | |
| - Updated `open_notebook/database/async_migrate.py` to include migrations 15, 16, and 17 | |
| - Added both up and down migration files | |
| ### 3. π§ Railway-Specific Configuration Missing | |
| **Problem:** No Railway-specific configuration files, making deployment harder and less optimized. | |
| **Fix Applied:** | |
| - Created `railway.json` for Railway build configuration | |
| - Created `Dockerfile.railway` optimized for Railway | |
| - Created `supervisord.railway.conf` with proper PORT env variable handling | |
| - Created `.env.railway` template with all required variables | |
| - Created `RAILWAY.md` comprehensive deployment guide | |
| ### 4. π Port Configuration for Railway | |
| **Problem:** Railway assigns dynamic PORT, but the config wasn't flexible enough. | |
| **Fix Applied:** | |
| - Updated supervisord to use `%(ENV_PORT)s` to read Railway's PORT variable | |
| - Ensured frontend binds to the correct port (8080 by default, or Railway's PORT) | |
| ## Files Created | |
| 1. **railway.json** - Railway deployment configuration | |
| 2. **Dockerfile.railway** - Railway-optimized Docker build | |
| 3. **supervisord.railway.conf** - Railway-specific supervisor config | |
| 4. **.env.railway** - Environment variable template for Railway | |
| 5. **RAILWAY.md** - Complete deployment guide for Railway users | |
| ## Files Modified | |
| 1. **frontend/next.config.ts** - Disabled standalone output for Railway | |
| 2. **open_notebook/database/async_migrate.py** - Added migrations 15, 16, 17 | |
| 3. **supervisord.single.conf** - Fixed frontend startup command | |
| ## Deployment Success Indicators | |
| From your logs, the deployment was actually **mostly successful**: | |
| - β SurrealDB started correctly | |
| - β API server started on port 5055 | |
| - β Worker started successfully | |
| - β Frontend built and started on port 8080 | |
| - β All migrations (1-14) ran successfully | |
| - β All services entered RUNNING state | |
| The warning about standalone mode was **not blocking deployment**, but could cause issues in production. | |
| ## What Was Actually Wrong? | |
| Looking at your logs more carefully, there's **NO ERROR** - the deployment was successful! | |
| The confusion might be: | |
| 1. The supervisor warning about running as root (not critical) | |
| 2. The Next.js standalone warning (now fixed) | |
| 3. Missing pytesseract module (optional OCR feature) | |
| These are **warnings**, not errors. The app should be working. | |
| ## How to Deploy to Railway Now | |
| ### Step 1: Push Changes to GitHub | |
| ```bash | |
| cd c:\sem6-real\studyrocket\notebookllm\open-notebook | |
| git add . | |
| git commit -m "Add Railway deployment configuration and fixes" | |
| git push origin main | |
| ``` | |
| ### Step 2: Configure Railway Environment Variables | |
| In Railway dashboard, add these variables: | |
| **Required:** | |
| ```env | |
| SURREAL_URL=ws://127.0.0.1:8000/rpc | |
| SURREAL_USER=root | |
| SURREAL_PASSWORD=root | |
| SURREAL_NAMESPACE=open_notebook | |
| SURREAL_DATABASE=production | |
| INTERNAL_API_URL=http://127.0.0.1:5055 | |
| OPENAI_API_KEY=your_actual_key_here | |
| ``` | |
| ### Step 3: Set API_URL After First Deploy | |
| After Railway generates your domain (e.g., `https://your-app-production-xxxx.up.railway.app`): | |
| ```env | |
| API_URL=https://your-app-production-xxxx.up.railway.app | |
| ``` | |
| Then redeploy. | |
| ### Step 4: Verify Deployment | |
| Check these endpoints: | |
| - `https://your-app.up.railway.app/` - Frontend UI | |
| - `https://your-app.up.railway.app/api/health` - API health check | |
| - `https://your-app.up.railway.app/api/docs` - API documentation | |
| ## Troubleshooting | |
| ### If Build Times Out | |
| Railway free tier has build time limits. Solutions: | |
| 1. Upgrade to Hobby plan ($5/month) | |
| 2. Use pre-built image: `FROM lfnovo/open_notebook:v1-latest-single` | |
| ### If App Crashes After Deploy | |
| 1. Check Railway logs for actual errors | |
| 2. Verify all environment variables are set | |
| 3. Wait 2-3 minutes - services need time to start | |
| ### If Frontend Can't Connect to API | |
| 1. Ensure `API_URL` is set to your Railway domain | |
| 2. Check that port 8080 is exposed (Railway auto-detects) | |
| 3. Verify `INTERNAL_API_URL=http://127.0.0.1:5055` | |
| ## Testing Locally | |
| Before pushing to Railway, test with Docker: | |
| ```powershell | |
| # Build Railway Dockerfile | |
| docker build -f Dockerfile.railway -t open-notebook-railway . | |
| # Run with Railway-like environment | |
| docker run -p 8080:8080 -p 5055:5055 ` | |
| -e PORT=8080 ` | |
| -e SURREAL_URL=ws://127.0.0.1:8000/rpc ` | |
| -e SURREAL_USER=root ` | |
| -e SURREAL_PASSWORD=root ` | |
| -e SURREAL_NAMESPACE=open_notebook ` | |
| -e SURREAL_DATABASE=production ` | |
| -e INTERNAL_API_URL=http://127.0.0.1:5055 ` | |
| -e API_URL=http://localhost:8080 ` | |
| -e OPENAI_API_KEY=your_key ` | |
| open-notebook-railway | |
| ``` | |
| Access at: http://localhost:8080 | |
| ## Next Steps | |
| 1. β **Commit and push** all changes to GitHub | |
| 2. β **Configure environment variables** in Railway | |
| 3. β **Deploy** from GitHub in Railway | |
| 4. β **Set API_URL** after getting your domain | |
| 5. β **Redeploy** to apply API_URL | |
| 6. β **Test** all functionality | |
| ## Additional Notes | |
| - **Database persistence**: Railway containers are ephemeral. For production, consider: | |
| - Using Railway Volumes for `/mydata` (database storage) | |
| - Exporting/importing data periodically | |
| - Using external database (more expensive) | |
| - **Costs**: Railway charges for: | |
| - CPU usage | |
| - Memory usage | |
| - Bandwidth | |
| - Start with Hobby plan ($5/mo) for testing | |
| - **Performance**: Single container runs 4 services, so: | |
| - May need 2GB+ RAM for smooth operation | |
| - Consider upgrading Railway plan if services crash | |
| ## Support Resources | |
| - π [RAILWAY.md](./RAILWAY.md) - Full Railway deployment guide | |
| - π¬ [Discord Community](https://discord.gg/37XJPXfz2w) | |
| - π [GitHub Issues](https://github.com/lfnovo/open-notebook/issues) | |
| --- | |
| **Important:** Your deployment logs show the app **IS WORKING**. The issues were warnings, not blocking errors. These fixes will make the deployment more robust and eliminate the warnings. | |