FROM python:3.11-slim-bullseye ENV DEBIAN_FRONTEND=noninteractive # 1. Install Build Tools and Dependencies RUN apt-get update && apt-get install -y \ build-essential \ git \ libvncserver-dev \ libx11-dev \ xvfb \ matchbox-window-manager \ # Browser & WebRTC dependencies libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev \ libavutil-dev libswscale-dev libswresample-dev libvpx-dev \ libopus-dev libssl-dev libxcomposite1 libxcursor1 libxdamage1 \ libxi6 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \ libgbm1 libasound2 libpangocairo-1.0-0 libgtk-3-0 \ fonts-liberation fonts-noto-color-emoji \ wget curl gnupg procps \ && rm -rf /var/lib/apt/lists/* # 2. Build the Custom VNC Tool COPY minivnc.c /tmp/minivnc.c RUN gcc -o /usr/local/bin/minivnc /tmp/minivnc.c -lrfb -lX11 # 3. Install Opera RUN curl -fsSL https://deb.opera.com/archive.key | gpg --dearmor -o /usr/share/keyrings/opera-browser-keyring.gpg && \ echo "deb [signed-by=/usr/share/keyrings/opera-browser-keyring.gpg] https://deb.opera.com/opera-stable/ stable non-free" \ | tee /etc/apt/sources.list.d/opera-stable.list && \ apt-get update && \ apt-get install -y opera-stable && \ rm -rf /var/lib/apt/lists/* # 4. Setup User RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH WORKDIR $HOME/app COPY --chown=user:user requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY --chown=user:user app.py . RUN mkdir -p $HOME/opera-data ENV DISPLAY=:99 EXPOSE 7860 CMD ["python", "app.py"]