Port Map
Every service runs as a container in the compose project under /opt/logrite-stack/ on each VM.
The table is generated from the deployment catalogue, ops/deploy/services.json in
LogriteMasterControl (port = the container port, ports_mappings = host:container). A service
with no mapping is reached only on the docker network, by its compose service name.
Full Port Reference
Section titled “Full Port Reference”| Service | Container port | Host mapping (dev) | Host mapping (prod) | Public hostname (dev) |
|---|---|---|---|---|
frontend | 3000 | 3000:3000 | 3000:3000 | dev-app.logrite.ai |
backend | 8080 | 9800:8080 | 9800:8080 | dev-leapfrogapi.logrite.ai |
analyzer | 9001 dev / 9000 prod | 9001:9001 | 9000:9000 | dev-analyzer.logrite.ai |
semantic-search | 9100 | 9100:9100 | 9100:9100 | dev-search.logrite.ai |
ai-service (Cortex) | 9300 | 9300:9300 | 9300:9300 | dev-aiservice.logrite.ai |
mcp-server | 9500 | 9500:9500 | 9500:9500 | dev-mcp.logrite.ai |
warden | 9600 | 9600:9600 | 9600:9600 | dev-warden.logrite.ai |
ingest-shim | 9700 | 9700:9700 | 9700:9700 | dev-ingest.logrite.ai |
demo-seeder | 9900 | 9900:9900 | — (dev only) | — |
webhook | 9999 | 9999:9999 | 9999:9999 | dev-webhook.logrite.ai |
downtime-tracker | 8765 | 8765:8765 | 8765:8765 | — |
devdocs | 3000 | 3067:3000 | 3067:3000 | dev-devdocs.logrite.ai |
opensearch | 9200 | 9200:9200 | 9200:9200 | dev-analyticsapi.logrite.ai |
opensearch-dashboards | 5601 | 5601:5601 | 5601:5601 | dev-analytics.logrite.ai |
elasticsearch (lab) | 9200 | 9201:9200 | — (dev only) | dev-elastic.logrite.ai |
kibana (lab) | 5601 | 5602:5601 | — (dev only) | dev-kibana.logrite.ai |
jobsearch (demo app, Coolify) | 9081 | 9081:9081 | 9081:9081 | dev-jobsearch.logrite.ai |
data-prepper | 21890 (traces), 21891 (logs) | none | none | — |
logrite-postgres | 5432 | none | none | — |
logrite-redis | 6379 | none | none | — |
logrite-mongo | 27017 | — | none | — |
Health Check Endpoints
Section titled “Health Check Endpoints”Run on the VM itself (the host mappings above):
curl -s http://127.0.0.1:9800/api/v1/health # backendcurl -s http://127.0.0.1:9001/health # analyzer (9000 on prod)curl -s http://127.0.0.1:9100/health # semantic-searchcurl -s http://127.0.0.1:9300/health # ai-servicecurl -s http://127.0.0.1:9500/health # mcp-servercurl -s http://127.0.0.1:9600/health # wardencurl -s http://127.0.0.1:9700/health # ingest-shimcurl -s http://127.0.0.1:9999/health # webhookcurl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3000/ # frontendcurl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3067/ # devdocsThe backend’s bare /health answers a 302 redirect, not the health document; use
/api/v1/health.
Who holds a port
Section titled “Who holds a port”# `sudo` is required: the listener is a root-owned docker-proxysudo ss -ltnp | grep :9300docker ps --format '{{.Names}}\t{{.Ports}}' | grep 9300