feat(gpu-box): news-ingester migrated, Mini compose drops the service block

Phase 2f-2. RSS/Atom ingester (15-min tick → mana_platform.news.curated_articles)
moved to GPU-Box. Service has zero hot-path coupling, all the writes go
cross-LAN to Mini-postgres analog to the Glitchtip pattern.

Two implementation gotchas worth recording:

1. cross-arch image transfer doesn't work. Saved news-ingester:local
   from the Mini (Apple M4 → linux/arm64), tried `docker load` on the
   GPU-Box (linux/amd64) and got 'exec format error' on every restart.
   Native build on the GPU-Box was the only path forward.

2. The original services/news-ingester/Dockerfile assumes
   pnpm-workspace state from prior builds (no COPY for packages/shared-rss
   in the build context). Fresh builds error with
   ERR_PNPM_WORKSPACE_PKG_NOT_FOUND.

Workaround: a GPU-Box-specific Dockerfile at infrastructure/news-ingester/
that vendors shared-rss into the build via a workspace:* → file:ref
sed swap. Build context is the repo root (sparse-clone provides
packages/shared-rss + services/news-ingester). The Mini-side Dockerfile
stays untouched so existing CD builds aren't disturbed.

Mini-side: container stopped + removed from docker-compose.macmini.yml,
running container count 44 → 39.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-07 16:27:45 +02:00
parent 71ec5e7123
commit b03165ce97
3 changed files with 51 additions and 33 deletions

View file

@ -493,6 +493,36 @@ services:
# lebt jetzt in mana-monorepo's infrastructure/verdaccio/config.yaml,
# sparse-clone trägt das Verzeichnis auf der GPU-Box ein.
# ============================================
# ============================================
# Phase 2f-2 — news-ingester (2026-05-07)
# Background article-ingester — Bun-Service mit 15-min-Tick. Schreibt
# in Mini-Postgres mana_platform via LAN. Reine Background-Last,
# null Hot-Path-Coupling.
# ============================================
news-ingester:
# GPU-Box-spezifischer Build (services/news-ingester/Dockerfile ist
# nicht workspace-aware; der hier vendored shared-rss als file: ref).
# Cross-arch: GPU-Box ist x86_64, Mini ist arm64 — Image-Transfer
# via docker save/load würde "exec format error" werfen.
build:
context: /srv/mana/source
dockerfile: infrastructure/news-ingester/Dockerfile
image: news-ingester:gpu-box
container_name: news-ingester
restart: unless-stopped
environment:
TZ: Europe/Berlin
PORT: 3066
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@192.168.178.131:5432/mana_platform
TICK_INTERVAL_MS: '900000'
RUN_ON_STARTUP: 'true'
healthcheck:
test: ['CMD', 'bun', '-e', "fetch('http://127.0.0.1:3066/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
interval: 120s
timeout: 10s
retries: 3
start_period: 30s
verdaccio:
image: verdaccio/verdaccio:6
container_name: mana-verdaccio