The mesh builds the CDN from this repository and a commit (novox/hq ADR 0069); registry-api.novox.be, where HAL's image came from, is retired, so the running container can no longer be re-pulled. The HAL module.yml and service/docker-compose.yml retire with HAL. The Kometa metadata links every poster to this service's own address, which was the literal https://f1-circuits.zurag.be. It is now F1_CIRCUITS_BASE_URL, written by the mesh from the route's name (${bound:route:name}, mesh-controller #149) - falling back to the old address, so HAL's deployment behaves as before. The tile user agent follows it. The poster cache is a placed directory mounted at /app/cache, as HAL's /services/f1-circuits/cache was. The image was built from unpinned pip installs; service/requirements.txt now pins the exact set the running container has (pip freeze), and the base is python 3.12.13-alpine3.24 by digest (a later alpine 3.24 patch than the running build's 3.24.0 - the older digest is no longer tagged). The slug "f1" keeps the route login within 20 characters on any machine. Verified: the manifest parses on mesh-controller main and #149 and renders for a zurag.be node (F1_CIRCUITS_BASE_URL=https://f1-circuits. zurag.be). Built from this commit and run on an empty cache: /circuits, /circuits/<country> and a rendered Spa track are byte-identical to what ace serves today; the base URL comes from the variable, and without it falls back to the old address. Depends on mesh-controller #149.
32 lines
1.2 KiB
Docker
32 lines
1.2 KiB
Docker
# The base arrives pinned from module.json's build.on (python 3.12.13 on alpine 3.24); the mesh
|
|
# builds this image from this repository and a commit (novox/hq ADR 0069). The build context is
|
|
# the repository root, so every COPY names its path from there.
|
|
ARG PYTHON_BASE
|
|
FROM ${PYTHON_BASE}
|
|
|
|
WORKDIR /app
|
|
|
|
# Runtime deps:
|
|
# - cairo provides libcairo so cairosvg can rasterise SVG → PNG.
|
|
# - ttf-liberation gives Liberation Sans Bold at
|
|
# /usr/share/fonts/liberation/LiberationSans-Bold.ttf — exactly where Arch
|
|
# installs it, so dev (shanks) and prod (this container) render with the
|
|
# same font and the posters come out identical.
|
|
RUN apk add --no-cache \
|
|
cairo \
|
|
ttf-liberation
|
|
|
|
# All pip deps ship musllinux wheels — no build-deps needed.
|
|
# numpy is pulled in by models/geo_json/geometry.py for vector ops at import time.
|
|
# The versions are the ones the running deployment had (service/requirements.txt).
|
|
COPY service/requirements.txt ./requirements.txt
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY cdn-api.py circuits_service.py ergast_service.py posters_service.py ./
|
|
COPY models/ ./models/
|
|
COPY circuits/ ./circuits/
|
|
|
|
EXPOSE 8000
|
|
|
|
CMD ["uvicorn", "cdn-api:app", "--host", "0.0.0.0", "--port", "8000"]
|