* 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
171 lines
No EOL
6 KiB
Text
171 lines
No EOL
6 KiB
Text
|
|
# API CONFIGURATION
|
|
# URL where the API can be accessed by the browser
|
|
# This setting allows the frontend to connect to the API at runtime (no rebuild needed!)
|
|
#
|
|
# IMPORTANT: Do NOT include /api at the end - it will be added automatically!
|
|
#
|
|
# Common scenarios:
|
|
# - Docker on localhost: http://localhost:5055 (default, works for most cases)
|
|
# - Docker on LAN/remote server: http://192.168.1.100:5055 or http://your-server-ip:5055
|
|
# - Behind reverse proxy with custom domain: https://your-domain.com
|
|
# - Behind reverse proxy with subdomain: https://api.your-domain.com
|
|
#
|
|
# Examples for reverse proxy users:
|
|
# - API_URL=https://notebook.example.com (frontend will call https://notebook.example.com/api/*)
|
|
# - API_URL=https://api.example.com (frontend will call https://api.example.com/api/*)
|
|
#
|
|
# Note: If not set, the system will auto-detect based on the incoming request.
|
|
# Only set this if you need to override the auto-detection (e.g., reverse proxy scenarios).
|
|
API_URL=http://localhost:5055
|
|
|
|
# INTERNAL API URL (Server-Side)
|
|
# URL where Next.js server-side should proxy API requests (via rewrites)
|
|
# This is DIFFERENT from API_URL which is used by the browser client
|
|
#
|
|
# INTERNAL_API_URL is used by Next.js rewrites to forward /api/* requests to the FastAPI backend
|
|
# API_URL is used by the browser to know where to make API calls
|
|
#
|
|
# Default: http://localhost:5055 (single-container deployment - both services on same host)
|
|
# Override for multi-container: INTERNAL_API_URL=http://api-service:5055
|
|
#
|
|
# Common scenarios:
|
|
# - Single container (default): Don't set - defaults to http://localhost:5055
|
|
# - Multi-container Docker Compose: INTERNAL_API_URL=http://api:5055 (use service name)
|
|
# - Kubernetes/advanced networking: INTERNAL_API_URL=http://api-service.namespace.svc.cluster.local:5055
|
|
#
|
|
# Why two variables?
|
|
# - API_URL: External/public URL that browsers use (can be https://your-domain.com)
|
|
# - INTERNAL_API_URL: Internal container networking URL (usually http://localhost:5055 or service name)
|
|
#
|
|
# INTERNAL_API_URL=http://localhost:5055
|
|
|
|
# API CLIENT TIMEOUT (in seconds)
|
|
# Controls how long the frontend/Streamlit UI waits for API responses
|
|
# Increase this if you're using slow AI providers or hardware (Ollama on CPU, remote LM Studio, etc.)
|
|
# Default: 300 seconds (5 minutes) - sufficient for most transformation/insight operations
|
|
#
|
|
# Common scenarios:
|
|
# - Fast cloud APIs (OpenAI, Anthropic): 300 seconds is more than enough
|
|
# - Local Ollama on GPU: 300 seconds should work fine
|
|
# - Local Ollama on CPU: Consider 600 seconds (10 minutes) or more
|
|
# - Remote LM Studio over slow network: Consider 900 seconds (15 minutes)
|
|
# - Very large documents: May need 900+ seconds
|
|
#
|
|
# API_CLIENT_TIMEOUT=300
|
|
|
|
# ESPERANTO LLM TIMEOUT (in seconds)
|
|
# Controls the timeout for AI model API calls at the Esperanto library level
|
|
# This is separate from API_CLIENT_TIMEOUT and applies to the actual LLM provider requests
|
|
# Only increase this if you're experiencing timeouts during model inference itself
|
|
# Default: 60 seconds (built into Esperanto)
|
|
#
|
|
# Important: This should generally be LOWER than API_CLIENT_TIMEOUT to allow proper error handling
|
|
#
|
|
# Common scenarios:
|
|
# - Fast cloud APIs (OpenAI, Anthropic, Groq): 60 seconds is sufficient
|
|
# - Local Ollama with small models: 120-180 seconds may help
|
|
# - Local Ollama with large models on CPU: 300+ seconds
|
|
# - Remote or self-hosted LLMs: 180-300 seconds depending on hardware
|
|
#
|
|
# Note: If transformations complete but you see timeout errors, increase API_CLIENT_TIMEOUT first.
|
|
# Only increase ESPERANTO_LLM_TIMEOUT if the model itself is timing out during inference.
|
|
#
|
|
# ESPERANTO_LLM_TIMEOUT=60
|
|
|
|
# SECURITY
|
|
# Set this to protect your Open Notebook instance with a password (for public hosting)
|
|
# OPEN_NOTEBOOK_PASSWORD=
|
|
|
|
# OPENAI
|
|
# OPENAI_API_KEY=
|
|
|
|
|
|
# ANTHROPIC
|
|
# ANTHROPIC_API_KEY=
|
|
|
|
# GEMINI
|
|
# this is the best model for long context and podcast generation
|
|
# GOOGLE_API_KEY=
|
|
# GEMINI_API_BASE_URL= # Optional: Override default endpoint (for Vertex AI, proxies, etc.)
|
|
|
|
# VERTEXAI
|
|
# VERTEX_PROJECT=my-google-cloud-project-name
|
|
# GOOGLE_APPLICATION_CREDENTIALS=./google-credentials.json
|
|
# VERTEX_LOCATION=us-east5
|
|
|
|
# MISTRAL
|
|
# MISTRAL_API_KEY=
|
|
|
|
# DEEPSEEK
|
|
# DEEPSEEK_API_KEY=
|
|
|
|
# OLLAMA
|
|
# OLLAMA_API_BASE="http://10.20.30.20:11434"
|
|
|
|
# OPEN ROUTER
|
|
# OPENROUTER_BASE_URL="https://openrouter.ai/api/v1"
|
|
# OPENROUTER_API_KEY=
|
|
|
|
# GROQ
|
|
# GROQ_API_KEY=
|
|
|
|
# XAI
|
|
# XAI_API_KEY=
|
|
|
|
# ELEVENLABS
|
|
# Used only by the podcast feature
|
|
# ELEVENLABS_API_KEY=
|
|
|
|
# TTS BATCH SIZE
|
|
# Controls concurrent TTS requests for podcast generation (default: 5)
|
|
# Lower values reduce provider load but increase generation time
|
|
# Recommended: OpenAI=5, ElevenLabs=2, Google=4, Custom=1
|
|
# TTS_BATCH_SIZE=2
|
|
|
|
# VOYAGE AI
|
|
# VOYAGE_API_KEY=
|
|
|
|
# OPENAI COMPATIBLE ENDPOINTS
|
|
# Generic configuration (applies to all modalities: language, embedding, STT, TTS)
|
|
# OPENAI_COMPATIBLE_BASE_URL=http://localhost:1234/v1
|
|
# OPENAI_COMPATIBLE_API_KEY=
|
|
|
|
# Mode-specific configuration (overrides generic if set)
|
|
# Use these when you want different endpoints for different capabilities
|
|
# OPENAI_COMPATIBLE_BASE_URL_LLM=http://localhost:1234/v1
|
|
# OPENAI_COMPATIBLE_API_KEY_LLM=
|
|
# OPENAI_COMPATIBLE_BASE_URL_EMBEDDING=http://localhost:8080/v1
|
|
# OPENAI_COMPATIBLE_API_KEY_EMBEDDING=
|
|
# OPENAI_COMPATIBLE_BASE_URL_STT=http://localhost:9000/v1
|
|
# OPENAI_COMPATIBLE_API_KEY_STT=
|
|
# OPENAI_COMPATIBLE_BASE_URL_TTS=http://localhost:9000/v1
|
|
# OPENAI_COMPATIBLE_API_KEY_TTS=
|
|
|
|
# AZURE OPENAI
|
|
# AZURE_OPENAI_API_KEY=
|
|
# AZURE_OPENAI_ENDPOINT=
|
|
# AZURE_OPENAI_API_VERSION="2024-12-01-preview"
|
|
# AZURE_OPENAI_DEPLOYMENT_NAME=
|
|
|
|
# USE THIS IF YOU WANT TO DEBUG THE APP ON LANGSMITH
|
|
# LANGCHAIN_TRACING_V2=true
|
|
# LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
|
|
# LANGCHAIN_API_KEY=
|
|
# LANGCHAIN_PROJECT="Open Notebook"
|
|
|
|
# CONNECTION DETAILS FOR YOUR SURREAL DB
|
|
# New format (preferred) - WebSocket URL
|
|
SURREAL_URL="ws://surrealdb/rpc:8000"
|
|
SURREAL_USER="root"
|
|
SURREAL_PASSWORD="root"
|
|
SURREAL_NAMESPACE="open_notebook"
|
|
SURREAL_DATABASE="staging"
|
|
|
|
# OPEN_NOTEBOOK_PASSWORD=
|
|
|
|
# FIRECRAWL - Get a key at https://firecrawl.dev/
|
|
FIRECRAWL_API_KEY=
|
|
|
|
# JINA - Get a key at https://jina.ai/
|
|
JINA_API_KEY= |