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>
79 lines
3.3 KiB
Docker
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"]
|