Add reproducible Docker and WireGuard host bootstrap
This commit is contained in:
+63
-76
@@ -1,97 +1,84 @@
|
||||
# Saubere Installation
|
||||
# Installation auf einem frischen Debian-Host
|
||||
|
||||
Diese Anleitung beschreibt den Neuaufbau. Sie löscht oder migriert keine Daten
|
||||
automatisch.
|
||||
Der automatisierte Weg ist `install.sh`. Das Skript ist für **Debian 12/13
|
||||
amd64** gedacht, installiert Docker CE, NVIDIA-Treiber/Container-Toolkit,
|
||||
WireGuard, baut llama.cpp reproduzierbar, lädt Modelle mit SHA256-Prüfung und
|
||||
startet den Stack.
|
||||
|
||||
## 1. Voraussetzungen
|
||||
## Vorher klären
|
||||
|
||||
- Debian 13 oder kompatibles Linux
|
||||
- NVIDIA-Treiber und funktionierendes `nvidia-smi`
|
||||
- Build-Werkzeuge, CMake, Git und CUDA Toolkit
|
||||
- Python 3.13 für Router/FLUX und Python 3.11 für XTTS
|
||||
- Docker plus Compose für Websuche
|
||||
- ausreichend freier Speicher; mindestens 15 Prozent auf `/`
|
||||
1. Die Universität muss den ausgehenden WireGuard-Tunnel erlauben.
|
||||
2. Heimnetz, Universitätsnetz und Docker-Netz dürfen sich nicht überschneiden.
|
||||
3. Der WireGuard-Heim-Peer braucht eine feste öffentliche Adresse oder DNS.
|
||||
4. Für KI-Internetzugang über zuhause: Forwarding und NAT am Heim-Peer.
|
||||
5. Das private Repository muss auf dem neuen Host lesbar sein.
|
||||
|
||||
## 2. Benutzer und Verzeichnisse
|
||||
## Debian installieren
|
||||
|
||||
Für produktive Dienste sollen eigene Systembenutzer verwendet werden. Der
|
||||
Router benötigt kontrollierte Berechtigung zum Neustart des llama.cpp-Dienstes;
|
||||
er sollte nicht dauerhaft als root laufen.
|
||||
- Debian 13 minimal, amd64, OpenSSH-Server, kein Desktop erforderlich.
|
||||
- Einen normalen Administrationsbenutzer mit sudo anlegen.
|
||||
- Optional bei physischem Fremdzugriff: LUKS-Verschlüsselung.
|
||||
- BIOS: Above 4G Decoding aktiv; beide GPUs sichtbar machen.
|
||||
|
||||
```text
|
||||
/opt/mike-ai/models
|
||||
/opt/mike-ai/ai-profile-router
|
||||
/etc/mike-ai
|
||||
## Konfiguration
|
||||
|
||||
```bash
|
||||
git clone <PRIVATE-REPOSITORY-URL> AI-Profile-Router
|
||||
cd AI-Profile-Router
|
||||
cp config/install.env.example config/install.env
|
||||
chmod 600 config/install.env
|
||||
editor config/install.env
|
||||
```
|
||||
|
||||
Geheimnisse werden mit Modus `0600` unter `/etc/mike-ai` abgelegt.
|
||||
Mindestens `ADMIN_USER`, `AI_BIND_ADDRESS`, `WG_ADDRESS`,
|
||||
`WG_PEER_PUBLIC_KEY`, `WG_ENDPOINT` und `WG_HOME_SUBNET` anpassen. Private
|
||||
WireGuard-, Router- und WebUI-Schlüssel werden lokal erzeugt und nur unter
|
||||
`/etc/mike-ai` gespeichert.
|
||||
|
||||
## 3. llama.cpp bauen
|
||||
## Installation starten
|
||||
|
||||
`platform/llama/build-llama-cpp.sh` checkt exakt den in
|
||||
`platform/llama/LLAMA_CPP_COMMIT` hinterlegten Commit aus. Vor einem Upgrade:
|
||||
|
||||
1. neuen Commit in einem separaten Build testen,
|
||||
2. Standardbenchmark ausführen,
|
||||
3. MCP-Grammatik und Tool Calls prüfen,
|
||||
4. Commitdatei erst danach aktualisieren.
|
||||
|
||||
## 4. Modelle bereitstellen
|
||||
|
||||
Modelldateien werden nicht in Git gespeichert. Die erwarteten Rollen und
|
||||
Zielpfade stehen in `platform/models/manifest.example.yaml`. Für die lokale
|
||||
Installation wird daraus eine nicht eingecheckte `manifest.local.yaml` mit
|
||||
SHA256-Prüfsummen erstellt.
|
||||
|
||||
## 5. llama.cpp-Dienst und Profile
|
||||
|
||||
Die Dateien aus `platform/systemd` und `platform/profiles` installieren. Danach:
|
||||
|
||||
```text
|
||||
llama-profile fast
|
||||
```bash
|
||||
sudo ./install.sh --config config/install.env
|
||||
```
|
||||
|
||||
Der Befehl muss Port 8080 erst freigeben, wenn Modell und Kontext korrekt sind.
|
||||
Wenn erstmals ein NVIDIA-Treiber installiert wurde, endet das Skript bewusst
|
||||
mit Code 20. Dann neu starten und denselben Befehl erneut ausführen. Das Skript
|
||||
ist auf Wiederholung ausgelegt und löscht keine vorhandenen Modelldateien.
|
||||
|
||||
## 6. MCP-Konfiguration
|
||||
Der Installer zeigt nur den öffentlichen WireGuard-Schlüssel. Diesen am
|
||||
Heim-Peer eintragen:
|
||||
|
||||
`platform/mcp/mcp-servers.example.json` nach `/etc/mike-ai/mcp-servers.json`
|
||||
kopieren und nur benötigte Server aktivieren. Zugangsdaten werden ausschließlich
|
||||
über lokale Environment-Dateien oder einen Secret Broker referenziert.
|
||||
```ini
|
||||
[Peer]
|
||||
PublicKey = <AUSGABE-DES-INSTALLERS>
|
||||
AllowedIPs = 10.77.0.2/32
|
||||
```
|
||||
|
||||
## 7. Router installieren
|
||||
Erst wenn der Tunnel steht, kann der Bootstrap fortfahren. API-Schlüssel
|
||||
werden nicht ausgegeben. Sie liegen root-only unter `/etc/mike-ai`.
|
||||
|
||||
Das bestehende `deploy/install.sh` installiert Router, Vision/Bild-Worker,
|
||||
Whisper und XTTS. Vor produktiver Verwendung müssen Modellpfade in der
|
||||
systemd-Datei gegen das lokale Manifest geprüft werden.
|
||||
## Ergebnis und Abnahme
|
||||
|
||||
Der Installer erzeugt `/etc/mike-ai/router-api-key` (0600), installiert das
|
||||
Profilregister und legt die atomare Zustandsablage an. Danach wird der Key
|
||||
einmal manuell in die Secret-Stores der erlaubten Clients übernommen. Er darf
|
||||
nicht im Terminal-Log, in Screenshots oder in Git dokumentiert werden.
|
||||
- Open WebUI: `http://<WIREGUARD-IP>:8080`
|
||||
- Router: `http://<WIREGUARD-IP>:8081`
|
||||
- llama.cpp-WebUI: absichtlich deaktiviert und nicht veröffentlicht
|
||||
|
||||
Der Router läuft aktuell als gehärteter Root-Dienst, weil er den
|
||||
llama.cpp-Systemdienst und temporäre GPU-Worker kontrolliert. Das ist eine
|
||||
bewusste Restabweichung. Ein späterer V3-Schritt soll den HTTP-Proxy als eigenen
|
||||
Benutzer ausführen und nur Profil-/Hotswap-Befehle an einen fest
|
||||
parametrisierten Root-Helper delegieren.
|
||||
```bash
|
||||
sudo systemctl status wg-quick@wg0 mike-ai-network-guard
|
||||
sudo docker compose --env-file /etc/mike-ai/stack.env \
|
||||
-f /opt/mike-ai/stack/compose.yaml ps
|
||||
curl http://<WIREGUARD-IP>:8081/health
|
||||
```
|
||||
|
||||
## 8. Websuche
|
||||
Zusätzlich prüfen: Uni-LAN sieht keine KI-Ports; Heimnetz erreicht beide;
|
||||
gestopptes WireGuard lässt KI-Container nicht ins Internet; jeder Profilwechsel
|
||||
startet exakt einen llama-Container; Text, Tool Call und Bild funktionieren.
|
||||
|
||||
TinySearch und SearXNG bleiben als einziges Docker-Teilsystem isoliert. Die
|
||||
Suchdienste sollen nur an localhost gebunden werden; nur der Web-MCP greift
|
||||
darauf zu.
|
||||
Die öffentliche Standardkonfiguration nutzt `UD-IQ4_XS`. Das bislang schnellste
|
||||
Referenzprofil nutzt dagegen die lokal vorhandene `IQ4-MIX`-Datei. Für eine
|
||||
bitgenaue Migration diese Datei anhand der in `CURRENT_REFERENCE.md`
|
||||
dokumentierten SHA256 in das Modellverzeichnis kopieren und die drei
|
||||
`*_MODEL_FILE`-Werte anpassen. Der Installer löscht vorhandene Modelle nicht.
|
||||
|
||||
## 9. Verifikation
|
||||
|
||||
`platform/checks/verify-platform.sh` kontrolliert:
|
||||
|
||||
- freien Plattenplatz,
|
||||
- GPU und VRAM,
|
||||
- aktive Dienste,
|
||||
- Ports,
|
||||
- Routermodelle und aktives Profil,
|
||||
- llama.cpp-Health,
|
||||
- unerwartete RX- und Benchmark-Dienste.
|
||||
|
||||
Erst nach erfolgreicher Prüfung werden Clients auf Port 8081 umgestellt.
|
||||
Open-WebUI-Daten liegen in einem Docker-Volume und müssen separat gesichert
|
||||
werden. Geheimnisse und Chatdaten gehören nie in Git.
|
||||
|
||||
Reference in New Issue
Block a user