# Cards-Web: SvelteKit (adapter-node), 2-stage build. # Build-Context = Repo-Root. FROM node:20-alpine AS builder WORKDIR /app ARG NPM_AUTH_TOKEN ENV NPM_AUTH_TOKEN=${NPM_AUTH_TOKEN} ARG PUBLIC_CARDS_API_URL ENV PUBLIC_CARDS_API_URL=${PUBLIC_CARDS_API_URL} COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json tsconfig.base.json .npmrc ./ COPY apps/web/package.json apps/web/ COPY packages/cards-domain/package.json packages/cards-domain/ RUN npm install -g pnpm@9.15.9 \ && pnpm install --frozen-lockfile --prod=false COPY packages/cards-domain packages/cards-domain COPY apps/web apps/web WORKDIR /app/apps/web RUN pnpm exec svelte-kit sync && pnpm exec vite build # --- runtime stage --- FROM node:20-alpine AS runtime WORKDIR /app # adapter-node bundled das complete server-bundle in build/, sonst nichts. COPY --from=builder /app/apps/web/build /app/build COPY --from=builder /app/apps/web/package.json /app/package.json # adapter-node hat keine externen Deps zur Laufzeit (alles ist in build/ # gebundelt), wir starten direkt mit node. ENV NODE_ENV=production ENV PORT=3000 ENV HOST=0.0.0.0 EXPOSE 3000 CMD ["node", "build/index.js"]