File size: 6,260 Bytes
e5de808 cd1bf8c e5de808 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | FROM ubuntu:24.04
# ββ Metadata ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
LABEL maintainer="HuggingFace Space"
LABEL description="Ubuntu 24.04 XFCE Desktop via noVNC β PRoot-Distro Style"
LABEL version="1.0.0"
# ββ Environment βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ENV DEBIAN_FRONTEND=noninteractive \
TZ=UTC \
LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8 \
DISPLAY=:1 \
VNC_PORT=5901 \
NOVNC_PORT=6080 \
DASH_PORT=5000 \
NGINX_PORT=7860 \
RESOLUTION=1280x720 \
COLOR_DEPTH=16 \
VNC_PASSWORD="" \
HOME=/data/home \
USER=ubuntu \
XDG_RUNTIME_DIR=/tmp/runtime-ubuntu
# ββ Stage 1: base tools + locale ββββββββββββββββββββββββββββββββββββββββββββ
# Install curl/gnupg/ca-certificates first so we can add the Mozilla apt repo.
RUN apt-get update && apt-get install -y --no-install-recommends \
locales \
ca-certificates \
curl \
wget \
gnupg \
&& locale-gen en_US.UTF-8 \
&& update-locale LANG=en_US.UTF-8 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# ββ Stage 2: Mozilla apt repo βββββββββββββββββββββββββββββββββββββββββββββββ
# firefox-esr is a Debian package; Ubuntu 24.04 ships Firefox as a snap which
# does NOT work inside Docker containers. Mozilla's official deb repo is the
# correct fix for Ubuntu 24.04 Docker images.
RUN install -d -m 0755 /etc/apt/keyrings \
&& curl -fsSL https://packages.mozilla.org/apt/repo-signing-key.gpg \
-o /etc/apt/keyrings/packages.mozilla.org.asc \
&& echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] \
https://packages.mozilla.org/apt mozilla main" \
> /etc/apt/sources.list.d/mozilla.list \
&& printf 'Package: *\nPin: origin packages.mozilla.org\nPin-Priority: 1000\n' \
> /etc/apt/preferences.d/mozilla
# ββ Stage 3: full package install βββββββββββββββββββββββββββββββββββββββββββ
RUN apt-get update && apt-get install -y --no-install-recommends \
# Desktop
xfce4 \
xfce4-goodies \
xfce4-terminal \
xfce4-taskmanager \
# VNC (tigervnc provides Xvnc binary; more reliable on 24.04 than tightvnc)
tigervnc-standalone-server \
tigervnc-tools \
# noVNC + bridge
novnc \
websockify \
# X11 helpers
dbus-x11 \
x11-xserver-utils \
x11-utils \
xdg-utils \
# Browser β resolved from Mozilla apt repo added in Stage 2
firefox-esr \
# Web server
nginx \
# Process manager
supervisor \
# Python runtime
python3 \
python3-pip \
python3-venv \
# Shell tools
nano \
htop \
git \
unzip \
zip \
net-tools \
procps \
sudo \
&& apt-get autoremove -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# ββ Create ubuntu user βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN if ! id -u ubuntu >/dev/null 2>&1; then \
useradd -m -s /bin/bash -u 1000 ubuntu; \
fi \
&& echo "ubuntu:ubuntu" | chpasswd \
&& echo "ubuntu ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \
&& mkdir -p /tmp/runtime-ubuntu \
&& chown ubuntu:ubuntu /tmp/runtime-ubuntu \
&& chmod 700 /tmp/runtime-ubuntu
# ββ Python dependencies ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
COPY requirements.txt /tmp/requirements.txt
RUN pip3 install --break-system-packages --no-cache-dir -r /tmp/requirements.txt
# ββ Application files ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RUN mkdir -p /app
COPY app.py /app/app.py
COPY healthcheck.py /app/healthcheck.py
# ββ Config files βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
COPY supervisord.conf /etc/supervisor/conf.d/desktop.conf
COPY nginx.conf /etc/nginx/sites-available/default
# ββ Shell scripts ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
COPY start.sh /start.sh
COPY setup_storage.sh /setup_storage.sh
COPY setup_ubuntu.sh /setup_ubuntu.sh
COPY setup_vnc.sh /setup_vnc.sh
RUN chmod +x /start.sh /setup_storage.sh /setup_ubuntu.sh /setup_vnc.sh
# ββ Remove default nginx site if it conflicts ββββββββββββββββββββββββββββββββ
RUN rm -f /etc/nginx/sites-enabled/default \
&& ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# ββ Expose HF Spaces port ββββββββββββββββββββββββββββββββββββββββββββββββββββ
EXPOSE 7860
# ββ Health check βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
HEALTHCHECK --interval=30s --timeout=10s --start-period=90s --retries=3 \
CMD python3 /app/healthcheck.py
# ββ Entry point ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CMD ["/start.sh"]
|