# Dockerfile (run non-headless Chrome via Xvfb) FROM python:3.12-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PORT=7860 \ ZD_HEADLESS=false \ NO_INITIAL_FETCH=false WORKDIR /app # Install system deps including Xvfb and Chromium RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ curl \ wget \ unzip \ xvfb \ dbus-x11 \ x11-utils \ fonts-liberation \ libnss3 \ libxss1 \ libasound2 \ libatk1.0-0 \ libcups2 \ libx11-xcb1 \ libxcomposite1 \ libxdamage1 \ libxrandr2 \ libgbm1 \ libgtk-3-0 \ libxshmfence1 \ procps \ build-essential \ && rm -rf /var/lib/apt/lists/* # Install Chromium (Debian package). If that fails on some base images, # adjust package name to chromium-browser. RUN apt-get update && apt-get install -y --no-install-recommends chromium \ || true && rm -rf /var/lib/apt/lists/* ENV CHROME_BIN=/usr/bin/chromium # python deps COPY requirements.txt /app/requirements.txt RUN python -m pip install --upgrade pip setuptools wheel \ && pip --no-cache-dir install -r /app/requirements.txt # app files COPY . /app # start script COPY start.sh /app/start.sh RUN chmod +x /app/start.sh EXPOSE ${PORT} CMD ["sh", "-c", "/app/start.sh"]