# =================================================================== # Dockerfile for Meldestelle Web-App (Hybrid Build) # Version: 3.2.0 - Optimized & Cleaned # =================================================================== # === GLOBAL ARGS === ARG CADDY_VERSION=2.11-alpine ARG VERSION=1.0.0-SNAPSHOT ARG BUILD_DATE # =================================================================== # Stage 1: Runtime Stage (Caddy) # =================================================================== FROM caddy:${CADDY_VERSION} # envsubst für Env-Var-Substitution zur Laufzeit RUN apk add --no-cache gettext ARG VERSION ARG BUILD_DATE LABEL service="web-app" \ version="${VERSION}" \ maintainer="Meldestelle Development Team" \ build.date="${BUILD_DATE}" # Copy Caddy Config & Entrypoint COPY config/docker/caddy/web-app/Caddyfile /etc/caddy/Caddyfile COPY config/docker/caddy/web-app/entrypoint.sh /entrypoint.sh # config.json als Template ablegen; der Entrypoint erzeugt daraus zur Laufzeit die finale config.json COPY config/docker/caddy/web-app/config.json /usr/share/caddy/config.json.tmpl RUN chmod +x /entrypoint.sh # Copy Pre-built Static Assets from Host (WasmJs) # NOTE: BUILD_DATE wird hier genutzt, um den Layer-Cache zu invalidieren, # falls sich der Code geändert hat, aber die Dateimetadaten im Runner-Cache gleich blieben. ARG BUILD_DATE COPY config/docker/caddy/web-app/_site/ /usr/share/caddy/ # index.html wird als Template abgelegt; der Entrypoint erzeugt daraus zur Laufzeit die finale index.html RUN mv /usr/share/caddy/index.html /usr/share/caddy/index.html.tmpl # Ensure favicon exists (fallback) # Using the shared asset from existing config structure COPY config/docker/nginx/web-app/favicon.svg /usr/share/caddy/favicon.svg EXPOSE 80 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost/health || exit 1 ENTRYPOINT ["/entrypoint.sh"] CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]