Make gateway-bound UIs reproducible

This commit is contained in:
Mikei386
2026-09-01 10:54:22 +02:00
parent 460a9f0207
commit 16ac177782
6 changed files with 42 additions and 8 deletions
+2 -1
View File
@@ -33,7 +33,8 @@ werden keine zweiten Instanzen dieser Dienste angelegt.
Portainer läuft als separater, optionaler Verwaltungscontainer
`mike-ai-portainer`, teilt den Netzwerk-Namespace des WireGuard-Gateways und
ist unter `https://192.168.1.212:9443` erreichbar. Seine Einstellungen liegen
im Docker-Volume `portainer_data`. Portainer beobachtet beziehungsweise
im Docker-Volume `portainer_data`, das vom Athena-Backup mitgesichert wird.
Portainer beobachtet beziehungsweise
verwaltet Docker, ist aber keine Abhängigkeit des Inferenz-Stacks.
## Standardbefehle
+22
View File
@@ -50,6 +50,11 @@ services:
- /tmp:size=16m,mode=1777
volumes:
- "${WIREGUARD_CONFIG_FILE:-/etc/mike-ai/wireguard/fritz-athena.conf}:/run/secrets/fritz-athena.conf:ro"
# Namespace-sharing services cannot publish ports themselves. The owner
# must keep these bindings so a gateway recreation cannot hide their UIs.
ports:
- "8099:8099"
- "9443:9443"
networks:
frontend:
ipv4_address: 172.30.10.254
@@ -750,6 +755,20 @@ services:
retries: 12
start_period: 10s
portainer:
image: ${PORTAINER_IMAGE:-portainer/portainer-ce@sha256:511f3f06c96fe3b993ebeaafde311c1959cae73a7ef825dba6397d51b450dffa}
container_name: mike-ai-portainer
restart: unless-stopped
network_mode: "service:wireguard-gateway"
command: [--no-setup-token]
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer-data:/data
depends_on:
wireguard-gateway:
condition: service_healthy
security_opt: ["no-new-privileges:true"]
backup:
image: ${BACKUP_IMAGE:-offen/docker-volume-backup@sha256:19102d8e59eb1d598cf8c647c2b21100abaadc5a1c808ac643fa612e323c3013}
container_name: mike-ai-backup
@@ -768,6 +787,7 @@ services:
- piper-data:/backup/volumes/piper-data:ro
- router-state:/backup/volumes/router-state:ro
- router-images:/backup/volumes/router-images:ro
- portainer-data:/backup/volumes/portainer-data:ro
security_opt: ["no-new-privileges:true"]
networks:
@@ -794,3 +814,5 @@ volumes:
piper-data:
router-state:
router-images:
portainer-data:
name: portainer_data
+3 -4
View File
@@ -15,10 +15,9 @@ Sie bleiben auf der Daten-SSD oder werden anhand der gepinnten Angaben in
`config/install.env.example` erneut geladen. Die Dashboard-Historie liegt
dauerhaft unter `/data/llama-dashboard`.
Der optionale Portainer-Container gehört nicht zum Athena-Kern. Seine lokale
Konfiguration liegt im Docker-Volume `portainer_data`; ohne dessen Sicherung
kann Portainer jederzeit neu angelegt und einmalig eingerichtet werden, ohne
Router, Modelle oder Dashboard-Daten zu verlieren.
Portainers lokale Konfiguration liegt im Docker-Volume `portainer_data` und
wird zusammen mit den übrigen nicht reproduzierbaren Volumes gesichert und
wiederhergestellt.
### Neuaufbau
+3 -1
View File
@@ -491,7 +491,9 @@ build_and_start() {
llama-fast llama-medium llama-large llama-ultra llama-uncensored
docker compose --env-file "$SECRETS_DIR/stack.env" --profile image create image-worker
docker compose --env-file "$SECRETS_DIR/stack.env" up -d --build \
wireguard-gateway xtts piper tts-gateway profile-controller router llama-dashboard backup
wireguard-gateway xtts piper tts-gateway profile-controller router llama-dashboard portainer backup
docker compose --env-file "$SECRETS_DIR/stack.env" up -d \
--no-deps --force-recreate llama-dashboard portainer
if [[ ${WIREGUARD_MODE:-container} == container ]]; then
systemctl restart mike-ai-container-vpn-guard.service
fi
+10 -1
View File
@@ -49,9 +49,18 @@ case "$command" in
[[ $# -eq 0 ]] || { echo "core akzeptiert keine weiteren Services" >&2; exit 2; }
run "$ROOT_DIR/platform/mcp/install-tools.sh"
run "${compose[@]}" up -d --build \
wireguard-gateway piper xtts tts-gateway profile-controller router llama-dashboard backup
wireguard-gateway piper xtts tts-gateway profile-controller router llama-dashboard portainer backup
# network_mode: service:wireguard-gateway stores the gateway container
# ID. Rebind namespace consumers after every gateway replacement.
run "${compose[@]}" up -d --no-deps --force-recreate llama-dashboard portainer
else
run "${compose[@]}" up -d --build --no-deps "$@"
for service in "$@"; do
if [[ $service == wireguard-gateway ]]; then
run "${compose[@]}" up -d --no-deps --force-recreate llama-dashboard portainer
break
fi
done
fi
;;
purge-legacy)
+2 -1
View File
@@ -60,7 +60,7 @@ backup_root=$work/backup
[[ -d $backup_root/volumes ]] || die "Backup enthält keine Docker-Volumes."
# Stop only users of the restored volumes. WireGuard, SSH and networking stay up.
for container in mike-ai-router mike-ai-profile-controller mike-ai-piper; do
for container in mike-ai-router mike-ai-profile-controller mike-ai-piper mike-ai-portainer; do
if [[ $(docker inspect -f '{{.State.Running}}' "$container" 2>/dev/null || true) == true ]]; then
docker stop "$container" >/dev/null
fi
@@ -81,6 +81,7 @@ restore_volume() {
restore_volume mike-ai_piper-data "$backup_root/volumes/piper-data"
restore_volume mike-ai_router-state "$backup_root/volumes/router-state"
restore_volume mike-ai_router-images "$backup_root/volumes/router-images"
restore_volume portainer_data "$backup_root/volumes/portainer-data"
cd "$ROOT_DIR"
./manage.sh deploy core