Skip to main content

Service Port Map

Only one port faces outbound

In the AI stack, only plantpulse-proxy (nginx) holds host ports 80 / 443. The chat interface, admin console, and all APIs reach through this proxy.

App containers no longer publish port 80

Before 2026-08, AI Chat Web published directly on 80:8080. Now it does not publish; it opens only inside the container (expose: 8080). This consolidates the exposure point so firewall, audit, and TLS are handled in one place. If you were reading old documentation and looking for port 80 on the app container, check the proxy instead.

Routed by hostname

The proxy reads the Host header and selects the backend. You must point these names to the proxy IP in DNS so each service is reachable.

HostnameBackendWhat
Everything else (default)copliot-web:8080AI Chat Web — chat interface
admin.*admin-web:80Admin console
llm.*litellm-proxy:4000LLM gateway (OpenAI-compatible)
rag.*rag-api:7115RAG search API
timeseries.*insight-api:8970Time series insight API
parser.*document-understanding-api:7120Document parsing API
vision.*vision-api:7130Vision API
Verify where TLS terminates

The proxy listens on 443 as well, but in deployments with a separate load balancer or reverse proxy in front, TLS terminates there and plaintext enters the proxy. Ignoring frontend termination causes infinite redirects. Check which form you have first.


Ports open directly to the LAN

These ports are published to the host without passing through the proxy. Binding is not 127.0.0.1 but to all interfaces — use a firewall to block access from outside the corporate network.

PortServiceWhy open
80 / 443plantpulse-proxyOnly user entry point
4000LiteLLMDirect LLM gateway access (also reachable via llm.*)
7115RAG APIDirect access for MCP clients (Claude Desktop, etc.)
8970TimeSeries Insight APIDirect access for MCP clients
9080Admin console (admin-web)For operators. Also reachable via admin.*
7474Neo4j BrowserGraph DB admin UI
7687Neo4j BoltGraph DB query protocol

Enabled only with profiles

These are not in the default startup and appear only when the corresponding compose profile is enabled.

PortServiceProfile
6006Arize Phoenix — trace UIobservability
5000Local image registryregistry
5080Registry admin UIregistry
9090Old Copilot Webarchived
Phoenix is not removed

It dropped from the default stack in the 2026-07 redesign but can be restored with the observability profile. It is also viewable through the proxy in the admin console. The Langflow (7860) and Jupyter (3500) that dropped in the same redesign are truly removed and cannot be restored.


Internal only (not published)

Reachable by service name only within the compose network. Probing from the host with nc -z returns no response — this is normal.

ServiceInternal addressRole
AI Chat Webcopliot-web:8080Chat interface (default proxy backend)
Admin console backendadmin-apiAuth source. nginx at admin-web forwards to it
Document parsing APIdocument-understanding-api:7120Backend for parser.*
Vision APIvision-api:7130Backend for vision.*
LightRAGlightrag:9621RAG engine. Document management WebUI at /webui
Qdrantqdrant:6333Vector DB
Doclingdocling-serve:5001Document conversion
vLLM (generation)vllm-llm:8000Local LLM inference
vLLM (embedding)vllm-emb:8000Embedding
vLLM (reranking)vllm-rerank:8000Reranking
Time series inferencetimeseries-inference:8980Insight model serving
DCGM Exporterdcgm-exporterGPU metrics
Two old services have been archived

plantpulse-mcp-server (50000) and plantpulse-ontology (8888) no longer exist as independent services. MCP and ontology tools are now provided by the platform's server-web integrated MCP (/api/v5/mcp, api_key auth).


Borrowed from the platform

PostgreSQL (5432) · Cassandra (9042) · Redis/Valkey (6379) · MinIO (9000/9001) are not launched by the AI stack. They use a shared PlantPulse platform installation. Firewall and account settings for these ports follow the platform's security settings.


Check port status

Full status check

cd /home/kopens/plantpulse-ai/bin
./status.sh

health.sh probes the health endpoint of each service. A container running and actually responding are different things; use this for troubleshooting.

Individual port check

# 특정 포트 리스닝 확인
nc -z 127.0.0.1 <port> && echo "OK" || echo "DOWN"

# 포트 사용 프로세스 확인
ss -tlnp | grep <port>

What to open in the firewall

TargetOpen ports
All users80 / 443 (proxy)
Operators (corporate network)9080 admin console, 7474 Neo4j Browser
MCP clients (corporate network)7115 RAG, 8970 TimeSeries

No reason to open any other ports, even within the corporate network. Database ports (5432 · 9042 · 6333 · 6379 · 7687 · 9000) must never be exposed externally under any circumstances.