# parking-collector — the Car Wash review collector (wiki/concepts/vision-review-outbox.md). # Built from the monorepo root (context: .) like the server image, so it shares the # lockfile and @parking/shared. Runs on the REVIEWER's host (not a booth), delivered by # its own Komodo stack (docker-compose.collector.yml). Data on /data: collector.sqlite + # crops//.jpg — the trainer on the same host reads the crops off that volume. FROM node:22-alpine AS deps WORKDIR /app RUN apk add --no-cache python3 make g++ # node-gyp for better-sqlite3 RUN corepack enable && corepack prepare pnpm@10.24.0 --activate COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY apps/server/package.json apps/server/ COPY apps/web/package.json apps/web/ COPY apps/vision/package.json apps/vision/ COPY apps/collector/package.json apps/collector/ COPY packages/db/package.json packages/db/ COPY packages/devices/package.json packages/devices/ COPY packages/shared/package.json packages/shared/ RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm fetch FROM deps AS build ENV CI=true COPY . . RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm install --frozen-lockfile --offline RUN pnpm turbo run build --filter=@parking/collector RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm --filter=@parking/collector --legacy deploy --prod /deploy FROM node:22-alpine AS runtime WORKDIR /app ARG BUILD_VERSION="" ENV BUILD_VERSION=$BUILD_VERSION ENV NODE_ENV=production RUN apk add --no-cache libstdc++ wget # better-sqlite3 native runtime; wget for the healthcheck RUN addgroup -S app && adduser -S -G app app COPY --from=build --chown=app:app /deploy ./ ENV COLLECTOR_DATA_DIR=/data ENV COLLECTOR_HOST=0.0.0.0 ENV COLLECTOR_PORT=8090 RUN mkdir -p /data && chown app:app /data VOLUME ["/data"] USER app EXPOSE 8090 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD wget -qO- "http://localhost:${COLLECTOR_PORT:-8090}/health" >/dev/null 2>&1 || exit 1 CMD ["node", "dist/index.js"]