# LPS 관리자 UI 이미지 — Vite(React) 정적 빌드 → nginx 서빙. # nginx 가 /v1·/healthz·/readyz 를 lps-api:9600 으로 프록시(동일출처)하므로, # 앱은 상대경로로 API 를 호출한다(client.ts baseUrl 빈값) → 빌드 타임 API URL 주입 불필요. # 빌드는 slim(glibc) — alpine(musl)+esbuild 의 ETXTBSY 회피(negodata/front 선례). FROM node:22-slim AS build WORKDIR /app # 의존성 먼저 (레이어 캐시). package-lock 고정 설치. COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npm run build # tsc -b && vite build → dist/ # ── 런타임: 정적 서빙 + API 프록시 ── FROM nginx:1.27-alpine COPY nginx.conf /etc/nginx/conf.d/default.conf COPY --from=build /app/dist /usr/share/nginx/html EXPOSE 80 # UI 자체 도달성만 확인(index.html) — API 상태는 앱 대시보드가 lps-api 를 직접 폴링한다. HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- http://127.0.0.1/ >/dev/null 2>&1 || exit 1