> For the complete documentation index, see [llms.txt](https://doc.ozforensics.com/oz-knowledge/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.ozforensics.com/oz-knowledge/guides/administrator-guide/telemetry/echo-oz-telemetry-receiver/standalone-oz-echo-helm-chart.md).

# Standalone oz-echo Helm Chart

This chart deploys Echo plus its own dedicated MongoDB, independently of the rest of the Oz API stack. Use it if you're running Echo on Kubernetes on its own.

**Chart:** oz-echo, version 0.3.8, app version (Echo image) 1.0.3.

This chart was last released some time ago and pins an older Echo image than the bundled oz-k8s chart does. Confirm current support status with Oz Forensics before adopting it for a new production deployment.

Shared concepts (authentication, endpoints, configuration reference) can be found on the [parent page](/oz-knowledge/guides/administrator-guide/telemetry/echo-oz-telemetry-receiver.md).

### Prerequisites

* A Kubernetes cluster with:
  * ingress-nginx controller + cert-manager with a working ClusterIssuer (default assumes Let's Encrypt production).
  * metrics-server / kube-metrics (required for autoscaling, on by default).
  * Prometheus, if you want metrics scraping (optional, on by default – disable if you don't have Prometheus Operator CRDs installed).
  * A StorageClass for Mongo's persistent volume.
* Helm 3.
* openssl, to generate Echo's signing key.
* The chart itself – obtain the chart source or a ChartMuseum URL from Oz Forensics; this repo has no public distribution URL documented in-chart.

### Must-override values

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Value</th><th>Purpose</th></tr></thead><tbody><tr><td><code>ozDockerHubCreds</code></td><td>Base64 .dockerconfigjson for pulling the private image (see below for how to generate)</td></tr><tr><td><code>UserParams.URLs.echoURL</code></td><td>Public hostname for the Ingress</td></tr><tr><td><code>Params.echo.tokenKey</code></td><td>JWT signing secret — generate with <code>openssl rand -base64 129 | tr -d '\n'</code></td></tr><tr><td><code>pvc.mongo.storageClassName</code></td><td>Must match a StorageClass that exists in your cluster (default efs-sc almost certainly won't)</td></tr><tr><td><code>Params.mongo.security.Password</code></td><td>Embedded MongoDB root password – change the default</td></tr><tr><td><code>Params.global.Ingress.clusterIssuer.clusterIssuerIssuerName</code></td><td>Only if you're not using a ClusterIssuer literally named letsencrypt-production</td></tr><tr><td>At least one of <code>UserParams.Passwords</code>, <code>UserParams.StaticTokens</code>, or <code>UserParams.JWT.public</code></td><td>Without one of these, nothing can authenticate to Echo</td></tr></tbody></table>

Also review `Params.echo.resources` / `Params.mongo.resources` against your cluster's actual capacity – the defaults (Echo: 2–6 CPU / 2–6Gi; Mongo: 2–8 CPU / 8–16Gi) assume a reasonably sized node.

### Generating ozDockerHubCreds

```shellscript
kubectl create secret docker-registry tmp-reg-cred \
  --docker-server=https://index.docker.io/v1/ \
  --docker-username=<username-from-Oz> \
  --docker-password=<token-from-Oz> \
  --dry-run=client -o jsonpath='{.data.\.dockerconfigjson}'
```

Paste the output as the value of ozDockerHubCreds in your values file.

### Example of values.yaml

{% code title="values.yaml" %}

```yaml
ozDockerHubCreds: "<base64 dockerconfigjson from above>"

UserParams:
  URLs:
    echoURL: echo.yourcompany.example.com
  Passwords:
    - username: admin@yourcompany.example.com
      password: "<change-me>"

pvc:
  mongo:
    storageClassName: <your-storage-class>

Params:
  echo:
    tokenKey: "<output of: openssl rand -base64 129 | tr -d '\n'>"
  mongo:
    security:
      Password: "<change-me>"
```

{% endcode %}

### Install

```shellscript
helm repo add oz-forensics <chartmuseum-url-from-Oz>
helm repo update
helm install echo oz-forensics/oz-echo --version 0.3.8 \
  --namespace echo --create-namespace \
  -f my-values.yaml
```

If you received the chart as a local checkout or tarball instead:

```shellscript
helm install echo ./oz-api-echo-chart -f my-values.yaml
```

### Verify

```shellscript
kubectl -n echo get pods
kubectl -n echo port-forward svc/oz-echo-app 8010:8010
curl http://localhost:8010/healthz
```

### Known limitation

Resource names in this chart are derived from the chart name, not the Helm release name – only a single release of this chart is supported per namespace. Install additional instances into separate namespaces.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.ozforensics.com/oz-knowledge/guides/administrator-guide/telemetry/echo-oz-telemetry-receiver/standalone-oz-echo-helm-chart.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
