/ computer.Dockerfile
computer.Dockerfile
1 FROM ubuntu:24.04 2 ENV DEBIAN_FRONTEND=noninteractive 3 4 # Install System Dependencies 5 RUN apt update \ 6 && apt install -y \ 7 ca-certificates \ 8 gnupg \ 9 xfce4 \ 10 xfce4-goodies \ 11 x11vnc \ 12 xvfb \ 13 xdotool \ 14 imagemagick \ 15 x11-apps \ 16 dbus-x11 \ 17 sudo \ 18 python3-pip \ 19 python3-tk \ 20 python3-dev \ 21 build-essential \ 22 scrot \ 23 gnome-screenshot \ 24 net-tools \ 25 libx11-dev \ 26 libxext-dev \ 27 libxtst-dev \ 28 libxinerama-dev \ 29 libxmu-dev \ 30 libxrandr-dev \ 31 libxfixes-dev \ 32 software-properties-common \ 33 && add-apt-repository ppa:mozillateam/ppa && apt update \ 34 && apt install -y --no-install-recommends \ 35 # Desktop apps 36 firefox-esr \ 37 libreoffice \ 38 x11-apps \ 39 xpdf \ 40 gedit \ 41 xpaint \ 42 tint2 \ 43 galculator \ 44 pcmanfm \ 45 unzip \ 46 # Terminal apps like file editors, viewers, git, wget/curl etc. 47 less \ 48 nano \ 49 neovim \ 50 vim \ 51 git \ 52 curl \ 53 wget \ 54 procps \ 55 # Python/pyenv dependencies 56 libssl-dev \ 57 zlib1g-dev \ 58 libbz2-dev \ 59 libreadline-dev \ 60 libsqlite3-dev \ 61 libncursesw5-dev \ 62 xz-utils \ 63 tk-dev \ 64 libxml2-dev \ 65 libxmlsec1-dev \ 66 libffi-dev \ 67 liblzma-dev \ 68 # set default browser 69 && update-alternatives --set x-www-browser /usr/bin/firefox-esr \ 70 && apt-get clean && rm -rf /var/lib/apt/lists/* \ 71 # remove screen locks, power managers 72 && apt remove -y light-locker xfce4-screensaver xfce4-power-manager || true 73 74 # Create Computer User 75 ENV USERNAME=khoj 76 ENV HOME=/home/$USERNAME 77 RUN groupadd $USERNAME && \ 78 useradd -m -s /bin/bash -d $HOME -g $USERNAME $USERNAME && \ 79 echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 80 USER $USERNAME 81 WORKDIR $HOME 82 83 # Install Python using uv and create a virtual environment 84 COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ 85 ENV PYTHON_VERSION=3.11.6 86 RUN uv python pin $PYTHON_VERSION 87 RUN uv venv $HOME/.venv --python $PYTHON_VERSION --seed 88 RUN echo 'export PATH="$HOME/.venv/bin:$PATH"' >> "$HOME/.bashrc" 89 ENV PATH="$HOME/.venv/bin:$PATH" 90 91 # Install Python Packages 92 RUN uv pip install --no-cache-dir \ 93 pyautogui \ 94 Pillow \ 95 pyperclip \ 96 pygetwindow 97 98 # Setup VNC 99 RUN x11vnc -storepasswd secret /home/khoj/.vncpass 100 101 ARG WIDTH=1024 102 ARG HEIGHT=768 103 ARG DISPLAY_NUM=99 104 ENV WIDTH=$WIDTH 105 ENV HEIGHT=$HEIGHT 106 ENV DISPLAY_NUM=$DISPLAY_NUM 107 ENV DISPLAY=":$DISPLAY_NUM" 108 109 # Expose VNC on port 5900 110 EXPOSE 5900 111 112 # Start Virtual Display (Xvfb), Desktop Manager (XFCE) and Remote Viewer (X11 VNC) 113 CMD ["/bin/sh", "-c", " \ 114 # Create and permission XDG_RUNTIME_DIR with sudo \n\ 115 export XDG_RUNTIME_DIR=/run/user/$(id -u); \ 116 sudo mkdir -p $XDG_RUNTIME_DIR && \ 117 sudo chown $(id -u):$(id -g) $XDG_RUNTIME_DIR && \ 118 sudo chmod 0700 $XDG_RUNTIME_DIR; \ 119 \ 120 # Start Virtual Display \n\ 121 Xvfb $DISPLAY -screen 0 ${WIDTH}x${HEIGHT}x24 -dpi 96 -auth /home/$USERNAME/.Xauthority >/dev/null 2>&1 & \ 122 sleep 1; \ 123 xauth add $DISPLAY . $(mcookie); \ 124 \ 125 # Start VNC Server \n\ 126 x11vnc -display $DISPLAY -forever -rfbauth /home/$USERNAME/.vncpass -listen 0.0.0.0 -rfbport 5900 >/dev/null 2>&1 & \ 127 eval $(dbus-launch --sh-syntax) && \ 128 startxfce4 & \ 129 sleep 2 && echo 'Container running!' && \ 130 tail -f /dev/null "]