Install the real ace server's converted service set (24 modules) together on one node behind the substrate — sibling of the whole-mesh-novox bed, the media/home-automation half. Loads each committed module.json from mesh-catalog, rewrites image refs to the scenario registry's digests, remaps the co-located host-port collisions (qbittorrent/searxng/unifi :8080, nzbget/unifi :6789), and pre-creates the ADR-0051 operator-owned media library dirs under /services/media so the media stack's `accesses` resolve. Proven green: the whole 24-module set RESOLVES and applies (214 resources, node applied+current) — the ADR-0051 shared-dir `accesses` mechanism works cleanly across eight co-accessing media modules. The CORE 17 converge whole: postgres/redis/mssql, sonarr/radarr/lidarr/jackett/tautulli/bookshelf, mosquitto/influxdb/grafana/baserow/nodered/searxng/unifi/portainer. Reported as escalated gaps (do not gate green): six tool-runtime sidecars crash-loop because the committed manifest does not wire the app credential they need (plex MESH_PLEX_TOKEN, bazarr MESH_BAZARR_API_KEY, nzbget MESH_NZBGET_URL/PASSWORD, qbittorrent MESH_QBITTORRENT_URL/PASSWORD, ombi MESH_OMBI_API_KEY, home-assistant MESH_HOMEASSISTANT_TOKEN) — the umami/photos class from novox; each server is up, only the sidecar is down. sonarr/radarr/ lidarr/jackett/tautulli self-configure from the app's config file and their runtimes come up. letta's app has a first-boot postgres migration race (pgvector the deeper blocker, per two-node-db). Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
100 lines
4.0 KiB
YAML
100 lines
4.0 KiB
YAML
# The whole `ace` server's converted service set, installed together on ONE node behind the mesh
|
|
# substrate — the media/home-automation half of the whole-mesh rehearsal (novox/hq). Sibling of
|
|
# scenarios/whole-mesh-novox.yml; same topology, a different (larger, media-heavy) module set.
|
|
#
|
|
# Substrate (store, broker, control) rides `anchor` and NOTHING else; ALL of ace's services ride the
|
|
# `ace` node. An overlay is placed so the two DB consumers (baserow, letta) reach the postgres/redis
|
|
# providers co-located with them. The media stack (sonarr/radarr/lidarr/plex/bazarr/nzbget/
|
|
# qbittorrent/bookshelf) shares the operator-owned library directories under /services/media (ADR
|
|
# 0051 `accesses`); the test pre-creates them on the node, as the operator would, before the push —
|
|
# the mesh confirms the paths exist and mounts them, but creates and chowns none of it.
|
|
#
|
|
# MESH_LAB_HOST_BINARY=.../mesh-host MESH_LAB_BUNDLE=.../examples/substrate-first-node.lock
|
|
# The runtimes are built by scripts/build-module-runtime.sh (one per module); every server image must
|
|
# be in the local daemon to be stocked. The media/app images are pulled by their pinned digests and
|
|
# tagged :mesh so repositoryFor matches the module.json paths (postgres/redis/portainer/mssql reuse
|
|
# their existing local tags). The test loads each committed module.json from mesh-catalog and rewrites
|
|
# its image references to what this scenario's own registry serves by digest.
|
|
scenario: whole-mesh-ace
|
|
|
|
segments:
|
|
hosting:
|
|
kind: public
|
|
cidr: [192.0.2.0/24]
|
|
|
|
machines:
|
|
anchor:
|
|
at: { segment: hosting, address: [192.0.2.10] }
|
|
inbound: allow
|
|
memory: 4GiB
|
|
cpus: 4
|
|
disk: 20GiB
|
|
# The whole ace service set — 24 modules, ~50 containers, several heavy (Plex, Home Assistant,
|
|
# Letta ~1.8GiB, Baserow ~1.5GiB, the UniFi controller's JVM, mssql ~2GiB). Sized past novox.
|
|
ace:
|
|
at: { segment: hosting, address: [192.0.2.20] }
|
|
inbound: allow
|
|
memory: 18GiB
|
|
cpus: 8
|
|
disk: 120GiB
|
|
|
|
images:
|
|
# The first-node substrate.
|
|
- postgres:17-alpine
|
|
- cloudamqp/lavinmq:latest
|
|
- mesh-control:development
|
|
# The module server images. Reused local tags where the exact version does not matter for a boot
|
|
# (postgres/redis/portainer/mssql); pinned-digest :mesh tags for the media/app images.
|
|
- redis:7-alpine
|
|
- lscr.io/linuxserver/sonarr:mesh
|
|
- lscr.io/linuxserver/radarr:mesh
|
|
- lscr.io/linuxserver/lidarr:mesh
|
|
- lscr.io/linuxserver/bazarr:mesh
|
|
- lscr.io/linuxserver/nzbget:mesh
|
|
- lscr.io/linuxserver/qbittorrent:mesh
|
|
- lscr.io/linuxserver/jackett:mesh
|
|
- lscr.io/linuxserver/ombi:mesh
|
|
- lscr.io/linuxserver/tautulli:mesh
|
|
- lscr.io/linuxserver/unifi-controller:mesh
|
|
- plexinc/pms-docker:mesh
|
|
- ghcr.io/pennydreadful/bookshelf:mesh
|
|
- ghcr.io/home-assistant/home-assistant:mesh
|
|
- eclipse-mosquitto:mesh
|
|
- influxdb:mesh
|
|
- grafana/grafana:mesh
|
|
- baserow/baserow:mesh
|
|
- letta/letta:mesh
|
|
- nodered/node-red:mesh
|
|
- searxng/searxng:mesh
|
|
- valkey/valkey:mesh
|
|
- portainer/portainer-ce:latest
|
|
- mcr.microsoft.com/mssql/server:2022-latest
|
|
# The per-module runtimes (built by scripts/build-module-runtime.sh).
|
|
- mesh-runtime-postgres:development
|
|
- mesh-runtime-redis:development
|
|
- mesh-runtime-sonarr:development
|
|
- mesh-runtime-radarr:development
|
|
- mesh-runtime-lidarr:development
|
|
- mesh-runtime-plex:development
|
|
- mesh-runtime-bazarr:development
|
|
- mesh-runtime-nzbget:development
|
|
- mesh-runtime-qbittorrent:development
|
|
- mesh-runtime-jackett:development
|
|
- mesh-runtime-ombi:development
|
|
- mesh-runtime-tautulli:development
|
|
- mesh-runtime-bookshelf:development
|
|
- mesh-runtime-home-assistant:development
|
|
- mesh-runtime-mosquitto:development
|
|
- mesh-runtime-influxdb:development
|
|
- mesh-runtime-grafana:development
|
|
- mesh-runtime-baserow:development
|
|
- mesh-runtime-letta:development
|
|
- mesh-runtime-nodered:development
|
|
- mesh-runtime-searxng:development
|
|
- mesh-runtime-unifi:development
|
|
- mesh-runtime-portainer:development
|
|
- mesh-runtime-mssql:development
|
|
|
|
place:
|
|
all: [host, runtime]
|