Godot.game_engine / Dockerfile
Rixf123's picture
Update Dockerfile
e3dd10f verified
Raw
History Blame Contribute Delete
4.03 kB
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
ENV DISPLAY=:1
ENV HOME=/tmp/godot-home
ENV GODOT_PROJECTS=/data/GodotProjects
# ============================================================
# Install desktop, VNC, noVNC and libraries
# ============================================================
RUN apt-get update && apt-get install -y \
xfce4 \
xfce4-goodies \
xfce4-terminal \
tigervnc-standalone-server \
novnc \
websockify \
dbus-x11 \
wget \
curl \
unzip \
git \
git-lfs \
ca-certificates \
mesa-utils \
libgl1-mesa-dri \
libglx-mesa0 \
libegl1 \
libx11-6 \
libxcursor1 \
libxinerama1 \
libxrandr2 \
libxi6 \
libxrender1 \
libxfixes3 \
libfontconfig1 \
libfreetype6 \
libasound2t64 \
libpulse0 \
xterm \
&& rm -rf /var/lib/apt/lists/*
# ============================================================
# Install Godot
# ============================================================
RUN cd /tmp && \
wget -O godot.zip \
https://github.com/godotengine/godot/releases/download/4.7.1-stable/Godot_v4.7.1-stable_linux.x86_64.zip && \
unzip godot.zip && \
mv Godot_v4.7.1-stable_linux.x86_64 /usr/local/bin/godot && \
chmod +x /usr/local/bin/godot && \
rm -f godot.zip
# ============================================================
# Create XFCE startup script
# ============================================================
RUN printf '%s\n' \
'#!/bin/sh' \
'unset SESSION_MANAGER' \
'unset DBUS_SESSION_BUS_ADDRESS' \
'export XDG_CURRENT_DESKTOP=XFCE' \
'export XDG_SESSION_DESKTOP=xfce' \
'export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg' \
'export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share' \
'dbus-launch --exit-with-session startxfce4' \
> /usr/local/bin/start-xfce.sh \
&& chmod +x /usr/local/bin/start-xfce.sh
# ============================================================
# Run as Hugging Face UID 1000
# ============================================================
USER 1000
WORKDIR /tmp
EXPOSE 7860
# ============================================================
# Start VNC + XFCE + noVNC + Godot
# ============================================================
CMD ["bash", "-c", "\
set -e; \
\
echo '========================================'; \
echo ' GODOT REMOTE EDITOR'; \
echo '========================================'; \
\
if [ -z \"$VNC_PASSWORD\" ]; then \
echo 'ERROR: VNC_PASSWORD is not configured.'; \
echo 'Create a Space Secret named VNC_PASSWORD.'; \
exit 1; \
fi; \
\
if [ ! -d /data ]; then \
echo 'ERROR: /data Storage Bucket is not mounted.'; \
exit 1; \
fi; \
\
mkdir -p /tmp/godot-home; \
mkdir -p /tmp/godot-home/.config; \
mkdir -p /tmp/godot-home/.vnc; \
mkdir -p /data/GodotProjects; \
\
export HOME=/tmp/godot-home; \
\
VNC_DIR=$(mktemp -d /tmp/godot-vnc-XXXXXX); \
\
echo 'Creating VNC password...'; \
printf '%s\\n' \"$VNC_PASSWORD\" | vncpasswd -f > \"$VNC_DIR/passwd\"; \
chmod 600 \"$VNC_DIR/passwd\"; \
\
echo 'Cleaning old display files...'; \
vncserver -kill :1 >/dev/null 2>&1 || true; \
rm -f /tmp/.X1-lock; \
rm -f /tmp/.X11-unix/X1; \
mkdir -p /tmp/.X11-unix; \
\
echo 'Starting VNC + XFCE desktop...'; \
vncserver :1 \
-geometry 1280x720 \
-depth 24 \
-localhost no \
-rfbauth \"$VNC_DIR/passwd\" \
-xstartup /usr/local/bin/start-xfce.sh; \
\
sleep 6; \
\
echo 'Starting noVNC...'; \
websockify \
--web=/usr/share/novnc \
7860 \
localhost:5901 & \
\
sleep 4; \
\
echo 'Starting Godot Editor...'; \
echo 'Persistent projects: /data/GodotProjects'; \
\
godot \
--editor \
--path /data/GodotProjects \
>/tmp/godot.log 2>&1 & \
\
echo '========================================'; \
echo ' GODOT IS RUNNING'; \
echo '========================================'; \
echo 'Browser port: 7860'; \
echo 'Projects: /data/GodotProjects'; \
echo '========================================'; \
\
wait \
"]