# ============================================================ # Stage 1: Build-Stage # - Emscripten 3.1.25 (via offiziellem emscripten/emsdk Image) # - Qt 6.5.2 (Host: gcc_64 + Cross: wasm_singlethread) # - Build von Open-Typer als WebAssembly # ============================================================ FROM emscripten/emsdk:3.1.25 AS builder # Nicht-interaktives apt ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Berlin # Basis-Pakete RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ ninja-build \ python3 \ python3-pip \ python3-dev \ perl \ libgl1-mesa-dev \ libglib2.0-dev \ libxkbcommon-dev \ curl \ xz-utils \ ca-certificates \ libzstd-dev \ && rm -rf /var/lib/apt/lists/* # aqtinstall für Qt-Downloads RUN pip3 install --no-cache-dir aqtinstall==3.1.6 py7zr==0.20.2 # Qt 6.5.2 – Host (gcc_64) für qmake/moc/rcc/uic RUN aqt install-qt linux desktop 6.5.2 gcc_64 \ --outputdir /opt/Qt \ --modules qtcharts qt5compat qtshadertools # Qt 6.5.2 – WebAssembly (wasm_singlethread) RUN aqt install-qt linux desktop 6.5.2 wasm_singlethread \ --outputdir /opt/Qt \ --modules qtcharts qt5compat qtshadertools # emsdk ist im Base-Image bereits unter /emsdk installiert und aktiviert ENV EMSDK=/emsdk ENV EM_CONFIG=/emsdk/.emscripten # Open-Typer Quellcode klonen (inkl. Submodule) RUN git clone --depth=1 --recurse-submodules \ https://github.com/Open-Typer/Open-Typer.git /build/Open-Typer WORKDIR /build/Open-Typer # RUNNER_WORKSPACE wird von build.sh für den Qt-Pfad genutzt ENV RUNNER_WORKSPACE=/opt # WASM-Build: qmake via wasm_singlethread Qt + make RUN /opt/Qt/6.5.2/wasm_singlethread/bin/qmake \ && make -j$(nproc) # ============================================================ # Stage 2: Runtime-Stage # - Schlankes nginx:alpine Image # - Nur die fertigen WASM-Dateien werden kopiert # ============================================================ FROM nginx:alpine AS runtime # Platzhalter-HTML und Standard-Konfig entfernen RUN rm -rf /usr/share/nginx/html/* # Gebaute WASM-Dateien aus der Build-Stage übernehmen # open-typer erzeugt: open-typer.html, open-typer.js, open-typer.wasm, qtloader.js, qtlogo.svg COPY --from=builder /build/Open-Typer/open-typer.html /usr/share/nginx/html/index.html COPY --from=builder /build/Open-Typer/*.js /usr/share/nginx/html/ COPY --from=builder /build/Open-Typer/*.wasm /usr/share/nginx/html/ COPY --from=builder /build/Open-Typer/*.svg /usr/share/nginx/html/ # Favicon: qtlogo.svg als SVG-Favicon einbinden via sed in index.html RUN sed -i 's|\n