FROM python:3.11-slim-bullseye ENV DEBIAN_FRONTEND=noninteractive # 1. Install System Dependencies RUN apt-get update && apt-get install -y \ # --- TigerVNC Server --- tigervnc-standalone-server \ tigervnc-tools \ # --- Display & Input Libs --- x11-utils \ x11-xserver-utils \ matchbox-window-manager \ libxtst6 \ libxrandr2 \ # --- WebRTC Dependencies --- libavcodec-dev \ libavdevice-dev \ libavfilter-dev \ libavformat-dev \ libavutil-dev \ libswscale-dev \ libswresample-dev \ libvpx-dev \ libopus-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 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 COPY --chown=user:user requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 5. Copy Application COPY --chown=user:user . . # 6. Create Directories & Setup VNC Password-less RUN mkdir -p $HOME/opera-data && \ mkdir -p $HOME/.vnc # 7. Environment Config ENV DISPLAY=:99 \ PYTHONUNBUFFERED=1 EXPOSE 7860 CMD ["python", "app.py"]