47 lines
2.3 KiB
Text
47 lines
2.3 KiB
Text
# ─── 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"]
|