mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-02 13:18:18 +00:00
Implement docker computer environment for operator
- Generalize building pyautogui into executable python code snippet. This should work across docker and local. And should be easier to extend to operate a remote computer over the network as well. - Create dockerfile for pyautogui operate-able containerized computer
This commit is contained in:
129
computer.Dockerfile
Normal file
129
computer.Dockerfile
Normal file
@@ -0,0 +1,129 @@
|
||||
FROM ubuntu:24.04
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install System Dependencies
|
||||
RUN apt update \
|
||||
&& apt install -y \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
xfce4 \
|
||||
xfce4-goodies \
|
||||
x11vnc \
|
||||
xvfb \
|
||||
xdotool \
|
||||
imagemagick \
|
||||
x11-apps \
|
||||
dbus-x11 \
|
||||
sudo \
|
||||
python3-pip \
|
||||
python3-tk \
|
||||
python3-dev \
|
||||
build-essential \
|
||||
scrot \
|
||||
gnome-screenshot \
|
||||
net-tools \
|
||||
libx11-dev \
|
||||
libxext-dev \
|
||||
libxtst-dev \
|
||||
libxinerama-dev \
|
||||
libxmu-dev \
|
||||
libxrandr-dev \
|
||||
libxfixes-dev \
|
||||
software-properties-common \
|
||||
&& add-apt-repository ppa:mozillateam/ppa && apt update \
|
||||
&& apt install -y --no-install-recommends \
|
||||
# Desktop apps
|
||||
firefox-esr \
|
||||
libreoffice \
|
||||
x11-apps \
|
||||
xpdf \
|
||||
gedit \
|
||||
xpaint \
|
||||
tint2 \
|
||||
galculator \
|
||||
pcmanfm \
|
||||
unzip \
|
||||
# Terminal apps like file editors, viewers, git, wget/curl etc.
|
||||
less \
|
||||
nano \
|
||||
neovim \
|
||||
vim \
|
||||
git \
|
||||
curl \
|
||||
wget \
|
||||
procps \
|
||||
# Python/pyenv dependencies
|
||||
libssl-dev \
|
||||
zlib1g-dev \
|
||||
libbz2-dev \
|
||||
libreadline-dev \
|
||||
libsqlite3-dev \
|
||||
libncursesw5-dev \
|
||||
xz-utils \
|
||||
tk-dev \
|
||||
libxml2-dev \
|
||||
libxmlsec1-dev \
|
||||
libffi-dev \
|
||||
liblzma-dev \
|
||||
# set default browser
|
||||
&& update-alternatives --set x-www-browser /usr/bin/firefox-esr \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
|
||||
# remove screen locks, power managers
|
||||
&& apt remove -y light-locker xfce4-screensaver xfce4-power-manager || true
|
||||
|
||||
# Create Computer User
|
||||
ENV USERNAME=operator
|
||||
ENV HOME=/home/$USERNAME
|
||||
RUN useradd -m -s /bin/bash -d $HOME -g $USERNAME $USERNAME && echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||
USER $USERNAME
|
||||
WORKDIR $HOME
|
||||
|
||||
# Setup Python
|
||||
RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv && \
|
||||
cd ~/.pyenv && src/configure && make -C src && cd .. && \
|
||||
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc && \
|
||||
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc && \
|
||||
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
|
||||
ENV PYENV_ROOT="$HOME/.pyenv"
|
||||
ENV PATH="$PYENV_ROOT/bin:$PATH"
|
||||
ENV PYENV_VERSION_MAJOR=3
|
||||
ENV PYENV_VERSION_MINOR=11
|
||||
ENV PYENV_VERSION_PATCH=6
|
||||
ENV PYENV_VERSION=$PYENV_VERSION_MAJOR.$PYENV_VERSION_MINOR.$PYENV_VERSION_PATCH
|
||||
RUN eval "$(pyenv init -)" && \
|
||||
pyenv install $PYENV_VERSION && \
|
||||
pyenv global $PYENV_VERSION && \
|
||||
pyenv rehash
|
||||
ENV PATH="$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH"
|
||||
|
||||
# Install Python Packages
|
||||
RUN python3 -m pip install --no-cache-dir \
|
||||
pyautogui \
|
||||
Pillow \
|
||||
pyperclip \
|
||||
pygetwindow
|
||||
|
||||
# Setup VNC
|
||||
RUN x11vnc -storepasswd secret /home/operator/.vncpass
|
||||
|
||||
ARG WIDTH=1024
|
||||
ARG HEIGHT=768
|
||||
ARG DISPLAY_NUM=99
|
||||
ENV WIDTH=$WIDTH
|
||||
ENV HEIGHT=$HEIGHT
|
||||
ENV DISPLAY_NUM=$DISPLAY_NUM
|
||||
ENV DISPLAY=":$DISPLAY_NUM"
|
||||
|
||||
# Expose VNC on port 5900
|
||||
# run Xvfb, x11vnc, Xfce (no login manager)
|
||||
EXPOSE 5900
|
||||
CMD ["/bin/sh", "-c", " export XDG_RUNTIME_DIR=/run/user/$(id -u); \
|
||||
mkdir -p $XDG_RUNTIME_DIR && chown $USERNAME:$USERNAME $XDG_RUNTIME_DIR && chmod 0700 $XDG_RUNTIME_DIR; \
|
||||
Xvfb $DISPLAY -screen 0 ${WIDTH}x${HEIGHT}x24 -dpi 96 -auth /home/$USERNAME/.Xauthority >/dev/null 2>&1 & \
|
||||
sleep 1; \
|
||||
xauth add $DISPLAY . $(mcookie); \
|
||||
x11vnc -display $DISPLAY -forever -rfbauth /home/$USERNAME/.vncpass -listen 0.0.0.0 -rfbport 5900 >/dev/null 2>&1 & \
|
||||
eval $(dbus-launch --sh-syntax) && \
|
||||
startxfce4 & \
|
||||
sleep 2 && echo 'Container running!' && \
|
||||
tail -f /dev/null "]
|
||||
Reference in New Issue
Block a user