# πŸ€– JARVIS - KI-Assistent + Business Automation **VollstΓ€ndiges Docker-Stack fΓΌr JARVIS: KI-Backend + Datenbanken + Workflow-Automation** ## Architektur-Übersicht ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ JARVIS CORE (VPS) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ TRAEFIK (Reverse Proxy / Load Balancer) β”‚ β”‚ β”‚ β”‚ Ports: 80, 443, 8080 β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ WEB β”‚ API β”‚ n8n β”‚ β”‚ β”‚ β”‚ (Frontend) β”‚ (FastAPI) β”‚ (Automation) β”‚ β”‚ β”‚ β”‚ Port: 3000 β”‚ Port: 8000 β”‚ Port: 5678 β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ PostgreSQL β”‚ Redis β”‚ Milvus β”‚ β”‚ β”‚ β”‚ Port: 5432 β”‚ Port: 6379 β”‚ Port: 19530 β”‚ β”‚ β”‚ β”‚ (Structured) β”‚ (Cache) β”‚ (Vector DB) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ OLLAMA (Local LLM - Optional) β”‚ β”‚ β”‚ β”‚ Port: 11434 β”‚ β”‚ β”‚ β”‚ Alternative: Claude API (via Python) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## Schnelstart ### 1️⃣ SSH-Zugriff einrichten ```bash # Speichern der Private Key # Putty: key β†’ jarvis_ed25519.ppk # SSH: ssh -i jarvis_ed25519 jarvis-core@72.61.186.98 ``` ### 2️⃣ Setup-Script ausfΓΌhren ```bash ssh -i jarvis_ed25519 jarvis-core@72.61.186.98 # Download setup script curl -o setup-jarvis-complete.sh https://path/to/setup-jarvis-complete.sh chmod +x setup-jarvis-complete.sh # Run with domain ./setup-jarvis-complete.sh jarvis.mbo-tech-it.de ``` ### 3️⃣ Konfigurieren ```bash cd /home/jarvis-core/jarvis # Edit .env - WICHTIG: API-Keys eintragen! nano .env # Erforderlich: # - CLAUDE_API_KEY (fΓΌr Claude API) # - DB_PASSWORD (wird generiert, aber prΓΌfe es) # - Alle anderen Keys werden auto-generiert ``` ### 4️⃣ Docker-Stack starten ```bash # Starten docker-compose up -d # Logs prΓΌfen docker-compose logs -f # Status docker-compose ps ``` ## Services & Ports | Service | URL | Port | Beschreibung | |---------|-----|------|-------------| | **Web Dashboard** | http://localhost:3000 | 3000 | Frontend UI | | **API Backend** | http://localhost:8000 | 8000 | FastAPI Server | | **n8n Workflows** | http://localhost:5678 | 5678 | Automatisierung | | **Traefik Dashboard** | http://localhost:8080 | 8080 | Proxy Management | | **PostgreSQL** | localhost | 5432 | Hauptdatenbank | | **Redis** | localhost | 6379 | Cache/Sessions | | **Milvus** | localhost | 19530 | Vector Search | | **Ollama** | http://localhost:11434 | 11434 | Local LLM (opt.) | ## Datenbankstruktur ### PostgreSQL (jarvis) - **users** - Benutzer & Authentifizierung - **conversations** - Chat-Verlauf - **messages** - Einzelne Nachrichten - **tasks** - Automatisierungsaufgaben - **documents** - Knowledge Base - **audit_logs** - Audit Trail ### Milvus (Vector DB) - Semantic Search in Dokumenten - Embeddings fΓΌr RAG (Retrieval-Augmented Generation) ### Redis - Session Management - Caching - Job Queue (fΓΌr n8n) ## API Endpoints ### Chat ```bash POST /api/v1/chat { "conversation_id": 1, "message": "Deine Frage", "context": {} } GET /api/v1/conversations/{id} ``` ### Tasks ```bash POST /api/v1/tasks { "title": "Task Name", "description": "Beschreibung", "task_type": "automation", "priority": 1 } GET /api/v1/tasks?status=pending ``` ### Documents (Knowledge Base) ```bash POST /api/v1/documents { "title": "Dokument", "content": "...", "document_type": "manual" } GET /api/v1/documents?query=search+term ``` ### Workflows (n8n) ```bash POST /api/v1/workflows/trigger { "workflow_id": "workflow_name", "data": {} } ``` ## Umgebungsvariablen (.env) ```bash # Domain DOMAIN=jarvis.mbo-tech-it.de # Database DB_PASSWORD=SecurePassword123! # KI / LLM CLAUDE_API_KEY=sk-ant-... OLLAMA_MODEL=mistral # Security JWT_SECRET=random-secret-key API_KEY_ADMIN=admin-api-key # Logging LOG_LEVEL=info ``` ## HΓ€ufige Befehle ```bash cd /home/jarvis-core/jarvis # Alle Container starten docker-compose up -d # Spezifischen Service neu starten docker-compose restart jarvis-api # Logs ansehen docker-compose logs -f jarvis-api # In Container gehen docker-compose exec jarvis-api bash # Database mit psql verbinden docker-compose exec postgres psql -U jarvis -d jarvis # Alle Container stoppen docker-compose down # Mit Daten lΓΆschen (Vorsicht!) docker-compose down -v ``` ## Integration mit Claude API ### Python-Client Beispiel ```python import os import anthropic client = anthropic.Anthropic(api_key=os.getenv("CLAUDE_API_KEY")) message = client.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=1024, messages=[ {"role": "user", "content": "Deine Frage"} ] ) print(message.content[0].text) ``` ## n8n Workflows ### Beispiel-Automation: Kundenbericht generieren 1. Trigger: Zeitplan (tΓ€glich) 2. Node: PostgreSQL - Daten abrufen 3. Node: Claude API - Bericht generieren 4. Node: PDF generieren 5. Node: Email versenden ## Security Best Practices βœ… **Production Ready:** - [ ] HTTPS/SSL konfigurieren (Let's Encrypt) - [ ] Firewall-Regeln (nur erlaubte IPs) - [ ] Secrets in .env nicht in Git - [ ] RegelmÀßige DB-Backups - [ ] Monitoring & Alerts einrichten - [ ] Rate Limiting aktivieren - [ ] API-Keys rotieren ⚠️ **Aktuell (Test):** - HTTP nur lokal/intern - Standard-PasswΓΆrter (Γ„NDERN!) - Keine Authentifizierung erzwungen ## Troubleshooting ### Container startet nicht ```bash docker-compose logs jarvis-api # β†’ Fehlerlog prΓΌfen ``` ### Datenbank nicht erreichbar ```bash docker-compose exec postgres psql -U jarvis -d jarvis -c "SELECT 1" ``` ### Redis Cache Fehler ```bash docker-compose exec redis redis-cli ping # β†’ PONG = OK ``` ### Milvus Vector DB Fehler ```bash docker-compose exec milvus curl http://localhost:9091/healthz ``` ## Monitoring ```bash # System-Stats docker stats # Container Logs (real-time) docker-compose logs -f # Health Check curl http://localhost:8000/health curl http://localhost:8000/api/v1/admin/health/detailed ``` ## NΓ€chste Schritte 1. βœ… Docker-Stack deployed 2. ⏳ Claude API Integration (Python) 3. ⏳ Web-Frontend (React/Vue) 4. ⏳ n8n Workflows konfigurieren 5. ⏳ Knowledge Base aufbauen 6. ⏳ Production Deployment (SSL, Backups, etc.) ## Support & Dokumentation - [FastAPI Docs](http://localhost:8000/docs) - Swagger UI - [n8n Docs](https://docs.n8n.io) - [PostgreSQL Docs](https://www.postgresql.org/docs/) - [Milvus Docs](https://milvus.io/docs) - [Claude API Docs](https://docs.anthropic.com) --- πŸš€ **JARVIS ist bereit fΓΌr die KI-Integration!**