Runtime config: dedicated mergeable file + restart-on so settings take effect (issue 009)

Give each settings-config runtime a mergeable config file with its own id
(runtime-config) — the previous "config" collided with modules that already own a
config directory, so ten runtimes mounted a config file no resource declared. Point
each runtime's restart-on at it, so a settings change recreates the runtime and it
re-reads the new value (needs the mesh-host container restart-on fix on
issue/009-container-restart-on). Proven: runtime-restart-on-config e2e green.

Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
This commit is contained in:
2026-09-04 23:40:07 +02:00
parent 9e156a5b9e
commit 550393b847
19 changed files with 165 additions and 28 deletions
+12 -1
View File
@@ -81,6 +81,14 @@
"/services/media/downloads:/downloads"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/bazarr/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -97,7 +105,10 @@
"MESH_BAZARR_URL": "http://127.0.0.1:6767",
"MESH_BAZARR_CONFIG_FILE": "/run/config/config.json",
"MESH_BAZARR_CONFIG_DIR": "/var/lib/bazarr/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -90,7 +90,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/gitea/config.json",
"mode": "0600",
@@ -111,7 +111,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_GITEA_URL": "http://127.0.0.1:3000",
"MESH_GITEA_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -62,7 +62,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/grafana/config.json",
"mode": "0600",
@@ -83,7 +83,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_GRAFANA_URL": "http://127.0.0.1:3000",
"MESH_GRAFANA_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -45,6 +45,14 @@
"/services/home-assistant/config:/config"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/home-assistant/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -61,7 +69,10 @@
"MESH_HOMEASSISTANT_URL": "http://127.0.0.1:8123",
"MESH_HOMEASSISTANT_CONFIG_FILE": "/run/config/config.json",
"MESH_HOMEASSISTANT_CONFIG_DIR": "/var/lib/home-assistant/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -55,7 +55,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/icecast/config.json",
"mode": "0600",
@@ -76,7 +76,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_ICECAST_URL": "http://127.0.0.1:8000",
"MESH_ICECAST_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -67,6 +67,14 @@
"/services/influxdb/config:/etc/influxdb2"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/influxdb/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -83,7 +91,10 @@
"MESH_INFLUXDB_URL": "http://127.0.0.1:8086",
"MESH_INFLUXDB_CONFIG_FILE": "/run/config/config.json",
"MESH_INFLUXDB_CONFIG_DIR": "/var/lib/influxdb/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -43,6 +43,14 @@
"/services/jackett/config:/config"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/jackett/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -59,7 +67,10 @@
"MESH_JACKETT_URL": "http://127.0.0.1:9117",
"MESH_JACKETT_CONFIG_FILE": "/run/config/config.json",
"MESH_JACKETT_CONFIG_DIR": "/var/lib/jackett/config"
}
},
"restart-on": [
"runtime-config"
]
}
],
"own-secrets": {
+5 -2
View File
@@ -93,7 +93,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/keycloak/config.json",
"mode": "0600",
@@ -114,7 +114,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_KEYCLOAK_URL": "http://127.0.0.1:8080",
"MESH_KEYCLOAK_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -284,7 +284,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/mailu/config.json",
"mode": "0600",
@@ -306,7 +306,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_MAILU_URL": "http://127.0.0.1:80",
"MESH_MAILU_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -83,7 +83,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/nextcloud/config.json",
"mode": "0600",
@@ -105,7 +105,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_NEXTCLOUD_URL": "http://127.0.0.1:80",
"MESH_NEXTCLOUD_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -48,7 +48,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/nodered/config.json",
"mode": "0600",
@@ -69,7 +69,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_NODERED_URL": "http://127.0.0.1:1880",
"MESH_NODERED_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -59,6 +59,14 @@
"/services/media/downloads:/downloads"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/nzbget/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -75,7 +83,10 @@
"MESH_NZBGET_URL": "http://127.0.0.1:6789",
"MESH_NZBGET_CONFIG_FILE": "/run/config/config.json",
"MESH_NZBGET_CONFIG_DIR": "/var/lib/nzbget/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -50,6 +50,14 @@
"/services/ombi/config:/config"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/ombi/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -66,7 +74,10 @@
"MESH_OMBI_URL": "http://127.0.0.1:3579",
"MESH_OMBI_CONFIG_FILE": "/run/config/config.json",
"MESH_OMBI_CONFIG_DIR": "/var/lib/ombi/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -48,6 +48,14 @@
"/etc/photos/store.secret:/etc/photos/store.secret:ro"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/photos/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -62,7 +70,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_PHOTOS_URL": "http://127.0.0.1:2283",
"MESH_PHOTOS_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
],
"capabilities": [
+5 -2
View File
@@ -39,7 +39,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/portainer/config.json",
"mode": "0600",
@@ -60,7 +60,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_PORTAINER_URL": "https://127.0.0.1:9443",
"MESH_PORTAINER_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
],
"own-secrets": {
+12 -1
View File
@@ -59,6 +59,14 @@
"/services/media/downloads:/downloads"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/qbittorrent/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -75,7 +83,10 @@
"MESH_QBITTORRENT_URL": "http://127.0.0.1:8080",
"MESH_QBITTORRENT_CONFIG_FILE": "/run/config/config.json",
"MESH_QBITTORRENT_CONFIG_DIR": "/var/lib/qbittorrent/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+5 -2
View File
@@ -73,7 +73,7 @@
]
},
{
"id": "config",
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/searxng/config.json",
"mode": "0600",
@@ -94,7 +94,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_SEARXNG_URL": "http://127.0.0.1:8080",
"MESH_SEARXNG_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -49,6 +49,14 @@
"/services/tautulli/config:/config"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/tautulli/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -65,7 +73,10 @@
"MESH_TAUTULLI_URL": "http://127.0.0.1:8181",
"MESH_TAUTULLI_CONFIG_FILE": "/run/config/config.json",
"MESH_TAUTULLI_CONFIG_DIR": "/var/lib/tautulli/config"
}
},
"restart-on": [
"runtime-config"
]
}
]
}
+12 -1
View File
@@ -59,6 +59,14 @@
"/services/verdaccio/conf:/verdaccio/conf"
]
},
{
"id": "runtime-config",
"type": "file",
"path": "/var/lib/mesh/verdaccio/config.json",
"mode": "0600",
"content": "{}\n",
"merge": "json"
},
{
"id": "runtime",
"type": "container",
@@ -73,7 +81,10 @@
"MESH_BROKER_FILE": "/run/secrets/broker",
"MESH_VERDACCIO_URL": "http://127.0.0.1:4873",
"MESH_VERDACCIO_CONFIG_FILE": "/run/config/config.json"
}
},
"restart-on": [
"runtime-config"
]
}
]
}