services: backend: build: context: ./backend_py restart: unless-stopped ports: - "4000:4000" deploy: resources: limits: cpus: "2" memory: 1000M reservations: memory: 200M environment: TZ: Europe/Lisbon # Controlo de CPU OMP_NUM_THREADS: "1" MKL_NUM_THREADS: "1" OPENBLAS_NUM_THREADS: "1" # Servidor e Sistema BACKEND_PORT: 4000 DATA_PATH: /data ALLOWED_ORIGINS: "*" # Segurança (Chaves de API) # Chaves separadas por vírgula, exemplo: fk_vf_...,sk_vf_... API_KEYS: "fk_vf_a1b2c3d4e5f60718293a4b5c6d7e8f90,sk_vf_a1b2c3d4e5f60718293a4b5c6d7e8f90" # Valores de fallback (Usados caso o pedido não envie opções) MAX_PAGES: 50 MAX_DEPTH: 3 PAGE_TIMEOUT_MS: 30000 CRAWLER_CONCURRENCY: 4 BROWSER_CONCURRENCY: 3 # Filtros e Limites MIN_IMAGE_WIDTH: 120 MIN_IMAGE_HEIGHT: 80 MIN_IMAGE_AREA: 9600 TABLE_MIN_CONFIDENCE: 0.5 YOLO_IMGSZ: 1024 ANALYSIS_CONCURRENCY: 2 IMAGE_HTTP_RETRIES: 2 # Fila e Gestão de Memória MAX_QUEUE_SIZE: 0 # 0 = sem limite MAX_CONCURRENT_TASKS: 1 CLEANUP_RESULTS_AFTER_S: 300 RESULTS_FLUSH_INTERVAL: 100 # Otimizações do Browser BROWSER_SINGLE_PROCESS: false BROWSER_ARGS_EXTRA: "" volumes: - app_data:/data frontend: build: context: ./frontend args: NEXT_PUBLIC_API_URL: http://localhost:4000 NEXT_PUBLIC_API_KEY: fk_vf_a1b2c3d4e5f60718293a4b5c6d7e8f90 restart: unless-stopped ports: - "3001:3000" environment: NODE_ENV: production NEXT_PUBLIC_API_URL: http://localhost:4000 NEXT_PUBLIC_API_KEY: fk_vf_a1b2c3d4e5f60718293a4b5c6d7e8f90 depends_on: - backend volumes: app_data: