diff --git a/clients/shared/common-ui/src/commonMain/kotlin/at/mocode/clients/shared/commonui/components/AppScaffold.kt b/clients/shared/common-ui/src/commonMain/kotlin/at/mocode/clients/shared/commonui/components/AppScaffold.kt index aed1a6c7..981b4d87 100644 --- a/clients/shared/common-ui/src/commonMain/kotlin/at/mocode/clients/shared/commonui/components/AppScaffold.kt +++ b/clients/shared/common-ui/src/commonMain/kotlin/at/mocode/clients/shared/commonui/components/AppScaffold.kt @@ -1,6 +1,5 @@ package at.mocode.clients.shared.commonui.components -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.ExperimentalMaterial3Api diff --git a/docker-compose.clients.yml b/docker-compose.clients.yml index bf50ba9a..00ef4a80 100644 --- a/docker-compose.clients.yml +++ b/docker-compose.clients.yml @@ -28,11 +28,16 @@ services: build: context: . dockerfile: dockerfiles/clients/web-app/Dockerfile + args: + - BUILD_DATE=${BUILD_DATE:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")} + - VERSION=${APP_VERSION:-1.0.0} container_name: meldestelle-web-app environment: NODE_ENV: ${NODE_ENV:-production} APP_TITLE: ${APP_NAME:-Meldestelle} APP_VERSION: ${APP_VERSION:-1.0.0} + # Nginx Worker Processes (für Performance) + NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} ports: - "4000:4000" networks: diff --git a/dockerfiles/clients/web-app/Dockerfile b/dockerfiles/clients/web-app/Dockerfile index 6fac1202..9fcb36ec 100644 --- a/dockerfiles/clients/web-app/Dockerfile +++ b/dockerfiles/clients/web-app/Dockerfile @@ -15,21 +15,20 @@ COPY gradle ./gradle COPY gradlew ./ # Kopiere alle notwendigen Module für Multi-Modul-Projekt -COPY client ./client +COPY clients ./clients COPY core ./core COPY platform ./platform COPY infrastructure ./infrastructure -COPY temp ./temp -COPY docs ./docs +COPY services ./services # Setze Gradle-Wrapper Berechtigung RUN chmod +x ./gradlew # Dependencies downloaden (für besseres Caching) -RUN ./gradlew :client:dependencies --no-configure-on-demand +RUN ./gradlew :clients:app:dependencies --no-configure-on-demand -# Kotlin/WASM Web-App kompilieren -RUN ./gradlew :client:wasmJsBrowserDistribution --no-configure-on-demand +# Kotlin/JS Web-App kompilieren (PRODUCTION Build) +RUN ./gradlew :clients:app:jsBrowserDistribution --no-configure-on-demand -Pproduction=true # =================================================================== # Stage 2: Runtime Stage - Nginx für Static Files + API Proxy @@ -40,7 +39,7 @@ FROM nginx:1.25-alpine RUN apk add --no-cache curl # Kopiere kompilierte Web-App von Build-Stage -COPY --from=builder /app/client/build/dist/wasmJs/productionExecutable/ /usr/share/nginx/html/ +COPY --from=builder /app/clients/app/build/dist/js/productionExecutable/ /usr/share/nginx/html/ # Kopiere Nginx-Konfiguration COPY dockerfiles/clients/web-app/nginx.conf /etc/nginx/nginx.conf diff --git a/dockerfiles/clients/web-app/nginx.conf b/dockerfiles/clients/web-app/nginx.conf index 1d1fcd47..b85eb068 100644 --- a/dockerfiles/clients/web-app/nginx.conf +++ b/dockerfiles/clients/web-app/nginx.conf @@ -3,22 +3,40 @@ # Static Files + API Proxy zu Gateway # =================================================================== +# Worker-Prozesse (konfigurierbar über NGINX_WORKER_PROCESSES) +worker_processes auto; + events { worker_connections 1024; + use epoll; + multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; + # WASM MIME-Type für zukünftige Builds + location ~ \.wasm$ { + add_header Content-Type application/wasm; + } + # Logging access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; + # Performance Optimizations + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # Gzip Kompression für bessere Performance gzip on; gzip_vary on; gzip_min_length 1024; + gzip_comp_level 6; gzip_types text/plain text/css @@ -26,7 +44,8 @@ http { text/javascript application/javascript application/xml+rss - application/json; + application/json + application/wasm; # Upstream für API Gateway upstream api-gateway {