FROM ghcr.io/cirruslabs/flutter:3.38.0 AS dev ENV RUN_FLUTTER_AS_ROOT=true WORKDIR /workspace COPY scripts ./scripts COPY locales ./locales COPY userfront ./userfront WORKDIR /workspace/userfront RUN flutter pub get EXPOSE 5000 CMD ["sh", "./scripts/dev-server.sh"] # Stage 1: Build Flutter FROM ghcr.io/cirruslabs/flutter:3.38.0 AS build ENV RUN_FLUTTER_AS_ROOT=true WORKDIR /app COPY . . # Get dependencies and build for web RUN /bin/sh ./scripts/sync_userfront_locales.sh WORKDIR /app/userfront RUN flutter pub get RUN rm -rf build/web && flutter build web --release --wasm FROM node:24-trixie-slim AS optimize WORKDIR /work COPY --from=build /app/userfront/build/web /work/build/web COPY userfront/scripts/optimize-web-build.mjs /work/scripts/optimize-web-build.mjs RUN node /work/scripts/optimize-web-build.mjs /work/build/web # Stage 2: Serve with Nginx FROM debian:trixie-slim AS production RUN apt-get update \ && apt-get install -y --no-install-recommends nginx ca-certificates wget \ && rm -rf /var/lib/apt/lists/* # Copy built assets COPY --from=optimize /work/build/web /usr/share/nginx/html # Copy custom Nginx config COPY userfront/nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 5000 CMD ["nginx", "-g", "daemon off;"]