Initial commit: Open-Typer Docker/WASM Setup
All checks were successful
Release Docker Image / Build & Push Docker Image (release) Successful in 20m23s

This commit is contained in:
2026-04-15 11:02:17 +02:00
commit 8120ec388a
7 changed files with 1044 additions and 0 deletions

90
Dockerfile Normal file
View File

@@ -0,0 +1,90 @@
# ============================================================
# 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|<meta name="viewport"|<link rel="icon" type="image/svg+xml" href="qtlogo.svg">\n <meta name="viewport"|' /usr/share/nginx/html/index.html
# Eigene nginx-Konfiguration mit korrekten MIME-Types für WASM
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
CMD wget -qO- http://localhost/ || exit 1
CMD ["nginx", "-g", "daemon off;"]