Files
crawle-snapp/Dockerfile
T
nfel e7410c1ac2 Use Playwright Noble as worker base, configure China apt mirror
- Worker stage: oci.reg.darano.ir//mcr.microsoft.com/playwright:v1.62.0-noble
  (Ubuntu 24.04 + Chromium + Python 3.12 + ffmpeg/xvfb pre-installed)
  No apt/pip/Python bootstrap needed — everything ships with the image.
  Only uv sync needed for project deps.

- Admin stage: stays on python:3.11-slim (no Chrome needed).
  Uses Debian mirror (mirrors.tuna.tsinghua.edu.cn) since deb.debian.org
  times out from our VPS location (Iran).

- No more apt-get install of chromium/pip/uv in the Dockerfile.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-08-04 22:00:56 +03:30

92 lines
3.0 KiB
Docker

# Usage:
# make build # Build all Docker images (admin + worker)
# docker compose up -d # Start all services
#
# - admin stage: python:3.11-slim (FastAPI only, no Chrome)
# - worker stage: Playwright Noble with Python + Chromium pre-installed
# from your local registry mirror.
# ── Build args ─────────────────────────────────────────────────────────────────
ARG BASE_IMAGE=python:3.11-slim
# ── Stage 1: dependency resolver ─────────────────────────────────────────────
FROM python:3.11-slim AS builder
RUN pip install --no-cache-dir uv==0.11.31
WORKDIR /app
COPY pyproject.toml uv.lock* ./
RUN uv sync --frozen --no-dev --no-install-project
# ── Stage 2a: admin runtime (python:3.11-slim, no Chrome needed) ──────────────
FROM ${BASE_IMAGE} AS admin
WORKDIR /app
ENV PATH="/app/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1
COPY . .
COPY --from=builder /app/.venv /app/.venv
RUN mkdir -p data logs recordings \
&& useradd -m -u 1001 seed \
&& chown -R seed:seed /app
USER seed
EXPOSE 8000
CMD ["python", "main.py", "admin"]
# ── Stage 2b: worker runtime (Playwright Noble + Python) ──────────────────────
# Base image: oci.reg.darano.ir//mcr.microsoft.com/playwright:v1.62.0-noble
# This image already ships:
# - Ubuntu 24.04 LTS (Noble Numbat)
# - Chromium + matching ChromeDriver
# - Python 3.12
# - ffmpeg, xvfb, and other browser utilities
# We only need to install our Python project dependencies.
FROM oci.reg.darano.ir//mcr.microsoft.com/playwright:v1.62.0-noble AS worker
# The Playwright image ships Python via /usr/bin/python3 but pip is not in PATH.
# Install uv to manage our project dependencies.
# The Playwright Noble image includes a minimal uv shim at /usr/local/bin/uv —
# if it's not present, bootstrap it via curl.
RUN which uv >/dev/null 2>&1 || \
(curl -LsSf https://astral.sh/uv/install.sh | \
UV_INSTALL_DIR=/usr/local sh 2>&1 >/dev/null)
ENV PATH="/app/.venv/bin:$PATH" \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
# Chromium is pre-installed at /usr/bin/chromium
CHROME_BINARY=/usr/bin/chromium \
CHROMEDRIVER_PATH=/usr/bin/chromedriver \
HEADLESS=true
WORKDIR /app
# Copy manifests first (stable cache layer)
COPY pyproject.toml uv.lock* ./
# Install project deps into a venv targeting this image's Python 3.12
RUN uv sync --frozen --no-dev --no-install-project
# Copy app code
COPY . .
# mkdir for volumes, user for security
RUN mkdir -p data logs recordings \
&& useradd -m -u 1001 seed 2>/dev/null || true \
&& chown -R seed:seed /app 2>/dev/null || true
USER seed
# CMD overridden in docker-compose.yml to use RQ worker
CMD ["rq", "worker", "--url", "redis://redis:6379/0", "batch"]