File size: 4,029 Bytes
5426391
 
 
 
e323c1f
5426391
 
e3dd10f
 
 
89f3f85
5426391
 
 
 
 
 
 
 
 
 
 
 
 
89f3f85
5426391
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e3dd10f
5426391
 
e3dd10f
e323c1f
e3dd10f
5426391
 
 
 
 
 
 
 
 
e3dd10f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5426391
89f3f85
5426391
98de71f
5426391
 
 
e3dd10f
 
 
89f3f85
 
 
 
 
98de71f
89f3f85
 
 
e323c1f
e3dd10f
89f3f85
 
 
 
98de71f
89f3f85
 
 
98de71f
e3dd10f
 
89f3f85
 
98de71f
 
 
e323c1f
 
98de71f
 
89f3f85
e3dd10f
 
89f3f85
 
a562516
89f3f85
e3dd10f
89f3f85
 
 
e323c1f
e3dd10f
 
89f3f85
e3dd10f
89f3f85
a562516
89f3f85
 
 
 
 
e323c1f
89f3f85
e3dd10f
 
 
89f3f85
 
 
 
 
 
e3dd10f
 
 
 
89f3f85
 
 
 
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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 \
"]