Files
mesh-catalog/placement/ace.json
T
jschoubben 0c61bad102
mesh/delivery merged: source.main moved to novox/mesh-catalog@04fa2e3286df
mesh/check checking 0c61bad10238 on 04fa2e3286df
Seed the placement files from what each node runs today, so placement lives in the catalogue (issue 1126, ADR 0549 §4)
2026-10-27 08:34:10 +01:00

1114 lines
21 KiB
JSON

{
"v": 1,
"node": "ace",
"decided": {
"site": "home",
"address": "10.10.0.2",
"public-domain": "zurag.be",
"account": "ace",
"tunnel": {
"interface": "wg0",
"unit": "wg-quick@wg0",
"config": "/etc/wireguard/wg0.conf",
"port": 51820,
"address": "10.10.0.2/24",
"range": "10.10.0.0/24",
"public-key": "zTKYP6Sz1hDwnwxIHgiGXYAeGcWbqti3tcSvKEA0Ew4="
}
},
"modules": [
{
"module": "avahi"
},
{
"module": "baserow",
"ports": {
"80": 20011
},
"bindings": {
"postgres-database": {
"node": "ace",
"module": "postgres"
}
},
"layer": {
"endpoints": {
"web": {
"label": "baserow",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "bazarr",
"ports": {
"6767": 20020
},
"has-mesh-wide": true,
"layer": {
"accesses": {
"anime": "/storage/media/anime",
"downloads": "/storage/downloads",
"movies": "/storage/media/movies",
"series": "/storage/media/series"
},
"endpoints": {
"web": {
"label": "subs",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/bazarr/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"pgid": 2000,
"puid": 1001
}
},
{
"module": "bookshelf",
"ports": {
"8787": 20021
},
"has-mesh-wide": true,
"layer": {
"accesses": {
"books": "/data/media/books",
"downloads": "/data/downloads"
},
"endpoints": {
"web": {
"label": "books",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1000:1000",
"path": "/var/lib/bookshelf/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"downloads": {
"jackett-api": {
"adopt-hosts": [
"jackett"
]
},
"nzbget-api": {
"name": "NZBGet"
},
"qbittorrent-api": {
"name": "qBitTorrent"
}
},
"pgid": 1000,
"puid": 1000
}
},
{
"module": "buildah"
},
{
"module": "ca-trust"
},
{
"module": "car-hunter",
"ports": {
"3000": 20016
},
"bindings": {
"oidc-client": {
"node": "novox",
"module": "keycloak"
},
"postgres-database": {
"node": "ace",
"module": "postgres"
}
},
"layer": {
"endpoints": {
"web": {
"label": "car-hunter",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "claude-code",
"has-mesh-wide": true,
"has-layer": true
},
{
"module": "dbus"
},
{
"module": "dev-tools"
},
{
"module": "disk-load"
},
{
"module": "dnsmasq"
},
{
"module": "docker"
},
{
"module": "f1-circuits",
"ports": {
"8000": 20007
},
"layer": {
"endpoints": {
"web": {
"label": "f1-circuits",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "fail2ban"
},
{
"module": "go"
},
{
"module": "grafana",
"ports": {
"3000": 20012
},
"bindings": {
"influxdb-api": {
"node": "ace",
"module": "influxdb"
},
"oidc-client": {
"node": "novox",
"module": "keycloak"
}
},
"layer": {
"endpoints": {
"web": {
"label": "grafana",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "home-assistant",
"bindings": {
"mqtt-topic": {
"node": "ace",
"module": "mosquitto"
}
},
"layer": {
"endpoints": {
"sonos-events": {
"reach": "public"
},
"web": {
"label": "home-assistant",
"reach": "both"
},
"webrtc": {
"reach": "public"
}
},
"places": {
"config": {
"path": "/var/lib/home-assistant/config"
}
}
},
"has-layer": true
},
{
"module": "hostname",
"has-layer": true
},
{
"module": "icecast",
"ports": {
"8000": 20005
},
"bindings": {
"secret": {
"node": "novox",
"module": "mesh-vault"
}
},
"layer": {
"endpoints": {
"stream": {
"label": "icecast",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "influxdb",
"layer": {
"endpoints": {
"api": {
"label": "influx",
"port": 8086,
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "jackett",
"ports": {
"9117": 20004
},
"has-mesh-wide": true,
"layer": {
"endpoints": {
"web": {
"label": "indexers",
"reach": "public"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
}
},
{
"module": "kernel",
"has-layer": true
},
{
"module": "kometa",
"layer": {
"places": {
"config": {
"owner": "1000:1000",
"path": "/var/lib/kometa/config"
}
}
},
"has-layer": true,
"values": {
"libraries": {
"Formula 1": {
"metadata_files": [
{
"url": "https://f1-circuits.zurag.be/kometa/formula-1-metadata.yml"
}
]
}
},
"pgid": 1000,
"puid": 1000
}
},
{
"module": "letta",
"ports": {
"8283": 20002
},
"bindings": {
"postgres-database": {
"node": "ace",
"module": "postgres"
}
},
"layer": {
"endpoints": {
"web": {
"label": "letta",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "lidarr",
"ports": {
"8686": 20022
},
"has-mesh-wide": true,
"layer": {
"accesses": {
"downloads": "/storage/downloads",
"music": "/storage/media/music"
},
"endpoints": {
"web": {
"label": "lidarr",
"reach": "both"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/lidarr/config"
},
"custom-cont-init": {
"path": "/var/lib/lidarr/custom-cont-init"
},
"custom-services": {
"path": "/var/lib/lidarr/custom-services"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"downloads": {
"jackett-api": {
"adopt-hosts": [
"indexers.zurag.be",
"jackett"
]
},
"nzbget-api": {
"name": "NZBGet"
},
"qbittorrent-api": {
"name": "qBitTorrent"
}
},
"pgid": 2000,
"puid": 1001
}
},
{
"module": "localization"
},
{
"module": "logrotate"
},
{
"module": "matrix",
"ports": {
"6167": 20008,
"80": 20009
},
"layer": {
"endpoints": {
"client": {
"label": "matrix",
"reach": "public"
},
"web": {
"label": "element",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "media-importer",
"layer": {
"accesses": {
"downloads": "/storage/downloads"
},
"places": {
"library": "/storage/media/poc"
}
},
"has-layer": true
},
{
"module": "mesh-build-go",
"has-layer": true
},
{
"module": "mesh-build-image"
},
{
"module": "mesh-build-node",
"bindings": {
"npm-package-registry": {
"node": "novox",
"module": "gitea"
}
}
},
{
"module": "mesh-cli"
},
{
"module": "mesh-delivery-assigner"
},
{
"module": "mesh-files"
},
{
"module": "mesh-host",
"has-layer": true
},
{
"module": "mesh-provisioner-client"
},
{
"module": "mesh-reads"
},
{
"module": "mesh-wireguard"
},
{
"module": "mosquitto",
"layer": {
"endpoints": {
"mqtt": {
"port": 1883,
"reach": "public"
},
"mqtt-websockets": {
"port": 8081,
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "mssql",
"layer": {
"endpoints": {
"database": {
"port": 4848,
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "n8n",
"ports": {
"5678": 20025
},
"bindings": {
"postgres-database": {
"node": "ace",
"module": "postgres"
}
},
"layer": {
"accesses": {
"media": "/storage/media"
},
"endpoints": {
"web": {
"label": "n8n",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "netcheck"
},
{
"module": "networkmanager"
},
{
"module": "nfs-server",
"has-layer": true
},
{
"module": "nftables"
},
{
"module": "node-env"
},
{
"module": "node-tools"
},
{
"module": "nodejs"
},
{
"module": "nodered",
"ports": {
"1880": 20006
},
"bindings": {
"mqtt-topic": {
"node": "ace",
"module": "mosquitto"
}
},
"layer": {
"endpoints": {
"web": {
"label": "nodered",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "nzbgeek"
},
{
"module": "nzbget",
"ports": {
"6789": 20017
},
"has-mesh-wide": true,
"layer": {
"accesses": {
"downloads": "/storage/downloads"
},
"endpoints": {
"web": {
"label": "nzbget",
"reach": "internal"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/nzbget/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"max-download-speed": 10,
"options": {
"UMask": "0000"
},
"pgid": 2000,
"puid": 1001,
"username": "nzbget"
}
},
{
"module": "ombi",
"ports": {
"3579": 20024
},
"has-mesh-wide": true,
"layer": {
"endpoints": {
"web": {
"label": "ombi",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/ombi/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"pgid": 2000,
"puid": 1001
}
},
{
"module": "pacman",
"has-layer": true
},
{
"module": "plex",
"has-mesh-wide": true,
"layer": {
"accesses": {
"anime": "/storage/media/anime",
"audiobooks": "/storage/media/audiobooks",
"formula-1": "/storage/media/formula-1",
"live-shows": "/storage/media/live-shows",
"movies": "/storage/media/movies",
"music": "/storage/media/music",
"series": "/storage/media/series",
"sport-games": "/storage/media/sport-games"
},
"endpoints": {
"gdm-1": {
"reach": "public"
},
"gdm-2": {
"reach": "public"
},
"gdm-3": {
"reach": "public"
},
"gdm-4": {
"reach": "public"
},
"stream": {
"label": "plex"
}
},
"expose": {
"32400": "anywhere"
},
"places": {
"config": {
"owner": "1000:1000",
"path": "/mnt/plex/config"
},
"data": {
"owner": "1000:1000",
"path": "/mnt/plex/data"
},
"previews": {
"owner": "1000:1000",
"path": "/storage/plex-media"
},
"transcode": {
"owner": "1000:1000",
"path": "/mnt/plex/temp"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"pgid": 1000,
"puid": 1000
}
},
{
"module": "postgres",
"layer": {
"endpoints": {
"database": {
"port": 5434,
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "power",
"has-mesh-wide": true,
"has-layer": true
},
{
"module": "powerlevel10k"
},
{
"module": "qbittorrent",
"has-mesh-wide": true,
"layer": {
"accesses": {
"downloads": "/storage/downloads"
},
"endpoints": {
"peers": {
"reach": "public"
},
"peers-udp": {
"reach": "public"
},
"web": {
"label": "tor",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/qbittorrent/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"max-download-speed": 10,
"pgid": 2000,
"puid": 1001,
"username": "admin"
}
},
{
"module": "radarr",
"ports": {
"7878": 20019
},
"has-mesh-wide": true,
"layer": {
"accesses": {
"downloads": "/storage/downloads",
"movies": "/storage/media/movies"
},
"endpoints": {
"web": {
"label": "movies",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/radarr/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"downloads": {
"jackett-api": {
"adopt-hosts": [
"jackett"
]
},
"nzbget-api": {
"name": "NZBGet"
},
"qbittorrent-api": {
"name": "qBitTorrent"
}
},
"pgid": 2000,
"puid": 1001
}
},
{
"module": "redis",
"ports": {
"6379": 20003
},
"bindings": {
"secret": {
"node": "novox",
"module": "mesh-vault"
}
},
"layer": {
"endpoints": {
"cache": {
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "restic",
"layer": {
"places": {
"repository": "/storage/restic"
}
},
"has-layer": true
},
{
"module": "route-proxy"
},
{
"module": "searxng",
"ports": {
"8080": 20000
},
"layer": {
"endpoints": {
"web": {
"label": "searxng",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "snake",
"ports": {
"80": 20015
},
"layer": {
"endpoints": {
"web": {
"label": "snake",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "sonarr",
"ports": {
"8989": 20018
},
"has-mesh-wide": true,
"layer": {
"accesses": {
"anime": "/storage/media/anime",
"downloads": "/storage/downloads",
"series": "/storage/media/series"
},
"endpoints": {
"web": {
"label": "series",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/sonarr/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"downloads": {
"jackett-api": {
"adopt-hosts": [
"jackett"
]
},
"nzbget-api": {
"name": "NZBGet"
},
"qbittorrent-api": {
"name": "qBitTorrent"
}
},
"pgid": 2000,
"puid": 1001
}
},
{
"module": "ssh-client"
},
{
"module": "sshd"
},
{
"module": "sudo"
},
{
"module": "supabase",
"ports": {
"8000": 20010
},
"layer": {
"endpoints": {
"api": {
"label": "supabase",
"reach": "public"
},
"pooler-session": {
"port": 5433,
"reach": "internal"
},
"pooler-transaction": {
"port": 6543,
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "systemd"
},
{
"module": "tautulli",
"ports": {
"8181": 20023
},
"has-mesh-wide": true,
"layer": {
"endpoints": {
"web": {
"label": "tautulli",
"reach": "public"
}
},
"places": {
"config": {
"owner": "1001:2000",
"path": "/var/lib/tautulli/config"
}
}
},
"has-layer": true,
"mesh-wide-values": {
"pgid": 1000,
"puid": 1000
},
"values": {
"pgid": 2000,
"puid": 1001
}
},
{
"module": "time-sync"
},
{
"module": "txt-game",
"ports": {
"3000": 20001
},
"bindings": {
"postgres-database": {
"node": "ace",
"module": "postgres"
}
},
"layer": {
"endpoints": {
"web": {
"label": "txt",
"reach": "public"
}
}
},
"has-layer": true
},
{
"module": "unifi",
"layer": {
"endpoints": {
"discovery": {
"port": 10001,
"reach": "public"
},
"discovery-l2": {
"port": 1902,
"reach": "internal"
},
"inform": {
"port": 8080,
"reach": "public"
},
"portal": {
"port": 8880,
"reach": "internal"
},
"portal-tls": {
"port": 8843,
"reach": "internal"
},
"speedtest": {
"port": 6789,
"reach": "internal"
},
"stun": {
"port": 3478,
"reach": "public"
},
"syslog": {
"port": 5514,
"reach": "internal"
},
"web": {
"label": "unifi",
"port": 8443,
"reach": "internal"
}
}
},
"has-layer": true
},
{
"module": "youtube",
"layer": {
"accesses": {
"downloads": "/storage/downloads"
},
"places": {
"downloads": "/storage/downloads/youtube"
}
},
"has-layer": true
},
{
"module": "zsh"
},
{
"module": "zsh-autosuggestions"
},
{
"module": "zsh-syntax-highlighting"
}
],
"pins": {
"postgres-database": {
"node": "ace",
"module": "postgres"
},
"wildcard-resolution": {
"node": "novox",
"module": "dnsmasq"
}
},
"holds": [
{
"claim": "mesh-dns-resolver",
"scope": "mesh",
"module": "dnsmasq",
"site": "home"
}
]
}