# syntax=docker/dockerfile:1 # --- 1. Flutter web build ------------------------------------------------- FROM ghcr.io/cirruslabs/flutter:stable AS web WORKDIR /src COPY client/app/pubspec.yaml client/app/pubspec.lock ./ RUN flutter pub get COPY client/app/ ./ RUN flutter build web --release # --- 2. Backend build -------------------------------------------------------- FROM node:20-bookworm-slim AS api-build WORKDIR /src COPY backend/package.json backend/package-lock.json ./ RUN npm ci COPY backend/ ./ RUN npx prisma generate && npm run build # --- 3. Runtime ------------------------------------------------------------ FROM node:20-bookworm-slim AS runtime ENV NODE_ENV=production WORKDIR /app # Prisma needs OpenSSL at runtime. RUN apt-get update && apt-get install -y --no-install-recommends openssl \ && rm -rf /var/lib/apt/lists/* COPY --from=api-build /src/node_modules ./node_modules COPY --from=api-build /src/dist ./dist COPY --from=api-build /src/prisma ./prisma # The Flutter web build; app.module reads WEB_CLIENT_DIR. COPY --from=web /src/build/web ./web ENV WEB_CLIENT_DIR=/app/web EXPOSE 3000 # Apply pending migrations, then boot. CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main.js"]