spawner/user-template-vcoder/Dockerfile
XPS\Micro 0d1f4f1db9 fix: Add dynamic base-path support for code-server subpath routing
code-server needs to know its base path for correct asset loading.
The Traefik StripPrefix middleware removes the path before requests
reach the container, so assets were loading from wrong URLs.

Solution:
- Entrypoint script reads BASE_PATH env var and passes to code-server
- container_manager.py sets BASE_PATH=/{slug_with_suffix} for vcoder
- code-server now loads assets from correct relative paths

This fixes 404 errors on workbench.css, nls.messages.js, etc.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-19 13:37:16 +01:00

79 lines
3.3 KiB
Docker

# ./user-template-vcoder/Dockerfile
# Basiert auf backlog/vcoder/ide/Dockerfile mit Anpassungen für Spawner-Integration
FROM codercom/code-server:latest
# Systempakete (Python 3 + venv) und Tools für VSIX
USER root
ENV DEBIAN_FRONTEND=noninteractiv
ENV PATH="/home/coder/.platformio/penv/bin:${PATH}"
RUN echo "deb http://ftp.de.debian.org/debian bookworm main" > /etc/apt/sources.list && \
echo "deb http://security.debian.org/debian-security bookworm-security main" >> /etc/apt/sources.list && \
echo "deb http://ftp.de.debian.org/debian bookworm-updates main" >> /etc/apt/sources.list && \
apt-get update && apt-get install -y --no-install-recommends \
python3 python3-venv python3-distutils python3-dev python3.11-dev \
curl ca-certificates unzip net-tools clang \
&& rm -rf /var/lib/apt/lists/*
# Symbolischer Link für python3-config
RUN ln -sf /usr/bin/python3.11-config /usr/bin/python3-config
RUN python3 -m venv /home/coder/.platformio/penv
RUN [ -f /home/coder/.platformio/penv/bin/python ] || ln -sf /home/coder/.platformio/penv/bin/python3 /home/coder/.platformio/penv/bin/python
RUN apt-get update && apt-get install -y clangd
# Versionen/Architektur
ARG CPDTOOLS_VER=1.29.0
ARG CPDTOOLS_ARCH=linux-x64
ARG PIO_VER=3.3.4
# Microsoft C/C++ (cpptools) VSIX laden und prüfen
RUN curl -fsSL -o /tmp/cpptools.vsix \
"https://github.com/microsoft/vscode-cpptools/releases/download/v${CPDTOOLS_VER}/cpptools-${CPDTOOLS_ARCH}.vsix" \
&& unzip -t /tmp/cpptools.vsix >/dev/null
# PlatformIO IDE VSIX laden und prüfen
RUN curl -fsSL -o /tmp/platformio.vsix \
"https://github.com/platformio/platformio-vscode-ide/releases/download/v${PIO_VER}/platformio-ide-${PIO_VER}.vsix" \
&& unzip -t /tmp/platformio.vsix >/dev/null
# code-server Datenverzeichnis und User-Settings vorbereiten
RUN mkdir -p /home/coder/.local/share/code-server/extensions \
/home/coder/.local/share/code-server/User \
&& chown -R coder:coder /home/coder/.local/share/code-server
# Extensions als Nutzer "coder" installieren (VSIX + Registry)
USER coder
RUN code-server --install-extension /tmp/cpptools.vsix \
--extensions-dir /home/coder/.local/share/code-server/extensions \
&& code-server --install-extension /tmp/platformio.vsix \
--extensions-dir /home/coder/.local/share/code-server/extensions \
&& code-server --install-extension llvm-vs-code-extensions.vscode-clangd \
--extensions-dir /home/coder/.local/share/code-server/extensions
# Aufräumen temporärer Dateien
USER root
RUN rm -f /tmp/cpptools.vsix /tmp/platformio.vsix
# socat für Port-Tunneling installieren (PIO Home reverse proxy)
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# Entrypoint-Script - startet socat Tunnel + code-server
RUN printf '#!/bin/bash\n\
socat TCP-LISTEN:8008,reuseaddr,fork TCP:localhost:9009 &\n\
# Wenn BASE_PATH nicht gesetzt, nutze "/"\n\
BASE_PATH="${BASE_PATH:=/}"\n\
# Ersetze in CMD das --bind-addr mit vollständigen Flags\n\
if [ "$1" = "code-server" ]; then\n\
shift\n\
exec code-server "--bind-addr" "0.0.0.0:8080" "--base-path" "$BASE_PATH" "--auth" "none" "$@"\n\
fi\n\
exec "$@"\n' > /entrypoint.sh && chmod +x /entrypoint.sh
USER coder
WORKDIR /home/coder/project
ENTRYPOINT ["/entrypoint.sh"]
CMD ["code-server", "--bind-addr", "0.0.0.0:8080", "--auth", "none"]