# Server Netcup-Server erreichbar per SSH-Key: - IP: 185.162.249.159 - Hostname: v2202605360184461552.supersrv.de - User: root - Befehl: `ssh root@185.162.249.159` - Key: ~/.ssh/id_ed25519 ## Laufende Dienste | Dienst | URL | Installationspfad | |--------|-----|--------------------| | Gitea | http://185.162.249.159:3000/ | /opt/gitea (binary, systemd user: git) | | Chatwoot | http://185.162.249.159:3001/ | /opt/chatwoot (docker compose) | | Open WebUI | http://185.162.249.159:3002/ | /opt/openwebui (docker compose) | | Ollama | localhost:11434 | systemd service, user: ollama | | SearchTool | https://search.datenhimmel.work | /opt/search-tool (docker compose) | ## OpenCode API-Zugang - **Base URL**: `http://185.162.249.159:3002/ollama/v1` (OpenWebUI Ollama-Proxy) - **API Key**: sk-ce343adf68855a8df4c991dde4d4e2b27c61d883915fb6db - Direkter Ollama-Zugriff (Port 11434) per iptables nur für localhost + Docker ## OpenWebUI-Fix (v0.9.5) Bug: externe API-Calls crashen mit `'NoneType' object has no attribute 'startswith'`. Gepatchte Dateien (in docker-compose.yml als Volume gemountet): - `/opt/openwebui/middleware.py` — None-Checks vor `metadata['chat_id'].startswith()` - `/opt/openwebui/socket_main.py` — `(request_info.get('chat_id') or '').startswith()` ## SearchTool (Eigene Web-Suche) Selbst gehostete Such-API mit SearXNG (5 Engine: Google, Brave, DDG, Bing, Wikipedia) + Playwright-Fallback für JS-Seiten + Redis-Cache + Tor-Proxy (optional). - **URL:** https://search.datenhimmel.work - **API Key:** 375f7a6d3fa09c45a76df8d497ca14c9aafc60ee931fc17fdb7e602d5074589b - **Pfad:** /opt/search-tool (docker compose) - **Repo:** git@185.162.249.159:danielkrause/search-tool.git - **Endpoints:** POST /search (Web-Suche), POST /extract (Content-Extraction), GET /health - **Hermes-Integration:** Plugin in /home/hermes/hermes-agent/plugins/web/searchtool/ — web.search_backend: searchtool ```bash # Suche curl -X POST https://search.datenhimmel.work/search \ -H "Authorization: Bearer 375f7a6d3fa09..." \ -H "Content-Type: application/json" \ -d '{"q": "Suchbegriff", "include_content": true}' # Steuern ssh root@185.162.249.159 'cd /opt/search-tool && docker compose up -d' ``` ## Docker Alle Docker-Dienste in /opt// mit docker compose steuern: - `docker compose pull && docker compose up -d` zum Updaten - Volumes bleiben bei Updates erhalten ## Hermes Agent (Server) Läuft als systemd-Service auf dem `hermes` User. Vollständig isoliert, kein sudo. - **Pfad:** /home/hermes/hermes-agent (git clone) - **Config:** /home/hermes/.hermes/config.yaml + .env - **Service:** `systemctl start/stop/restart hermes-gateway` - **Gateway-Log:** journalctl -u hermes-gateway -f - **Agent-Log:** /home/hermes/.hermes/logs/agent.log ### Hermes warten ```bash # Service steuern ssh root@185.162.249.159 systemctl stop hermes-gateway # Stoppen ssh root@185.162.249.159 systemctl start hermes-gateway # Starten ssh root@185.162.249.159 systemctl status hermes-gateway # Status # Update via pip ssh root@185.162.249.159 'su - hermes -c "/home/hermes/venv/bin/pip install --upgrade -e /home/hermes/hermes-agent"' # Config editieren ssh hermes@185.162.249.159 'nano /home/hermes/.hermes/.env' ssh hermes@185.162.249.159 '/home/hermes/venv/bin/hermes config edit' ``` ### Sicherheitskonzept - Hermes hat nur einen SSH-Key (dein Laptop-Key) - Kein sudo-Zugriff (via sudoers blockiert) - Keine outbound-Ports zu anderen Diensten (systemd hardening) - PrivateTemp, ProtectSystem=strict, keine Capabilities - Keine Messaging-Plattformen (Telegram/Discord/Slack deaktiviert) - API-Key geschützt in .env (chmod 600) - Ollama Cloud Auth via SSH-Key (~hermes/.ollama/id_ed25519, Kopie von ollama user) ## Ollama Cloud-Modelle Authentifiziert via SSH-Key (~ollama/.ollama/id_ed25519). Modelle werden per `ollama pull :cloud` bezogen. ## Hermes Agent (Server) Läuft als systemd-Service auf dem `hermes` User. Vollständig isoliert, kein sudo. - **Pfad:** /home/hermes/hermes-agent (git clone) - **Config:** /home/hermes/.hermes/config.yaml + .env - **Service:** `systemctl start/stop/restart hermes-gateway` - **Gateway-Log:** journalctl -u hermes-gateway -f - **Agent-Log:** /home/hermes/.hermes/logs/agent.log ### Hermes warten ```bash # Service steuern ssh root@185.162.249.159 systemctl stop hermes-gateway # Stoppen ssh root@185.162.249.159 systemctl start hermes-gateway # Starten ssh root@185.162.249.159 systemctl status hermes-gateway # Status # Update via pip ssh root@185.162.249.159 'su - hermes -c "/home/hermes/venv/bin/pip install --upgrade -e /home/hermes/hermes-agent"' # Config editieren ssh hermes@185.162.249.159 'nano /home/hermes/.hermes/.env' ssh hermes@185.162.249.159 '/home/hermes/venv/bin/hermes config edit' ``` ### Sicherheitskonzept - Hermes hat nur einen SSH-Key (dein Laptop-Key) - Kein sudo-Zugriff (via sudoers blockiert) - Keine outbound-Ports zu anderen Diensten (systemd hardening) - PrivateTemp, ProtectSystem=strict, keine Capabilities - Keine Messaging-Plattformen (Telegram/Discord/Slack deaktiviert) - API-Key geschützt in .env (chmod 600) - Ollama Cloud Auth via SSH-Key (~hermes/.ollama/id_ed25519, Kopie von ollama user) ## Server-User - stephan, steffen (Passwort-Login) - git (Gitea system user) - ollama (Ollama system user) - hermes (Hermes Agent SSH sandbox, Workspace: /home/hermes/workspace)