FROM python:3.14-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ tzdata \ xvfb \ xauth \ ca-certificates \ curl \ firefox-esr=140.8.0esr-1~deb13u1 \ fonts-noto \ fonts-noto-cjk \ fonts-dejavu \ fonts-liberation \ fonts-noto-color-emoji \ pulseaudio \ libgl1-mesa-dri \ libglu1-mesa \ zip && \ rm -rf /var/lib/apt/lists/* && \ fc-cache -fv # Install geckodriver ARG GECKO_VERSION=v0.36.0 RUN curl -fsSL "https://github.com/mozilla/geckodriver/releases/download/${GECKO_VERSION}/geckodriver-${GECKO_VERSION}-linux64.tar.gz" | \ tar -xzf - -C /usr/local/bin && chmod +x /usr/local/bin/geckodriver # Download uBlock Origin (latest) ARG UBLOCK_VERSION=1.69.0 RUN mkdir -p /extras/extensions && \ curl -fsSL -o /extras/extensions/ublock_origin.xpi \ "https://github.com/gorhill/uBlock/releases/download/${UBLOCK_VERSION}/uBlock0_${UBLOCK_VERSION}.firefox.signed.xpi" COPY pyproject.toml uv.lock . RUN pip install --no-cache-dir uv RUN uv sync --frozen --no-dev # Configure fontconfig for emoji support COPY extras/patch_firefox.py . RUN python3 ./patch_firefox.py # Build Dark Reader extension (Selenium cleanup) COPY extras/extension /tmp/extension RUN cd /tmp/extension && zip -r /extras/extensions/dark-reader.xpi . && rm -rf /tmp/extension ENV PYTHONUNBUFFERED=1 ENV PORT=80 ENV TARGET_SIZE=5 ENV POLL_INTERVAL=30 ENV DATA_DIR=/data ENV EXTRAS_DIR=/extras ENV EMAILS_FILE=/data/emails.txt ENV FIREFOX_BINARY=/usr/bin/firefox-esr ENV GECKODRIVER_PATH=/usr/local/bin/geckodriver VOLUME ["/data"] EXPOSE 80 HEALTHCHECK --start-period=60s --start-interval=2s CMD \ test "$(curl -fsS "http://127.0.0.1:$PORT/health")" = "ok" STOPSIGNAL SIGINT COPY src . COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh CMD ["/entrypoint.sh"]