first commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user