-
Notifications
You must be signed in to change notification settings - Fork 44
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
90 lines (88 loc) · 3.94 KB
/
Copy pathdocker-compose.yml
File metadata and controls
90 lines (88 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
services:
redis:
image: redis:8.8.1-alpine
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 2s
timeout: 1s
retries: 10
start_period: 2s
trawl:
image: ghcr.io/germondai/trawl:latest
ports:
# API + FlareSolverr-compatible /v1
- "${PORT:-8191}:8191"
# MITM forward proxy (:8192) — only used when MITM_ENABLED=true.
# The CA cert is served from :8191/proxy-ca.crt and must be installed
# in each client's trust store (system keychain, Java cacerts, etc.).
- "${MITM_PORT:-8192}:${MITM_PORT:-8192}"
shm_size: 1gb
environment:
REDIS_URL: redis://redis:6379
REDIS_SESSION_TTL_SECONDS: ${REDIS_SESSION_TTL_SECONDS:-3600}
REDIS_CONNECT_TIMEOUT_MS: ${REDIS_CONNECT_TIMEOUT_MS:-5000}
REDIS_RETRY_DELAY_MS: ${REDIS_RETRY_DELAY_MS:-5000}
BROWSER_POOL_SIZE: ${BROWSER_POOL_SIZE:-1}
BROWSER_MAX_CONTENT_PROCESSES: ${BROWSER_MAX_CONTENT_PROCESSES:-2}
BROWSER_HEADFUL_POOL_SIZE: ${BROWSER_HEADFUL_POOL_SIZE:-0}
BROWSER_ACQUIRE_TIMEOUT_MS: ${BROWSER_ACQUIRE_TIMEOUT_MS:-15000}
BROWSER_RECYCLE_AFTER_CONTEXTS: ${BROWSER_RECYCLE_AFTER_CONTEXTS:-8}
BROWSER_STALL_TIMEOUT_MS: ${BROWSER_STALL_TIMEOUT_MS:-180000}
BROWSER_CLOSE_TIMEOUT_MS: ${BROWSER_CLOSE_TIMEOUT_MS:-10000}
BROWSER_LAUNCH_TIMEOUT_MS: ${BROWSER_LAUNCH_TIMEOUT_MS:-90000}
SCREENSHOT_SETTLE_MS: ${SCREENSHOT_SETTLE_MS:-3000}
SCREENSHOT_TIMEOUT_MS: ${SCREENSHOT_TIMEOUT_MS:-10000}
SCREENSHOT_JPEG_QUALITY: ${SCREENSHOT_JPEG_QUALITY:-60}
SCREENSHOT_MAX_BYTES: ${SCREENSHOT_MAX_BYTES:-4000000}
DIAGNOSTICS_MAX_CONSOLE_ENTRIES: ${DIAGNOSTICS_MAX_CONSOLE_ENTRIES:-500}
DIAGNOSTICS_MAX_NETWORK_ENTRIES: ${DIAGNOSTICS_MAX_NETWORK_ENTRIES:-1000}
DIAGNOSTICS_MAX_STRING_CHARS: ${DIAGNOSTICS_MAX_STRING_CHARS:-2000}
DIAGNOSTICS_MAX_TOTAL_CHARS: ${DIAGNOSTICS_MAX_TOTAL_CHARS:-1000000}
DIAGNOSTICS_SIZE_TIMEOUT_MS: ${DIAGNOSTICS_SIZE_TIMEOUT_MS:-2000}
REDIRECT_MAX_ENTRIES: ${REDIRECT_MAX_ENTRIES:-50}
REDIRECT_MAX_URL_CHARS: ${REDIRECT_MAX_URL_CHARS:-2000}
REDIRECT_MAX_TOTAL_CHARS: ${REDIRECT_MAX_TOTAL_CHARS:-1000000}
CAPTURE_MAX_PATTERNS: ${CAPTURE_MAX_PATTERNS:-10}
CAPTURE_MAX_RESPONSES: ${CAPTURE_MAX_RESPONSES:-5}
CAPTURE_MAX_BODY_BYTES: ${CAPTURE_MAX_BODY_BYTES:-5242880}
CAPTURE_MAX_TOTAL_BYTES: ${CAPTURE_MAX_TOTAL_BYTES:-10485760}
CAPTURE_MAX_READ_BYTES: ${CAPTURE_MAX_READ_BYTES:-10485760}
CAPTURE_MAX_METADATA_CHARS: ${CAPTURE_MAX_METADATA_CHARS:-2000}
CAPTURE_BODY_TIMEOUT_MS: ${CAPTURE_BODY_TIMEOUT_MS:-5000}
CAPTURE_SETTLE_MS: ${CAPTURE_SETTLE_MS:-15000}
CAPTURE_MAX_SETTLE_MS: ${CAPTURE_MAX_SETTLE_MS:-60000}
CAPTURE_IDLE_FLOOR_MS: ${CAPTURE_IDLE_FLOOR_MS:-5000}
STT_URL: ${STT_URL:-}
STT_API_KEY: ${STT_API_KEY:-}
FFMPEG_PATH: ${FFMPEG_PATH:-}
MCP_ENABLED: ${MCP_ENABLED:-false}
MCP_ALLOWED_ORIGINS: ${MCP_ALLOWED_ORIGINS:-}
PROXY_URL: ${PROXY_URL:-}
PROXY_LIST_FILE: ${PROXY_LIST_FILE:-}
RESIDENTIAL_PROXY_URL: ${RESIDENTIAL_PROXY_URL:-}
RESIDENTIAL_PROXY_LIST_FILE: ${RESIDENTIAL_PROXY_LIST_FILE:-}
# MITM proxy (off by default — opt in via .env)
MITM_ENABLED: ${MITM_ENABLED:-false}
MITM_HOST: ${MITM_HOST:-0.0.0.0}
MITM_PORT: ${MITM_PORT:-8192}
MITM_CA_DIR: ${MITM_CA_DIR:-/data/proxy-ca}
MITM_MAX_TIER: ${MITM_MAX_TIER:-4}
MITM_ALWAYS_SCRAPE: ${MITM_ALWAYS_SCRAPE:-false}
MITM_DEBUG: ${MITM_DEBUG:-false}
volumes:
# Persist the proxy's CA so clients don't need to re-install on every restart.
- trawl_proxy_ca:${MITM_CA_DIR:-/data/proxy-ca}
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8191/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 90s
volumes:
redis_data:
trawl_proxy_ca: