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

# Deploy with praisonai deploy helm

> One command to helm upgrade --install either PraisonAI chart

Install or upgrade either PraisonAI Helm chart with one command that injects the right auth secrets for you.

```mermaid theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
graph LR
    subgraph "deploy helm"
        CLI[💻 --chart name] --> Resolve[🔀 Resolve chart dir]
        Resolve --> Sets[🔐 Inject --set secrets]
        Sets --> Helm[🚀 helm upgrade --install]
    end

    classDef cli fill:#6366F1,stroke:#7C90A0,color:#fff
    classDef res fill:#189AB4,stroke:#7C90A0,color:#fff
    classDef sec fill:#F59E0B,stroke:#7C90A0,color:#fff
    classDef ok fill:#10B981,stroke:#7C90A0,color:#fff

    class CLI cli
    class Resolve res
    class Sets sec
    class Helm ok
```

<Warning>
  The charts ship in the git checkout, **not** in the PyPI wheel (`MANIFEST.in` excludes `infra/`). Run from a monorepo checkout, or set `PRAISONAI_HELM_ROOT` / `PRAISONAI_INFRA_ROOT`, or pass `--chart-dir`.
</Warning>

## Quick Start

<Steps>
  <Step title="Create the auth Secret">
    Pre-create the token Secret out-of-band (GitOps-friendly).

    ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
    kubectl create secret generic praisonai-api-auth \
      --from-literal=PRAISONAI_API_TOKEN="$(openssl rand -hex 16)"
    ```
  </Step>

  <Step title="Install the chart">
    The wrapper runs `helm upgrade --install` and wires the Secret automatically.

    ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
    praisonai deploy helm --chart agents-api
    ```
  </Step>
</Steps>

***

## How It Works

The wrapper resolves the chart directory by alias, injects default `--set` secret references when you don't, then shells out to Helm.

```mermaid theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
sequenceDiagram
    participant User
    participant CLI as deploy helm
    participant Helm

    User->>CLI: --chart agents-api
    CLI->>CLI: Resolve chart dir (CHART_ALIASES)
    CLI->>CLI: Add --set auth.existingSecret=... (if none given)
    CLI->>Helm: helm upgrade --install praisonai <dir> -n default
    Helm-->>User: Release upgraded
```

***

## Command Options

| Flag                         | Default      | Description                                          |
| ---------------------------- | ------------ | ---------------------------------------------------- |
| `--chart`                    | *(required)* | Chart name: `gateway` or `agents-api`.               |
| `--release` / `-r`           | `praisonai`  | Helm release name.                                   |
| `--namespace` / `-n`         | `default`    | Kubernetes namespace.                                |
| `--chart-dir`                | *(resolved)* | Override the chart directory.                        |
| `--install` / `--no-install` | `--install`  | Toggle `helm upgrade --install` vs. plain `upgrade`. |
| `--json`                     | `False`      | Machine-readable output.                             |

The chart tree can be overridden with `PRAISONAI_HELM_ROOT`.

***

## Auto-Injected Secrets

When you don't supply the matching `--set` flags, the wrapper adds them for you.

| `--chart`    | Injected `--set` flags                                                                              |
| ------------ | --------------------------------------------------------------------------------------------------- |
| `gateway`    | `auth.existingSecret=praisonai-gateway-auth`                                                        |
| `agents-api` | `auth.existingSecret=praisonai-api-auth` and `postgres.auth.existingSecret=praisonai-postgres-auth` |

<Note>
  Supplying your own `auth.*` (or `postgres.auth.*`) `--set` values disables the corresponding default injection, so you stay in control.
</Note>

***

## Worked Examples

Create the Secret first, then let the wrapper install the chart.

<Tabs>
  <Tab title="Gateway">
    ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
    kubectl create secret generic praisonai-gateway-auth \
      --from-literal=GATEWAY_AUTH_TOKEN="$(openssl rand -hex 16)"

    praisonai deploy helm --chart gateway
    ```
  </Tab>

  <Tab title="Agents API">
    ```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
    kubectl create secret generic praisonai-api-auth \
      --from-literal=PRAISONAI_API_TOKEN="$(openssl rand -hex 16)"
    kubectl create secret generic praisonai-postgres-auth \
      --from-literal=password="$(openssl rand -hex 16)"

    praisonai deploy helm --chart agents-api
    ```
  </Tab>
</Tabs>

***

## Best Practices

<AccordionGroup>
  <Accordion title="Pre-create Secrets, don't inline tokens">
    The wrapper references `existingSecret` names by default. Create those Secrets out-of-band so tokens never land in Git.
  </Accordion>

  <Accordion title="Use --no-install to guard existing releases">
    Pass `--no-install` to run a plain `helm upgrade` that fails if the release doesn't already exist — useful in pipelines that shouldn't create new releases.
  </Accordion>

  <Accordion title="Override the chart dir for local edits">
    Point `--chart-dir` at a working copy of the chart to test template changes before publishing.
  </Accordion>
</AccordionGroup>

***

## Related

<CardGroup cols={2}>
  <Card title="Helm Chart — Agents API" icon="ship" href="/docs/docs/features/helm-chart-agents-api">
    Every value for the agents-api chart.
  </Card>

  <Card title="Helm Chart — Gateway" icon="ship" href="/docs/docs/features/helm-chart-gateway">
    Every value for the gateway chart.
  </Card>
</CardGroup>
