Service-Port-Map
Nach außen ist nur ein einziger Port offen
Im AI-Stack belegt allein plantpulse-proxy (nginx) die Ports 80 / 443 des Hosts.
Die Chat-Oberfläche, die Verwaltungskonsole und sämtliche APIs laufen über diesen Proxy. Auch den HTTPS-Port der Verwaltungskonsole (Standard 5960) nimmt dieser Proxy entgegen — siehe unten.
AI Chat Web ist nur innerhalb des Containers erreichbar (expose: 8080). Nach außen gibt es nur den Proxy — der Expositionspunkt wird an einer einzigen Stelle gebündelt, und dort werden Firewall, Audit und TLS abgewickelt.
Die Aufteilung erfolgt über den Hostnamen
Der Proxy wählt das Backend anhand des Headers Host aus. Deshalb müssen die folgenden Namen im DNS auf die Proxy-IP zeigen, damit die jeweiligen Dienste erreichbar sind.
Die Backends entsprechen exakt den Containernamen — die Werte unten sind genau die Zeichenketten, die in set $upstream von nginx eingetragen werden, und dieselben Namen gelten auch für curl innerhalb des Containers.
| Host | Backend (Containername:Port) | Was |
|---|---|---|
| alle übrigen (Standard) | plantpulse-copilot-web:8080 | AI Chat Web — Chat-Oberfläche |
admin.* | plantpulse-admin-web:8080 | Verwaltungskonsole |
llm.* | plantpulse-litellm:4000 | LLM-Gateway (OpenAI-kompatibel) |
rag.* | plantpulse-rag-api:7115 | RAG-Such-API |
timeseries.* | plantpulse-timeseries-insight-api:8970 | Zeitreihen-Insights-API |
parser.* | plantpulse-document-understanding-api:7120 | Dokumenten-Parsing-API |
vision.* | plantpulse-vision-api:7130 | Vision-API |
Pfade des Standard-Hosts — beim Betrieb mit nur einer Domain
Damit keine weiteren Subdomains angelegt werden müssen, sind am Standard-Host (Chat-Oberfläche) zusätzlich die folgenden Pfade geöffnet. Mit einer Domain und einem Zertifikat erreichen Sie Gateway und MCP-Server.
| Pfad | Backend | Was |
|---|---|---|
/mcp/gateway/ | plantpulse-mcp-gateway-api:7160/mcp/ | MCP Gateway — die Adresse, mit der sich externe MCP-Clients verbinden (Gateway-Schlüssel ppgw_…). Die Verwaltungs-REST-API /api/v1 wird nicht geöffnet |
/llm/ | plantpulse-litellm:4000/ | LLM-Gateway (OpenAI-kompatibel) — base_url = "https://<호스트>/llm/v1" |
/mcp/rag/ | plantpulse-rag-api:7115/mcp/ | RAG-MCP-Server |
/mcp/timeseries/ | plantpulse-timeseries-insight-api:8970/mcp/ | Zeitreihen-Insights-MCP-Server |
/mcp/parser/ | plantpulse-document-understanding-api:7120/mcp/ | Dokumenten-Parsing-MCP-Server |
/mcp/vision/ | plantpulse-vision-api:7130/mcp/ | Vision-MCP-Server |
- Geben Sie den abschließenden Schrägstrich mit an. Fehlt er, wird automatisch auf
308umgeleitet (der Body bleibt erhalten). - Als MCP-Transport ist ausschließlich Streamable HTTP möglich.
/ssegibt es nicht. - Die Authentifizierung erfolgt im Backend, nicht im Proxy. Die vier MCP-Dienste antworten ohne
X-API-Key: <PI_INBOUND_API_KEY>(oder Bearer) mit401. Für/llm/wird der Master-Key oder ein virtueller Key des Gateways verwendet. - Der Metrik-Pfad
/metricsder einzelnen Backends ist kein neuer Port, sondern ein Pfad auf demselben Port, und liegt ebenfalls hinter dem Inbound-Key (Re-Release 2026.10) → Logs und Monitoring
/llm/ui nicht erreichbarDa das Pfadpräfix beim Weiterleiten entfernt wird, stimmen die Asset-Links der Verwaltungsoberfläche nicht mehr. Öffnen Sie die Verwaltungsoberfläche über den Host llm.* oder direkt über :4000/ui.
Diese Pfade sind unmittelbar unter dem im Internet veröffentlichten Namen erreichbar. Ist PI_INBOUND_API_KEY leer, stoppt die Prüfung vor dem Start den Stack — der Platzhalter CHANGE_ME_… besteht diese Prüfung jedoch. Prüfen Sie unmittelbar nach der Installation unbedingt mit bin/doctor.sh, dass keine Platzhalter übrig geblieben sind.
copliot ist der Repository-Name, der Container heißt copilotDas Repository heißt plantpulse-ai-copliot-web (der Tippfehler hat sich verfestigt), der Containername lautet jedoch plantpulse-copilot-web. Mit der Schreibweise des Repositorys findet docker logs nichts.
Der Proxy lauscht zwar auch auf 443, bei Deployments mit vorgelagertem Load Balancer oder Reverse Proxy wird TLS jedoch dort terminiert und der Proxy erhält Klartext. Wird er so konfiguriert, dass er die vorgelagerte Terminierung ignoriert, entstehen Redirect-Schleifen. Klären Sie zuerst, welche Variante vorliegt.
관리 콘솔은 포트로도 열립니다
Interne Benutzer, die sich per IP verbinden, haben keinen Hostnamen und können die Verwaltungskonsole daher auf Port 443 nicht auswählen. Deshalb gibt es ab 2026.10 zwei portbasierte Zugänge zur Verwaltungskonsole.
| Adresse | Entgegennehmende Seite | Key (Standardwert) |
|---|---|---|
http://<AI_SERVER_IP>:5959 | direkt zu plantpulse-admin-web:8080 (Klartext) | PI_ADMIN_WEB_PORT (5959) |
https://<AI_SERVER_IP>:5960 | Proxy terminiert TLS und leitet an plantpulse-admin-web:8080 weiter | PI_ADMIN_WEB_TLS_PORT (5960) |
- Beide sind offen. Der Klartext-Zugang wird nicht auf HTTPS umgeleitet.
- Das HTTPS-Zertifikat ist dasselbe wie bei 443 (das Zertifikat des Proxys). Die Konsole hält kein eigenes Zertifikat.
- Zum Ändern der Ports passen Sie die beiden obigen Keys in der Host-env (
/etc/kopens/plantpulse-ai.env) an und starten neu.
Ältere Versionen stellten die Verwaltungskonsole auf :9080 bereit. Ab 2026.10 sind es 5959 (HTTP) · 5960 (HTTPS), und da der Konsolen-Container als Non-Root-nginx läuft, hat sich der interne Port von 80 auf 8080 geändert. Passen Sie Lesezeichen und Firewall-Regeln entsprechend an.
Auch der Proxy läuft als Non-Root — die äußeren Ports bleiben, nur die inneren haben sich geändert
plantpulse-proxy aus 2026.10 läuft nicht als root, sondern mit uid 10001 und gid 0 und öffnet innerhalb des Containers keine Ports unter 1024. Die vom Host (außen) sichtbaren Ports haben sich nicht geändert.
| Host (außen) | Proxy innen | Was |
|---|---|---|
| 80 | 8080 | HTTP (Klartext) |
| 443 | 9443 | HTTPS — Namensrouting für Chat-Oberfläche, admin.* usw. |
PI_ADMIN_WEB_TLS_PORT (5960) | 8443 | Verwaltungskonsole HTTPS |
Firewall, vorgelagerter Load Balancer und DNS können weiterhin auf 80, 443 und 5960 verweisen. Da die inneren Ports gemeinsam im selben Release von Compose und Proxy-Image geändert werden, führt ein Rollback allein des Proxy-Images auf eine ältere Version zu abgelehnten Verbindungen — setzen Sie bei einem Rollback den gesamten Stack auf dieselbe Version.
Wurde das Zertifikats-Volume (pp-proxy-certs) noch zu root-Zeiten angelegt, gehört der Key root allein und der Non-Root-Proxy kann ihn nicht lesen. bin/up.sh, restart.sh und update.sh korrigieren die Eigentumsrechte einmalig vor dem Start →
Servicebetrieb
Direkt im LAN geöffnete Ports
Diese Ports werden ohne Umweg über den Proxy unmittelbar am Host veröffentlicht. Sie sind nicht an 127.0.0.1 gebunden, sondern auf allen Interfaces offen — sperren Sie sie per Firewall, damit sie von außerhalb des Firmennetzes nicht erreichbar sind.
| Port | Service | Warum offen |
|---|---|---|
| 80 / 443 | plantpulse-proxy | einziger Benutzerzugang |
| 4000 | LiteLLM | LLM-Gateway direkt (auch über llm.* erreichbar) |
| 7115 | RAG-API | für MCP-Clients (Claude Desktop o. Ä.) direkt |
| 8970 | Zeitreihen-Insights-API | für MCP-Clients direkt |
| 5959 | Verwaltungskonsole (plantpulse-admin-web) — HTTP | für Betreiber. Auch über admin.* erreichbar |
| 5960 | Verwaltungskonsole — HTTPS (entgegengenommen von plantpulse-proxy) | für Betreiber. Zertifikat identisch mit 443 |
| 7474 | Neo4j Browser | Verwaltungs-UI der Graph-DB (plantpulse-neo4j — RAG-Wissensgraph) |
| 7687 | Neo4j Bolt | Abfrageprotokoll der Graph-DB (dieselbe Instanz) |
Ab 2026.10 startet zusätzlich ein eigenes Neo4j für den Digital Thread (plantpulse-digital-thread-neo4j). Dieses veröffentlicht keine Ports — nur plantpulse-digital-thread-api verbindet sich innerhalb des Compose-Netzwerks. Die obigen Ports 7474 und 7687 gehören zum seit jeher vorhandenen plantpulse-neo4j (Wissensgraph von LightRAG) →
Digital Thread
:4000/ui ist die LiteLLM-Verwaltungsoberfläche, der Zugang erfolgt über PI_LITELLM_UI_USERNAME · PI_LITELLM_UI_PASSWORD (Standard admin / admin123!). Da sie im LAN offen ist, ändern Sie das Passwort beim Commissioning →
Initiales Passwort ändern
Nur bei aktiviertem Profil
Diese Dienste sind im Standardstart nicht enthalten und starten nur, wenn sie mit dem jeweiligen Compose-Profil hochgefahren werden.
| Port | Service | Profil |
|---|---|---|
| 5000 | lokale Image-Registry | registry |
LOCAL_REGISTRY_UI_PORT (Standard 5080) | Registry-Verwaltungs-UI | registry |
| (nicht veröffentlicht — innen 8000) | Mitschnitt-vLLM plantpulse-asr | media |
| (kein Netzwerk) | Mitschnitt-Audiobibliothek plantpulse-asr-audio — einmalig | media |
registry dient dazu, Images im Air-Gap-Netzwerk intern zu beziehen → Air-Gap-Installation.
media ist für Video- und Audiomitschnitte gedacht. Der Profilname wird nicht von Hand angegeben, sondern mit einer einzigen Zeile PI_MEDIA_ENABLED=true in der Host-env aktiviert — das Betriebsskript hängt das Profil anhand dieses Werts an → Video- und Audioerfassung
Arize Phoenix (Trace-UI · OTLP-Erfassung, 6006) startet standardmäßig — ein Profil muss dafür nicht aktiviert werden. Allerdings wird ab 2026.09 kein Host-Port mehr veröffentlicht. Phoenix hat keine Authentifizierung und speichert die Inhalte von Fragen und Antworten (einschließlich Anlagen-ID und Tag aus den Werkzeugargumenten). Die Statusprüfung der Verwaltungskonsole greift auf die containerinterne Adresse zu und ist daher nicht betroffen. Für die Diagnose können Sie den Port über „Diagnoseports" unten vorübergehend öffnen.
Die beim Umbau 2026-07 entfallenen Dienste Langflow (7860) und Jupyter (3500) wurden tatsächlich entfernt und lassen sich nicht reaktivieren.
Diagnoseports — PP_DEBUG_PORTS=1
Normalerweise geschlossene Ports lassen sich nur für die Diagnose wie früher öffnen (Overlay compose/docker-compose.debug.yml).
cd /opt/kopens/plantpulse-ai-docker
PP_DEBUG_PORTS=1 bin/compose-up.sh
| Port | Service |
|---|---|
| 9081 | Backend der Verwaltungskonsole (admin-api) |
| 8000 · 8003 · 8004 | vLLM Generierung · Embedding · Reranking |
| 8005 | Mitschnitt-vLLM (nur bei aktiviertem Profil media) |
| 5001 | docling |
| 8980 | Zeitreihen-Inferenzserver |
| 9400 | DCGM Exporter |
| 6333 | Qdrant |
| 6006 | Phoenix |
Starten Sie nach Abschluss der Diagnose ohne PP_DEBUG_PORTS neu, um sie wieder zu schließen.
Nur intern (nicht veröffentlicht)
Diese Dienste sind ausschließlich über den Servicenamen innerhalb des Compose-Netzwerks erreichbar. Dass vom Host aus ein Test mit nc -z keine Antwort liefert, ist normal.
| Service | interne Adresse (Containername:Port) | Rolle |
|---|---|---|
| AI Chat Web | plantpulse-copilot-web:8080 | Chat-Oberfläche (Standard-Backend des Proxys) |
| Backend der Verwaltungskonsole | plantpulse-admin-api | maßgebliche Instanz für die Authentifizierung. Wird von nginx in plantpulse-admin-web weitergeleitet |
| Dokumenten-Parsing-API | plantpulse-document-understanding-api:7120 | Backend von parser.* |
| Vision-API | plantpulse-vision-api:7130 | Backend von vision.* |
| LightRAG | plantpulse-lightrag:9621 | RAG-Engine. Dokumentenverwaltungs-WebUI (/webui) |
| Qdrant | plantpulse-qdrant:6333 | Vektor-DB |
| Docling | plantpulse-docling-serve:5001 | Dokumentenkonvertierung |
| vLLM (Generierung) | plantpulse-llm:8000 | lokale LLM-Inferenz |
| vLLM (Embedding) | plantpulse-emb:8000 | Embedding |
| vLLM (Reranking) | plantpulse-rerank:8000 | Reranking |
| Zeitreihen-Inferenz | plantpulse-timeseries-insight-server:8980 | Serving der Insight-Modelle |
| Mitschnitt-vLLM | plantpulse-asr:8000 | Sprache → Text. Startet nur beim Profil media |
| DCGM Exporter | plantpulse-dcgm:9400 | GPU-Metriken |
| Phoenix | plantpulse-phoenix:6006 | Trace-UI · OTLP-Erfassung (Standardstart, nicht veröffentlicht) |
| Digital-Thread-API | plantpulse-digital-thread-api:7140 | Konnektor-Register · Spiegel des Werksgraphen · thread_-Werkzeug für den Chat. Wird von Verwaltungskonsole und MCP Gateway aufgerufen |
| Digital-Thread-Neo4j | plantpulse-digital-thread-neo4j:7474 | Speicher für den Spiegel des Werksgraphen. Nur die Digital-Thread-API verbindet sich |
| Engineering-Berechnungs-API | plantpulse-engcalc-api:7150 | eng_-Werkzeug für den Chat (MCP /mcp/). Wird nur vom MCP Gateway aufgerufen |
| MCP Gateway | plantpulse-mcp-gateway-api:7160 | Eine einzige Adresse (/mcp/), die Plattform-, eingebaute und externe MCP-Server bündelt, plus Verwaltungs-REST (/api/v1). Wird von Copilot und Verwaltungskonsole aufgerufen. Speicher ist das Schema gw in der Plattform-PG pi (2026.10 Re-Release (2026-10-20)) |
plantpulse-mcp-server (50000) und plantpulse-ontology (8888) existieren nicht mehr als eigenständige Dienste. MCP- und Ontologie-Werkzeuge stellt das integrierte MCP von server-web der Platform bereit (/api/v5/mcp, Authentifizierung per api_key).
Von der Platform mitgenutzte Dienste
PostgreSQL (5432) · Aster TSDB (9042) · Redis/Valkey (6379) · RustFS (9000/9001) werden nicht vom AI-Stack gestartet. Genutzt wird gemeinsam die Installation der PlantPulse Platform. Firewall und Konten dieser Ports richten sich nach den Sicherheitseinstellungen der Platform.
Portstatus prüfen
Gesamtstatus prüfen
cd /opt/kopens/plantpulse-ai-docker/bin
./status.sh
health.sh prüft auch die Health-Endpunkte der einzelnen Dienste. Ein laufender Container und ein tatsächlich antwortender Dienst sind zweierlei — verwenden Sie bei der Störungsanalyse daher diese Variante.
Einzelne Ports prüfen
# 특정 포트 리스닝 확인
nc -z 127.0.0.1 <port> && echo "OK" || echo "DOWN"
# 포트 사용 프로세스 확인
ss -tlnp | grep <port>
In der Firewall zu öffnen
| Ziel | Zu öffnende Ports |
|---|---|
| alle Benutzer | 80 / 443 (Proxy) |
| Betreiber (Firmennetz) | 5959 · 5960 Verwaltungskonsole, 7474 Neo4j Browser |
| MCP-Clients (Firmennetz) | 7115 RAG, 8970 TimeSeries |
Der Installer (install.sh) öffnet die Firewall und meldet anschließend als Warnung, welche dieser Ports bereits von Prozessen außerhalb dieses Stacks belegt sind — bleibt das unbeachtet, startet das erste bin/up.sh den Stack nur halb und bricht mit «address already in use» ab. Geben Sie den betreffenden Port frei oder ändern Sie die drei verschiebbaren Keys (PI_LITELLM_PORT · PI_ADMIN_WEB_PORT · PI_ADMIN_WEB_TLS_PORT) in der Host-env. Die übrigen Ports sind in Compose fest vorgegeben.
Alle weiteren Ports müssen auch innerhalb des Firmennetzes nicht geöffnet werden. Die Datenbankports (5432 · 9042 · 6333 · 6379 · 7687 · 9000) dürfen unter keinen Umständen nach außen exponiert werden.