fifteen/Dockerfile.valhalla-worker

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"]