Spaces:
Paused
Paused
| 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 \ | |
| "] |