Betrieb
Voraussetzungen
Abschnitt betitelt âVoraussetzungenâ-
Linux-Host x86_64 mit Docker Engine und Compose v2. Andere Plattformen sind nicht getestet; openWakeWord/tflite und die Images sind auf linux/amd64 gebaut.
-
Gemessener Bedarf auf dem Entwicklungsrechner (8 Kerne, 32 GB RAM), mit zwei Kameras, Vision mit 2 fps auf einer Kamera und allen lokalen Modellen geladen:
Container RAM CPU im Leerlauf core ~1,5 GB ~20 % eines Kerns (Vision + Audio-Pipeline) postgres ~60 MB < 1 % go2rtc ~20 MB ~2 % sandbox ~75 MB (Limit 1 GB) < 1 % YOLOX braucht auf dieser CPU ca. 320 ms pro analysiertem Bild; es lÀuft nur bei Bewegung bzw. alle 20 s. Eine GPU wird nicht benötigt.
-
Plattenplatz: Core-Image ca. 2,7 GB (inkl. aller Modelle), Sandbox ca. 220 MB, dazu die Datenbank.
-
Netzwerk: Der Core-Container muss Kameras im LAN erreichen (Netz
media, normales Bridge-Netz mit NAT). FĂŒr Multicast-Discovery (WS-Discovery, mDNS) ist ein Bridge-Netz ungĂŒnstig; JuStAI sucht deshalb per Unicast in freigegebenen Bereichen (DEVICES.md).
Installation
Abschnitt betitelt âInstallationâAusfĂŒhrliche Anleitung fĂŒr Einsteiger (Docker installieren, API-Key, erste GerĂ€te):
INSTALLATION.md. Automatisch: scripts/install.sh (prĂŒft
Plattform und Docker, legt .env mit LAN-Adresse, Netzbereich und freien Ports an,
startet und wartet auf /api/health; erneuter Aufruf behÀlt .env und baut neu).
Von Hand:
git clone https://github.com/naxeu/justai.git justai && cd justaicp .env.example .env # optional: Port, Admin-Passwort, Google-API-Key, Netzbereichedocker compose up -d --builddocker compose exec core cat /data/initial_admin_password.txtBeim ersten Start:
secrets-initerzeugt DB-Passwort, Master-Key und Sandbox-Token im Volumesecrets.- PostgreSQL startet; der Core migriert das Schema (Alembic) automatisch.
- Mitgelieferte Plugins werden registriert und mit
default_enabledaktiviert. - Ohne Benutzer wird
adminmit zufÀlligem Passwort angelegt.
Konfiguration
Abschnitt betitelt âKonfigurationâBootstrap-Werte als Umgebungsvariablen (.env, PrĂ€fix JUSTAI_, vollstĂ€ndig in
backend/src/justai/config.py). Alles andere (RÀume, GerÀte, KI, Plugins,
Aufbewahrung) wird in der Admin-UI gepflegt und liegt in der Datenbank.
| Variable | Standard | |
|---|---|---|
JUSTAI_HTTP_PORT |
8080 | Port auf dem Host |
JUSTAI_HTTPS_PORT |
8443 | HTTPS-Port auf dem Host (GerÀte-App); im Container lauscht der Core immer auf 8443 |
JUSTAI_TLS_ENABLED |
true | HTTPS mit lokaler Zertifizierungsstelle |
JUSTAI_TLS_NAMES |
â | zusĂ€tzliche Namen/Adressen fĂŒrs Zertifikat, z. B. ["192.168.0.10","justai.fritz.box"] (auch in der UI ergĂ€nzbar) |
JUSTAI_PUBLIC_URL |
http://localhost:8080 | bei https:// werden Cookies Secure |
JUSTAI_ADMIN_USERNAME / JUSTAI_ADMIN_PASSWORD |
admin / zufÀllig | nur wenn noch kein Benutzer existiert |
GOOGLE_API_KEY |
â | aktiviert Gemini (auch in der UI eintragbar) |
JUSTAI_DISCOVERY_DEFAULT_CIDRS |
â | z. B. ["192.168.0.0/24"] |
JUSTAI_LOG_LEVEL |
INFO | |
JUSTAI_ENABLE_SIMULATED_DEVICES |
true | Simulationstreiber anbieten |
Lokale KI mit Ollama
Abschnitt betitelt âLokale KI mit OllamaâDas Plugin OpenAI-kompatibel hat bereits einen Endpoint ollama mit
http://host.docker.internal:11434/v1 vorkonfiguriert (der Core-Container kennt
host.docker.internal). Ollama auf dem Host starten und so konfigurieren, dass es
nicht nur auf 127.0.0.1 lauscht (OLLAMA_HOST=0.0.0.0). Weitere Server (llama.cpp,
vLLM) lassen sich dort als zusÀtzliche Endpoints mit locality: local eintragen. Danach unter KI-Provider die Rollen zuordnen,
z. B. conversation â Ollama-Modell, Gemini als Fallback, oder local_only.
git pulldocker compose up -d --buildMigrationen laufen beim Start. Plugin-Konfigurationen und gewĂ€hrte Rechte bleiben erhalten. Gekoppelte Displays laden die neue OberflĂ€che nach dem Wiederverbinden selbst (DISPLAYS.md). Vor gröĂeren Updates ein Backup anlegen.
Backup und Wiederherstellung
Abschnitt betitelt âBackup und Wiederherstellungâ./scripts/backup.sh [zielordner] # Standard: ./backups./scripts/restore.sh backups/justai5-backup-JJJJMMTT-HHMMSS.tar.gz- Das Backup enthĂ€lt den Datenbank-Dump (
pg_dump -Fc), die Volumesdata(Plugins, hochgeladene Dateien) undsecrets(Master-Key!),docker-compose.ymlund.env. Die Datei wird mit Rechten600geschrieben. Sie enthĂ€lt Secrets: verschlĂŒsselt und getrennt vom Server aufbewahren. - Die Wiederherstellung stoppt Core und Sandbox, ersetzt die Volumes und die Datenbank, ĂŒbernimmt das DB-Passwort aus dem Backup und startet alles neu.
- FĂŒr ein anderes Compose-Projekt:
COMPOSE_PROJECT_NAME=<name>.
Getestet (2026-10-15): Backup der laufenden Instanz, Wiederherstellung in ein getrenntes Compose-Projekt ohne LAN-Zugang. RĂ€ume, GerĂ€te, Endpoints, Plugins, Automationen und Personen waren identisch, die Admin-Anmeldung funktionierte, und alle verschlĂŒsselten Zugangsdaten lieĂen sich mit dem wiederhergestellten Master-Key entschlĂŒsseln.
Ăberwachung
Abschnitt betitelt âĂberwachungâGET /api/health(auch Docker-Healthcheck des Core)GET /api/system/status: Plugins, GerĂ€te, Medienserver, RessourcenGET /api/metrics: Prometheus-Format- Admin-UI â Dashboard und Diagnose (Events, Tasks, Bus-Queues, Audit-Log)
- Logs:
docker compose logs -f core(JSON;JUSTAI_LOG_JSON=falsefĂŒr Klartext)
Fehlersuche
Abschnitt betitelt âFehlersucheâ| Symptom | PrĂŒfen |
|---|---|
GerÀt offline |
Admin-UI â GerĂ€te: Warnungen des Treibers; IP geĂ€ndert? Akku-Kamera im Schlaf? |
| Kein Wakeword | Audio: Pegel und VAD bewegen sich? Wakeword-Score beim Sprechen? Endpoint aktiv? Zuhören pausiert (âhör wieder zuâ)? |
| Kein Ton von einer Kamera | âVerbinde die Kamera neuâ per Sprache oder GerĂ€te â Neu verbinden; âteste den Lautsprecherâ (AUDIO.md) |
| Ausgabe kommt nicht an | Log output denied mit Grund; mit JUSTAI_LOG_LEVEL=DEBUG jede Entscheidung als output routed mit Raum, GerĂ€t und BegrĂŒndung |
| Assistent hört sich selbst | Kalibrieren; Duplex auf half; output_latency_ms erhöhen |
| Cloud-KI antwortet nicht | Dashboard â KI-Provider: pausierte Modelle (orange) nach Fehlern/Quota; Fallback-Kette in KI-Provider |
| Display zeigt nichts | Display verbunden? Seite sichtbar (nicht im Hintergrund)? Fehlergrund im Tool-Protokoll |
Plugin failed |
Fehlertext in Plugins, Logs mit plugin=<id> |
| Antworten in falscher Sprache | KI-Provider: stehen alle gesprochenen Sprachen in languages? Bei lokalem Modell: spricht es die Sprache? |
| Selbst gebautes Plugin startet nicht | Tools: Status âEinstellungen fehlenâ â unter Plugins eintragen |
Deinstallation
Abschnitt betitelt âDeinstallationâdocker compose down # Container entfernen, Daten bleibendocker compose down -v # ACHTUNG: löscht auch Datenbank, Secrets und Daten