diff --git a/deploy/README.md b/deploy/README.md index 5422260..e252038 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -21,6 +21,19 @@ Topologie: `https://va.linix.de` → nginx@YunoHost (TLS, SSO) → über LAN → > **direkte Quell-IP** (= der Proxy). Würde uvicorn den Client aus > `X-Forwarded-For` überschreiben, schlüge der Proxy-IP-Check fehl. +**Dauerhaft laufen lassen (systemd-User-Dienst, ohne root):** Vorlage +`deploy/voice-assistant.user.service`. Die App liest `.env` aus dem WorkingDirectory. +```bash +cp deploy/voice-assistant.user.service ~/.config/systemd/user/voice-assistant.service +loginctl enable-linger "$USER" # sudo -> ueberlebt Logout/Reboot +systemctl --user daemon-reload +systemctl --user enable --now voice-assistant +systemctl --user status voice-assistant +journalctl --user -u voice-assistant -f # Logs +``` +> Der llama.cpp-Container `va_llm` läuft separat via Docker (`restart unless-stopped`) +> und kommt nach einem Reboot von selbst hoch. + ## 2. Drei Sicherheits-Pflichten 1. **Bind:** Gateway nur an die LAN-IP (Schritt 1). 2. **Firewall:** Port 8003 der GPU-Box **nur** von der linix.de-IP erlauben, z. B.: diff --git a/deploy/voice-assistant.user.service b/deploy/voice-assistant.user.service new file mode 100644 index 0000000..2fab452 --- /dev/null +++ b/deploy/voice-assistant.user.service @@ -0,0 +1,27 @@ +# systemd-User-Service (laeuft ohne root, ueberlebt Logout/Reboot mit linger). +# +# Installation: +# cp deploy/voice-assistant.user.service ~/.config/systemd/user/voice-assistant.service +# # Pfade unten ggf. anpassen +# loginctl enable-linger "$USER" # sudo noetig -> ueberlebt Logout/Reboot +# systemctl --user daemon-reload +# systemctl --user enable --now voice-assistant +# systemctl --user status voice-assistant +# +# Die App liest .env aus dem WorkingDirectory selbst (pydantic-settings) -> kein +# EnvironmentFile noetig. Der llama.cpp-Container (va_llm) laeuft separat via Docker +# (restart unless-stopped); lokale Modelle werden beim Start vorgeladen (Warm-up). + +[Unit] +Description=Voice Assistant Gateway (user service) +After=network.target + +[Service] +Type=simple +WorkingDirectory=/home/dschlueter/my_voice_assistant_v2/voice-assistant-scaffold +ExecStart=/home/dschlueter/my_voice_assistant_v2/voice-assistant-scaffold/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8003 +Restart=always +RestartSec=2 + +[Install] +WantedBy=default.target