# Bridge service — multi-stage build # Image finale : node 22 alpine, ~80 Mo ARG NODE_VERSION=22-alpine # --- Stage 1 : deps --- FROM node:${NODE_VERSION} AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --only=production && npm cache clean --force # --- Stage 2 : build --- FROM node:${NODE_VERSION} AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY tsconfig.json ./ COPY src ./src RUN npm run build # --- Stage 3 : runtime --- FROM node:${NODE_VERSION} AS runtime WORKDIR /app # Non-root user RUN addgroup -g 1001 -S bridge && adduser -S bridge -u 1001 USER bridge COPY --from=deps --chown=bridge:bridge /app/node_modules ./node_modules COPY --from=build --chown=bridge:bridge /app/dist ./dist COPY --chown=bridge:bridge package.json ./ ENV NODE_ENV=production ENV PORT=4000 EXPOSE 4000 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget --quiet --tries=1 --spider http://localhost:4000/api/health || exit 1 CMD ["node", "dist/index.js"]