* feat: simplify reverse proxy configuration with Next.js rewrites Add Next.js API rewrites to proxy /api/* requests internally from port 8502 to the FastAPI backend on port 5055. This eliminates the need for complex reverse proxy configurations with multiple upstreams and location blocks. Changes: - Add rewrites to next.config.ts proxying /api/* to INTERNAL_API_URL - Introduce INTERNAL_API_URL env var (defaults to http://localhost:5055) - Update supervisord configs to pass INTERNAL_API_URL to Next.js - Document INTERNAL_API_URL in .env.example with usage examples - Add simplified reverse proxy examples for nginx, Traefik, Caddy, Coolify - Update README architecture diagram to show internal proxying - Add explanatory comments to _config route handler Benefits: - Reduces reverse proxy config from 12 lines to 3 (75% reduction) - Single-port deployment (8502 only) for 95% of use cases - Zero breaking changes - backward compatible with existing setups - Zero performance overhead (validated through testing) - Preserves proxy headers (X-Forwarded-*) for rate limiting/SSL Resolves: #179 Related: OSS-321 * fix: rename _config to config to fix production routing CRITICAL BUG FIX: The /_config endpoint has never worked in production builds because Next.js treats folders starting with underscore as "private folders" and excludes them from routing entirely. This endpoint is critical for: - Providing API_URL to the browser at runtime - Enabling zero-config deployments with auto-detection - Supporting reverse proxy scenarios where API URL differs from frontend URL Changes: - Rename frontend/src/app/_config/ → frontend/src/app/config/ - Update client code references (/_config → /config) - Update documentation with correct endpoint path - Bump version to 1.1.0 (minor version for new rewrites feature + bug fix) Impact: - Runtime configuration now works in production builds - /config returns {"apiUrl":"http://localhost:5055"} correctly - Auto-detection for reverse proxy deployments now functional Related: #179, OSS-321 * fix: resolve React hook exhaustive-deps warning in AddExistingSourceDialog Wrap performSearch function in useCallback to properly memoize it and satisfy React Hook exhaustive-deps rule. This prevents unnecessary re-renders and ensures the useEffect dependency array is correctly specified. Changes: - Import useCallback from React - Wrap performSearch with useCallback([debouncedSearchQuery, allSources]) - Add performSearch to useEffect dependency array * final fixes
27 lines
946 B
TypeScript
27 lines
946 B
TypeScript
import type { NextConfig } from "next";
|
|
|
|
const nextConfig: NextConfig = {
|
|
// Enable standalone output for optimized Docker deployment
|
|
output: "standalone",
|
|
|
|
// API Rewrites: Proxy /api/* requests to FastAPI backend
|
|
// This simplifies reverse proxy configuration - users only need to proxy to port 8502
|
|
// Next.js handles internal routing to the API backend on port 5055
|
|
async rewrites() {
|
|
// INTERNAL_API_URL: Where Next.js server-side should proxy API requests
|
|
// Default: http://localhost:5055 (single-container deployment)
|
|
// Override for multi-container: INTERNAL_API_URL=http://api-service:5055
|
|
const internalApiUrl = process.env.INTERNAL_API_URL || 'http://localhost:5055'
|
|
|
|
console.log(`[Next.js Rewrites] Proxying /api/* to ${internalApiUrl}/api/*`)
|
|
|
|
return [
|
|
{
|
|
source: '/api/:path*',
|
|
destination: `${internalApiUrl}/api/:path*`,
|
|
},
|
|
]
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|