Files
computer-playbook/roles/web-svc-cdn/meta/services.yml
kevinveenbirkenbachandClaude Opus 5 10c5b35e88 feat(images): move seven roles off the Debian codename base onto slim
A '-bookworm' tag names its Debian release by codename, which carries no
ordering, so nothing can raise it across a Debian major and the base stays
frozen on that release for as long as the pin stands. Moving to '-slim'
drops the codename and takes the smaller image at the same time.

The tag hides that this is two changes at once: node:26-slim and
python:3.x-slim are trixie today, so those six roles cross Debian 12 to 13
and lose the toolchain the full buildpack-deps image carried. node:24-slim
is still bookworm and its manifest is byte-identical to
node:24-bookworm-slim, so flowise changes nothing today; what it gains is a
tag that will follow the rebase instead of pinning Debian 12 forever.

Each image was built with --no-cache and the steps read back rather than
the exit code: postmarks installs git 2.47.3-0+deb13u1 and 304 npm
packages, bookwyrm builds through its runtime stage so the libjpeg62-turbo,
libsass1, libffi8, libxslt1.1 and libmagic1 it hardcodes do exist on
trixie, roulette-wheel compiles its webpack bundle. Two were additionally
exercised at runtime: sharp loads its prebuilt binding in the simpleicons
image, and bridgy-fed imports secp256k1 and constructs flask_app.app.
web-svc-cdn has no Dockerfile, so its build script's seven tools were
checked for presence instead.

bridgy-fed needs pkg-config, autoconf, automake and libtool to survive the
move. secp256k1 vendors libsecp256k1 and builds it from source: without
pkg-config the metadata step refuses outright, and with it autogen.sh exits
127. python:3.14-bookworm is the full buildpack-deps image and ships both;
slim does not. They land in the build stage only, so the runtime image
stays slim.

The flowise min-storage marker still claimed a bookworm-slim base and now
names what is actually built.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 17:00:51 +02:00

65 lines
2.0 KiB
YAML

---
# nocheck: playwright-service-flag — CDN does not appear as a dashboard tile
# nocheck: dynamic-flag
dashboard:
enabled: false
# nocheck: playwright-service-flag — self-provider
cdn:
# nocheck: default-placement-manager the one-shot npm-mirror build must write the served CDN root, a node-local host bind openresty (manager-pinned) reads
placement: manager
modes:
host:
enabled: true
compose:
enabled: true
swarm:
enabled: true
bond: 1
enabled: true
shared: true
flavor: internal
cpus: "0.2"
mem_reservation: 128m
mem_limit: 256m
pids_limit: 128
min_storage: "1GB"
lifecycle: beta
# nocheck: playwright-service-flag — transient node image used only to build the npm asset mirror, never served
# nocheck: image-healthcheck build-time image run as a one-shot, no service port
build:
# nocheck: single-replica one-shot npm-mirror build writing the shared served root; parallel replicas would race and duplicate work
replicas: 1
image: node
version: "26-slim"
cpus: "1.0"
mem_reservation: 128m
mem_limit: 256m
pids_limit: 256
# nocheck: playwright-service-flag — CDN serves static assets, no HTML pages with tracking snippet
matomo:
bond: 1
enabled: "{{ 'web-app-matomo' in group_names }}"
shared: "{{ 'web-app-matomo' in group_names }}"
# nocheck: matomo-track
track: false
# nocheck: playwright-service-flag — canonical:cdn alias of self-provider
# nocheck: dynamic-flag
javascript:
enabled: false
shared: true
canonical: cdn
# nocheck: playwright-service-flag — /metrics endpoint covered by web-app-prometheus's own spec
prometheus:
bond: 1
enabled: "{{ 'web-app-prometheus' in group_names }}"
shared: "{{ 'web-app-prometheus' in group_names }}"
# nocheck: prometheus-scrape
scrape: false
# nocheck: playwright-service-flag
# nocheck: variants-coverage — sso-variant-tor requires the onion on in every variant, so the false polarity has no variant left to live in
tor:
bond: 0.5
enabled: "{{ 'svc-net-tor' in group_names }}"
shared: true # nocheck: dynamic-flag