Phase 0.5 — revise #884's in-backend camoufox into a dedicated browser service. camoufox.server.launch_server exposes a Playwright WS endpoint (fingerprint/geoip/ proxy configured server-side); the backend connects remotely via playwright, so it no longer ships Firefox. - NEW tradein-mvp/browser/{server.py,Dockerfile}: camoufox WS server on :3000; Firefox fetch under app-user + ENV HOME (carries the #899 cache-path fix) - BrowserFetcher rewritten launch-in-process → playwright.firefox.connect(ws_endpoint); recycle (close+reconnect every N) + crash-recovery (TargetClosed → reconnect + 1 retry) - backend Dockerfile slimmed: drop 5 Firefox libs + camoufox fetch layer - pyproject: remove camoufox[geoip] from backend, promote playwright to main deps - docker-compose.prod.yml: add browser service (mem_limit 2.5g moves here), remove mem_limit from backend, backend depends_on browser (service_started) - config: browser_ws_endpoint default ws://tradein-browser:3000/playwright - tests/scrapers/test_browser_fetcher.py rewritten for connect-mode (6 pass) Dormant: scraper_fetch_mode stays curl_cffi → no prod behavior change. launch_server signature verified (**kwargs→launch_options, port passes through). Refs #905, #883, #884, #899
39 lines
1.3 KiB
Docker
39 lines
1.3 KiB
Docker
# tradein-browser — camoufox Playwright WS server (изолированный контейнер Firefox).
|
|
# Backend подключается к этому контейнеру через playwright.firefox.connect.
|
|
|
|
FROM python:3.12-slim
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1
|
|
|
|
# Firefox runtime libs + ca-certificates для TLS
|
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|
--mount=type=cache,target=/var/lib/apt,sharing=locked \
|
|
apt-get update && apt-get install -y --no-install-recommends \
|
|
libgtk-3-0 \
|
|
libasound2 \
|
|
libdbus-glib-1-2 \
|
|
libx11-xcb1 \
|
|
libxtst6 \
|
|
ca-certificates \
|
|
&& useradd --create-home --uid 1000 app
|
|
|
|
WORKDIR /app
|
|
|
|
# camoufox[geoip] тянет playwright как зависимость
|
|
RUN pip install --no-cache-dir "camoufox[geoip]"
|
|
|
|
COPY server.py ./server.py
|
|
|
|
# CRITICAL (#899): USER + ENV HOME должны быть установлены ДО fetch,
|
|
# чтобы Firefox-сборка легла в /home/app/.cache — туда же, куда рантайм её ищет.
|
|
# Без этого fetch под root кладёт браузер в /root/.cache и app при старте
|
|
# не находит Firefox ("browser not found").
|
|
USER app
|
|
ENV HOME=/home/app
|
|
|
|
RUN python -m camoufox fetch
|
|
|
|
EXPOSE 3000
|
|
|
|
CMD ["python", "server.py"]
|