# --- etap 1: build --- FROM node:22-alpine AS build WORKDIR /build # najpierw manifesty, zeby warstwa z node_modules byla cache'owana COPY package.json package-lock.json ./ RUN npm ci COPY . . # frontend odpytuje backend przez wzgledny /api, ktory nginx proxuje dalej ARG VITE_API_URL=/api ENV VITE_API_URL=$VITE_API_URL RUN npm run build # Pliki MediaPipe do rozmycia tla, kopiowane Z ZAINSTALOWANEGO PAKIETU. # # DLACZEGO NIE Z REPOZYTORIUM # --------------------------------------------------------------------------- # Zestaw WASM wazy kilkanascie MB i musi odpowiadac wersji # `@mediapipe/tasks-vision` wciagnietej przez `@livekit/track-processors`. # Wrzucony do repozytorium puchlby w historii na zawsze, a przy aktualizacji # pakietu rozjezdzalby sie po cichu: rozmycie przestaje dzialac, a nic tego # nie sygnalizuje. Kopiowanie przy budowaniu wiaze pliki z wersja pakietu. # # DLACZEGO NIE Z CDN # --------------------------------------------------------------------------- # Domyslnie biblioteka pobiera je z jsdelivr i storage.googleapis.com. # Instancja w sieci zamknietej nie miaƂaby wtedy rozmycia wcale, a CSP # musialoby dopuszczac dwa obce hosty. Serwowanie z wlasnej domeny miesci sie # w istniejacym `connect-src 'self'`. RUN mkdir -p /build/dist/mediapipe && cp -r node_modules/@mediapipe/tasks-vision/wasm /build/dist/mediapipe/wasm # --- etap 2: runtime --- FROM nginx:1.27-alpine COPY --from=build /build/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]