# Servidor SERVER_HOST=127.0.0.1 SERVER_PORT=8080 FRONTEND_ORIGIN=http://localhost:5173 DATABASE_URL=postgres://leads:leads@127.0.0.1:5432/leads_extractor MEDIA_DIR=../data/media RUST_LOG=backend=info # Autenticação. Defina uma senha forte no backend/.env local. AUTH_USERNAME= AUTH_PASSWORD= AUTH_SESSION_TTL_SECS=43200 AUTH_COOKIE_SECURE=false AUTH_COOKIE_SAME_SITE=strict # Rate limiting (proteção contra abuso/DoS/força bruta), aplicado por IP. # Limite geral: rajada de RATE_LIMIT_BURST_SIZE requisições, repondo 1 a cada # RATE_LIMIT_PERIOD_MS. Padrão: rajada de 120, repõe 1 a cada 200ms (~5 req/s # sustentado por IP). RATE_LIMIT_ENABLED=true RATE_LIMIT_BURST_SIZE=120 RATE_LIMIT_PERIOD_MS=200 # Limite adicional e mais restrito, aplicado somente a /api/auth/login, para # dificultar força bruta de credenciais. Padrão: rajada de 5, repõe 1 a cada 30s. RATE_LIMIT_LOGIN_BURST_SIZE=5 RATE_LIMIT_LOGIN_PERIOD_SECS=30 # OpenAI OPENAI_API_KEY= OPENAI_MODEL=gpt-5.6-luna OPENAI_BASE_URL=https://api.openai.com/v1 OPENAI_TIMEOUT_SECS=120 OPENAI_MAX_RETRIES=6 # Custo em dólares por 1.000.000 de tokens (consulte a tabela de preços do modelo). OPENAI_INPUT_COST_PER_1M_USD=0.15 OPENAI_OUTPUT_COST_PER_1M_USD=0.60 # Teto de gasto mensal em dólares. Ao ser atingido, novas execuções são # bloqueadas e execuções em andamento são canceladas automaticamente. OPENAI_MONTHLY_BUDGET_USD=50.00 # DataImpulse. Nunca comite valores reais. DATAIMPULSE_PROXY_ENABLED=true DATAIMPULSE_PROXY_SCHEME=http DATAIMPULSE_PROXY_HOST=gw.dataimpulse.com DATAIMPULSE_PROXY_PORT=823 DATAIMPULSE_PROXY_USERNAME= DATAIMPULSE_PROXY_PASSWORD= DATAIMPULSE_PROXY_COUNTRY=br # O gateway sempre opera com IP rotativo; sessão fixa não é suportada. # Concorrência, retry e limites de segurança operacional WORKER_CONCURRENCY=8 BROWSER_CONCURRENCY=4 JOB_POLL_INTERVAL_MS=750 REQUEST_TIMEOUT_SECS=45 BROWSER_TIMEOUT_SECS=75 # Use true somente em container isolado que não ofereça user namespaces. BROWSER_NO_SANDBOX=false # Pacing do Chromium: cada sessão usa um perfil limpo, aquece a origem e # espera um intervalo aleatório. As macro-pausas evitam rajadas em crawls longos. BROWSER_MIN_NAVIGATION_DELAY_MS=2500 BROWSER_MAX_NAVIGATION_DELAY_MS=15000 BROWSER_MACRO_PAUSE_EVERY_MIN=15 BROWSER_MACRO_PAUSE_EVERY_MAX=20 BROWSER_MACRO_PAUSE_MIN_SECS=30 BROWSER_MACRO_PAUSE_MAX_SECS=90 CRAWL_MAX_DEPTH=5 CRAWL_MAX_PAGES_PER_INTERVIEWEE=250 # 0 processa todos; use 100 para uma execução externa controlada. MAX_INTERVIEWEES_PER_RUN=0