# ─── Valhalla tile-builder Dockerfile ───────────────────────────────────────── # Builds per-city Valhalla road/transit tile directories. # The gis-ops Valhalla image provides valhalla_build_tiles and friends. # Node.js is added for the BullMQ job consumer. # @valhallajs/valhallajs is NOT used here — tile building uses the CLI tools. FROM node:22-slim AS build RUN apt-get update && apt-get install -y --no-install-recommends python3 make g++ \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY package.json package-lock.json* tsconfig.base.json ./ COPY apps/web/package.json ./apps/web/ COPY worker/package.json ./worker/ COPY shared/package.json ./shared/ # NODE_ENV must NOT be production here — devDependencies needed to build RUN npm install --workspace=apps/web --workspace=worker --workspace=shared COPY shared/ ./shared/ RUN npm run build --workspace=shared COPY worker/ ./worker/ RUN npm run build --workspace=worker # ─── Runtime (Valhalla + Node.js) ───────────────────────────────────────────── FROM ghcr.io/gis-ops/docker-valhalla/valhalla:latest AS valhalla-worker USER root RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates curl gnupg osmium-tool \ && mkdir -p /etc/apt/keyrings \ && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" \ > /etc/apt/sources.list.d/nodesource.list \ && apt-get update \ && apt-get install -y --no-install-recommends nodejs \ && rm -rf /var/lib/apt/lists/* WORKDIR /app ENV NODE_ENV=production # node_modules built on Debian glibc (same ABI as this container) COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/worker/dist ./worker/dist COPY --from=build /app/shared/dist ./shared/dist COPY shared/package.json ./shared/ COPY worker/package.json ./worker/ RUN mkdir -p /data/osm /data/valhalla && chmod 1777 /data/osm ENTRYPOINT ["/bin/node"] CMD ["worker/dist/valhalla-main.js"]