> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hellocobi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# On-Premises Deployment Overview

> Architecture overview for deploying Cobi on Kubernetes or OpenShift using the cobi-dashboard Helm chart

## Architecture

The `cobi-dashboard` Helm chart deploys the full Cobi platform as a set of Kubernetes workloads. All components run in a single namespace and communicate over the cluster network.

```mermaid theme={null}
flowchart TB
    Browser[User browser]

    subgraph Cluster[Kubernetes / OpenShift namespace]
        Edge{Gateway / Ingress / Route}
        Frontend[frontend<br/>Vite / React<br/>:8080]
        Backend[backend<br/>Node.js API<br/>:3000]
        Connect[connect<br/>ingestion service<br/>:8000]
        PostgreSQL[(PostgreSQL<br/>:5432)]
        Qdrant[(Qdrant<br/>:6333 / :6334)]
        MinIO[(MinIO<br/>S3 :9000)]
        VLLM[vLLM stack<br/>OpenAI-compatible<br/>:8000]
        Observability[otel-lgtm<br/>OTLP :4318<br/>Grafana :3000]
    end

    Browser -->|HTTPS| Edge
    Edge -->|app| Frontend
    Edge -->|API| Backend
    Backend -->|CONNECT_SERVICE_URL| Connect
    Connect -->|S3_ENDPOINT| MinIO
    Backend -->|DATABASE_URL| PostgreSQL
    Backend -->|QDRANT_URL| Qdrant
    Backend -->|S3_ENDPOINT| MinIO
    Backend -->|OPENAI_BASE_URL| VLLM
    Backend -.->|OTEL_EXPORTER_OTLP_ENDPOINT| Observability
```

## Components

| Component      | Image                          | Port               | Purpose                                                          |
| -------------- | ------------------------------ | ------------------ | ---------------------------------------------------------------- |
| **frontend**   | `hellocobi/dashboard-frontend` | 8080               | Vite/React web application                                       |
| **backend**    | `hellocobi/dashboard-backend`  | 3000               | REST API, auth, business logic                                   |
| **connect**    | `hellocobi/dashboard-connect`  | 8000               | Data source ingestion service                                    |
| **postgresql** | Bitnami PostgreSQL             | 5432               | Auth database (`dashboard_auth`) and core database (`cobi_core`) |
| **qdrant**     | `qdrant/qdrant`                | 6333 / 6334        | Vector store for semantic search                                 |
| **vllm-stack** | `vllm/vllm-openai`             | 8000               | LLM inference, OpenAI-compatible API                             |
| **minio**      | Bitnami MinIO                  | 9000 / 9001        | S3-compatible object storage for documents                       |
| **otel-lgtm**  | `grafana/otel-lgtm`            | 3000 / 4317 / 9090 | Grafana + Prometheus + Loki + Tempo                              |

## Connection Map

| From                               | To                                 | Key environment variable                                  | Port |
| ---------------------------------- | ---------------------------------- | --------------------------------------------------------- | ---- |
| Browser                            | Gateway / Ingress / frontend Route | —                                                         | 443  |
| Gateway / Ingress / frontend Route | frontend                           | —                                                         | 8080 |
| Browser                            | Gateway / Ingress / API Route      | `VITE_API_BASE_URL`                                       | 443  |
| Gateway / Ingress / API Route      | backend                            | —                                                         | 3000 |
| Gateway / Ingress                  | connect                            | —                                                         | 8000 |
| backend                            | connect                            | `CONNECT_SERVICE_URL`                                     | 8000 |
| connect                            | minio                              | `S3_ENDPOINT`                                             | 9000 |
| backend                            | postgresql                         | `DATABASE_URL`                                            | 5432 |
| backend                            | qdrant                             | `QDRANT_URL`                                              | 6333 |
| backend                            | minio                              | `S3_ENDPOINT`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY` | 9000 |
| backend                            | vllm-stack                         | `OPENAI_BASE_URL`                                         | 8000 |
| backend                            | otel-lgtm                          | `OTEL_EXPORTER_OTLP_ENDPOINT`                             | 4318 |

## Dependency Chart Sources

| Chart        | Repository                                        | Version  |
| ------------ | ------------------------------------------------- | -------- |
| `postgresql` | `https://charts.bitnami.com/bitnami`              | `16.x.x` |
| `qdrant`     | `https://qdrant.github.io/qdrant-helm`            | `1.16.3` |
| `vllm-stack` | `https://vllm-project.github.io/production-stack` | `0.1.9`  |
| `minio`      | `https://charts.bitnami.com/bitnami`              | `17.x.x` |

## Exposure Models

The chart supports Gateway API, Kubernetes Ingress, and OpenShift Routes for the user-facing app/API path. Enable **one** model at a time:

* **Gateway API** — uses `Gateway` and `HTTPRoute` resources, tested with Envoy Gateway. This is the preferred kOps v2/self-hosted rehearsal path and is configured under `gateway`.
* **Kubernetes Ingress** — uses top-level `ingress` values, tested with `nginx`. It supports shared-host routing and separate hostnames for app, API, Connect, MinIO, and Grafana.
* **OpenShift Routes** — uses frontend and backend API `Route` resources with edge TLS termination, configured under `openshift.route`. Connect stays internal through `CONNECT_SERVICE_URL` unless your deployment needs to expose it separately.
