fix(admin): Phase 0 — Log & Restart reparieren, Status auf Wahrheit

Wurzel-Ursache: Dienst läuft als System-Dienst, Code nutzte aber
systemctl/journalctl --user → Log leer, Restart wirkungslos.

- Log-WS (admin.py): --user → System-journalctl. Erfordert voice in
  Gruppe systemd-journal (siehe DEPLOYMENT.md 2.7.1).
- Restart (admin_llm.py): --user → sudo -n systemctl restart über eng
  begrenzte sudoers-Regel; is-active ebenfalls auf System-Dienst.
- Status (app.js): irrelevante Ollama/llama.cpp-Karte + Backend-Wechsel
  entfernt; zeigt jetzt echtes aktives LLM-Modell (aus Runtime-Config);
  Neustart in eigener "Wartung"-Karte (zieht in Phase 3 nach Konfiguration).
- DEPLOYMENT.md 2.7.1: sudoers-Regel + journal-Gruppe dokumentiert.

Live verifiziert: Log lesbar, Restart ohne Passwort, /health nach 3s zurück.
Tests: 214 passed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-25 02:27:18 +02:00
commit f3f9151894
4 changed files with 58 additions and 90 deletions

View file

@ -932,6 +932,32 @@ sudo systemctl daemon-reload
sudo systemctl enable --now voice-assistant
```
#### 2.7.1 Admin-Rechte: Log lesen & Gateway neu starten
Der Dienst läuft als **System**-Dienst unter dem User `voice`. Damit das Admin-Panel
(a) den Live-Log anzeigen und (b) das Gateway neu starten kann, braucht `voice` zwei
eng begrenzte Rechte. **Ohne diese beiden Schritte bleiben der Log-Tab leer und der
Neustart-Button wirkungslos.**
```bash
# (a) Log lesen: voice darf das System-Journal lesen
sudo usermod -aG systemd-journal voice
# (b) Neustart: voice darf AUSSCHLIESSLICH den eigenen Dienst neu starten
sudo tee /etc/sudoers.d/voice-assistant > /dev/null <<'SUDO'
# Erlaubt dem voice-User ausschließlich den Neustart des eigenen Dienstes
# (für den "Gateway neu starten"-Button im Admin-Panel). Sonst nichts.
voice ALL=(root) NOPASSWD: /usr/bin/systemctl restart voice-assistant.service
SUDO
sudo chmod 0440 /etc/sudoers.d/voice-assistant
sudo visudo -cf /etc/sudoers.d/voice-assistant # validieren
# Dienst neu starten, damit der Prozess die neue Gruppe übernimmt
sudo systemctl restart voice-assistant
```
Rückgängig: `sudo gpasswd -d voice systemd-journal` bzw. `sudo rm /etc/sudoers.d/voice-assistant`.
### 2.8 nginx-Konfiguration `/etc/nginx/sites-available/voice.jamulix.de`
**Wichtig:** `X-Forwarded-For` muss leer gesetzt werden (`""`), da uvicorn