# ============================================================ # Pipeline Backend — 엣지 배포용 프로덕션 이미지 # # Python 훅 실행기용 python3 포함. # ts-node 대신 dist/app.js 실행 (프로덕션). # ============================================================ FROM node:20-bookworm-slim AS builder WORKDIR /app # 시스템 패키지 RUN apt-get update \ && apt-get install -y --no-install-recommends openssl ca-certificates curl python3 \ && rm -rf /var/lib/apt/lists/* # 의존성 설치 (devDependencies 포함 — tsc 빌드 필요) COPY package*.json ./ RUN npm ci --prefer-offline --no-audit # 소스 복사 + 빌드 COPY tsconfig.json ./ COPY src ./src COPY db ./db RUN npx tsc --outDir dist # ── Runtime 스테이지 (작은 이미지) ────────────────── FROM node:20-bookworm-slim WORKDIR /app # Python3 + 필수 런타임만 RUN apt-get update \ && apt-get install -y --no-install-recommends openssl ca-certificates curl python3 \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean # Production 의존성만 COPY package*.json ./ RUN npm ci --omit=dev --prefer-offline --no-audit \ && npm cache clean --force # 빌드 결과물 복사 COPY --from=builder /app/dist ./dist COPY --from=builder /app/db ./db # 스토리지 폴더 RUN mkdir -p /app/storage /app/uploads \ && chown -R node:node /app USER node EXPOSE 8080 1883 8083 HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ CMD curl -fsS http://localhost:8080/health || exit 1 CMD ["node", "dist/app.js"]