Files
open-typer-docker/Dockerfile
scriptos 8120ec388a
All checks were successful
Release Docker Image / Build & Push Docker Image (release) Successful in 20m23s
Initial commit: Open-Typer Docker/WASM Setup
2026-04-15 11:02:17 +02:00

91 lines
3.0 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# 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;"]