18-trixieThe app is a small API plus a small single-page UI for one operator. It needs relational storage with JSONB and real partitioning for the archive, and the operator explicitly asked for Postgres 18 on a Debian trixie base.
/api/* and the built SPA,
with a catch-all route that falls back to index.html for client-side routes.docker.io/postgres:18-trixie (currently 18.6) and
given a named volume. Migrations run as a separate, idempotent compose service
gated on service_completed_successfully, never implicitly at app startup.127.0.0.1 by default in compose.uuidv7() is available and
declarative PARTITION BY RANGE on the monthly request log needs no extension./var/lib/postgresql (a version-specific
subdirectory), not /var/lib/postgresql/data; the compose mount point reflects
that, and note that changing it later requires care.postgres:18-alpine. Rejected: the operator asked for trixie, and glibc
collation behaviour is more predictable for a long-lived archive.