Files
Vault/VPS_UPLOAD_CONFIG.md
T
twotalesanimation 81ad7e4ea9 Initial commit
2026-06-11 10:46:09 +02:00

92 lines
3.0 KiB
Markdown

# VPS Upload Timeout Fix
## Problem
Uploads timing out after moving to VPS + npm environment.
## Root Causes
1. Prisma connection pool timeout too short for network latency
2. FFprobe duration extraction timing out on slow disk I/O
3. Missing socket/request timeout configuration
4. Database connection pool exhaustion
## Solutions Applied
### 1. Prisma Client Configuration
Updated `lib/prisma.ts` with:
- Connection timeout handling for slow VPS networks
- Proper pool configuration support
- Removed 'info' logging (reduces noise in production)
### 2. FFprobe Timeout Protection
Updated `app/api/admin/upload/route.ts`:
- Added 15-second timeout for FFprobe duration extraction
- Falls back gracefully if FFprobe takes too long
- Prevents blocking the entire upload handler
### 3. Next.js Server Configuration
Updated `next.config.ts`:
- Added socket timeout configuration (45 seconds default)
- VPS-aware settings for slow network environments
## Required Environment Variables
Add these to your `.env.local` (or VPS environment):
```
# Database connection with proper pool settings for VPS
# Adjust pool_max based on your VPS CPU cores
DATABASE_URL="postgresql://user:password@host:5432/dbname?schema=public&pool_max=5&socket_timeout=45000&connect_timeout=10000"
# Optional: Override default socket timeout (in milliseconds)
DATABASE_SOCKET_TIMEOUT=45000
# Optional: For testing, you can increase the API timeout
# This is already set to 300s in the route, but ensure your nginx/proxy respects it
```
## PostgreSQL Connection String Parameters
If using PostgreSQL, ensure your `DATABASE_URL` includes:
- `pool_max=5` — Limit connections (adjust to CPU cores)
- `socket_timeout=45000` — Socket timeout in ms
- `connect_timeout=10000` — Connection establishment timeout in ms
Example PostgreSQL URL:
```
postgresql://user:password@vps-host:5432/dbname?schema=public&pool_max=5&socket_timeout=45000&connect_timeout=10000
```
## Next.js Server Configuration
If running with a proxy (nginx/Apache), ensure:
```nginx
# nginx example
location /api/admin/upload {
proxy_pass http://next-server;
proxy_connect_timeout 60s;
proxy_send_timeout 300s; # 5 minutes for large uploads
proxy_read_timeout 300s; # 5 minutes for large uploads
client_max_body_size 1024M; # Adjust based on your max video size
}
```
## Testing
After applying these changes:
1. Restart your Node.js server
2. Test with a medium-sized video (100MB+)
3. Check logs: `pm2 logs` or your logging system
4. Monitor database connections: `SELECT count(*) FROM pg_stat_activity;` in psql
## Additional Tuning
### If still timing out:
1. **Check disk I/O**: `iostat -x 1` on VPS
2. **Monitor database**: Check if queries are slow
3. **Increase FFprobe timeout**: Edit line in `app/api/admin/upload/route.ts` (currently 15000ms)
4. **Vertical scaling**: Increase VPS CPU for FFprobe processing
### For very large files (>500MB):
- Consider streaming directly to cloud storage (S3, etc.)
- Implement chunked uploads
- Use a separate transcoding queue service