FROM python:3.11-slim-bullseye ENV DEBIAN_FRONTEND=noninteractive # 1. Install System Dependencies RUN apt-get update && apt-get install -y \ # --- VNC & Display Management --- xvfb \ x11vnc \ x11-utils \ x11-xserver-utils \ matchbox-window-manager \ # --- Input & Protocol Libs --- xdotool \ libxtst6 \ libxrandr2 \ # --- WebRTC / AIORTC Dependencies --- libavcodec-dev \ libavdevice-dev \ libavfilter-dev \ libavformat-dev \ libavutil-dev \ libswscale-dev \ libswresample-dev \ libvpx-dev \ libopus-dev \ libffi-dev \ libssl-dev \ # --- Browser Dependencies --- 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 \ # --- Utilities --- wget \ curl \ gnupg \ procps \ && rm -rf /var/lib/apt/lists/* # 2. Install Opera Browser 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/* # 3. Setup User # Note: x11vnc works best when run by the same user who owns the X session RUN useradd -m -u 1000 user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH WORKDIR $HOME/app # 4. Install Python Dependencies # Ensure requirements.txt contains: aiortc, aiohttp COPY --chown=user:user requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt # 5. Copy Application COPY --chown=user:user . . # 6. Create Directories RUN mkdir -p $HOME/opera-data # 7. Environment Config ENV DISPLAY=:99 \ RESOLUTION=1280x720 \ PYTHONUNBUFFERED=1 EXPOSE 7860 CMD ["python", "app.py"]