Spaces:
Paused
Paused
| # ββ Hugging Face Spaces Dockerfile βββββββββββββββββββββββββββββββββββββββββββ | |
| # Base: ROS 2 Humble (Ubuntu 22.04) | |
| FROM osrf/ros:humble-desktop | |
| # ββ System dependencies βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # x11vnc + Xvfb + websockify + novnc for the VNCβWebSocketβbrowser pipeline | |
| # libgl1-mesa-dri β software OpenGL so RViz renders without a GPU | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| curl \ | |
| xvfb \ | |
| x11vnc \ | |
| websockify \ | |
| novnc \ | |
| libgl1-mesa-dri \ | |
| libgles2-mesa \ | |
| mesa-utils \ | |
| net-tools \ | |
| && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ | |
| && apt-get install -y --no-install-recommends nodejs \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ββ Non-root user (Hugging Face runs with UID 1000) βββββββββββββββββββββββββββ | |
| RUN useradd -m -u 1000 user && \ | |
| mkdir -p /app && \ | |
| chown -R user:user /app | |
| WORKDIR /app | |
| USER user | |
| # ββ npm install (cached layer) ββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY --chown=user:user package.json package-lock.json* ./ | |
| RUN npm ci --only=production 2>/dev/null || npm install --only=production | |
| # ββ Copy project ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| COPY --chown=user:user . . | |
| # ββ Source ROS 2 in shell βββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN echo "source /opt/ros/humble/setup.bash" >> /home/user/.bashrc | |
| # ββ Pre-build all ROS workspaces ββββββββββββββββββββββββββββββββββββββββββββββ | |
| RUN /bin/bash -c "\ | |
| source /opt/ros/humble/setup.bash && \ | |
| cd /app/ros_2 && colcon build --parallel-workers 1 --packages-select robot_proximity && \ | |
| cd /app/ros_3 && colcon build --parallel-workers 1 --packages-select robot_proximity && \ | |
| cd /app/ros_4 && colcon build --parallel-workers 1 --packages-select robot_proximity" | |
| # ββ Runtime environment βββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ENV AMENT_PREFIX_PATH=/opt/ros/humble | |
| ENV ROS_DISTRO=humble | |
| ENV PYTHONPATH=/opt/ros/humble/local/lib/python3.10/dist-packages | |
| ENV PORT=7860 | |
| # Virtual display β x11vnc will capture this | |
| ENV DISPLAY=:20 | |
| # Force software OpenGL so RViz renders without a GPU | |
| ENV LIBGL_ALWAYS_SOFTWARE=1 | |
| ENV MESA_GL_VERSION_OVERRIDE=3.3 | |
| EXPOSE 7860 | |
| # server.js manages the full display stack (Xvfb β x11vnc β websockify) | |
| CMD ["node", "server.js"] | |