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

# Helm Charts

> Deploy and manage Helm charts on Qovery

## Overview

Helm charts on Qovery allow you to deploy pre-packaged Kubernetes applications within your environment. Qovery treats Helm deployments as services that can be managed alongside your applications and databases.

## Deployment Sources

Qovery supports two sources for deploying Helm charts:

### Git Repository

Qovery pulls the Helm chart from your Git repository and installs it on your Kubernetes cluster.

**Supported Providers**: GitHub, GitLab, Bitbucket

### Helm Repository

Qovery pulls a chart from a configured Helm repository and installs it on your Kubernetes cluster.

<Note>
  Helm repositories must be configured at the organization level by administrators. See [Helm Repository Management](/configuration/organization/helm-repository).
</Note>

## Creating a Helm Service

<Steps>
  <Step title="Select Source">
    Choose **Git Repository** or **Helm Repository** as your deployment source
  </Step>

  <Step title="Configure Source">
    **For Git Repository**:

    * Select Git provider
    * Choose repository
    * Select branch
    * Specify root Helm path (path to chart directory)

    **For Helm Repository**:

    * Select configured repository
    * Enter chart name
    * Specify chart version
    * Configure timeout (default: 300 seconds)
    * Add arguments (optional)
  </Step>

  <Step title="Configure Values Override">
    Override chart values using:

    * Values file (upload or specify path)
    * Raw YAML override
    * Arguments (`--set`, `--set-string`, `--set-json`)
  </Step>

  <Step title="Review and Deploy">
    Review configuration and click **Create** to deploy
  </Step>
</Steps>

## Configuration

### General Settings

**Git Repository Configuration**:

* Git provider and repository
* Branch selection
* Root Helm path (path to chart directory containing `Chart.yaml`)

**Helm Repository Configuration**:

* Repository selection
* Chart name
* Chart version
* Timeout configuration
* Additional arguments

### Values Override

Helm charts use a `values.yaml` file for configuration. Qovery provides three ways to override default values:

**1. Values File Override**:
Upload or specify a custom `values.yaml` file to override default chart values. Ideal for complex configurations with many overrides.

**2. Raw YAML Override**:
Provide raw YAML directly in the Qovery console for quick overrides. Perfect for environment-specific configurations.

**3. Arguments Override**:
Use Helm command-line arguments for individual value overrides:

```bash theme={null}
--set replicaCount=3
--set service.type=LoadBalancer
--set image.tag=1.21
```

### Environment Variables in Values

In the override, use the `qovery.env.<ENV_VAR_NAME>` macro to inject environment variables into your Helm values:

```yaml theme={null}
database:
  host: qovery.env.DATABASE_HOST
  port: qovery.env.DATABASE_PORT
  username: qovery.env.DATABASE_USER
  password: qovery.env.DATABASE_PASSWORD
```

<Warning>
  Environment variables referenced with `qovery.env.*` must exist in your Helm service configuration, otherwise deployment will fail.
</Warning>

### Network Configuration

**Kubernetes Service Configuration**:
Qovery automatically handles:

* Service discovery within the environment
* Internal DNS resolution
* Network policies

**Port Exposure**:

* Service port
* Protocol (HTTP, HTTPS, TCP, gRPC)
* Public access toggle

<Note>
  Connections on public ports are automatically closed after 60 seconds.
</Note>

### Domains

**Qovery-Assigned Domains**:
When you enable public access, Qovery automatically generates a domain:

```
p<PORT>-<RANDOM_ID>-<SERVICE_ID>-gtw.<CLUSTER_ID>.bool.sh
```

Example: `p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh`

**Custom Domains**:
Add your own domain to your Helm service:

<Steps>
  <Step title="Add Custom Domain">
    Navigate to Helm service → Settings → Domains → Add Domain
  </Step>

  <Step title="Enter Domain Name">
    Enter your domain (e.g., `app.example.com`)
  </Step>

  <Step title="Configure DNS">
    Add a CNAME record pointing to the Qovery-generated domain:

    ```
    Type: CNAME
    Name: app
    Value: p80-zdf72de72-z709e1a88-gtw.za8ad0657.bool.sh
    TTL: 3600
    ```
  </Step>

  <Step title="Verify and Deploy">
    * Qovery verifies DNS configuration
    * SSL/TLS certificate is provisioned via Let's Encrypt
    * Redeploy to activate custom domain
  </Step>
</Steps>

## Auto-Deploy

Enable auto-deploy for Helm charts sourced from Git repositories. When enabled, Qovery automatically deploys changes when:

* Code is pushed to the configured branch
* Deployment restrictions are met (if configured)

## Clone Service

Duplicate a Helm service with its configuration:

<Steps>
  <Step title="Select Service">
    Go to the Helm service you want to clone
  </Step>

  <Step title="Clone Service">
    Click the three-dot menu → **Clone**
  </Step>

  <Step title="Configure Clone">
    * New name for the cloned service
    * Target environment (same or different)
    * Settings to copy (values, domains, variables)
  </Step>
</Steps>

<Note>
  Cloning excludes custom domains and certain environment variables to prevent conflicts.
</Note>

## Advanced Settings

**Timeout Configuration**:

* Install timeout
* Upgrade timeout
* Rollback timeout
* Delete timeout

**Helm Arguments**:
Pass additional arguments to Helm commands:

* `--atomic` - Rollback on failure
* `--wait` - Wait for resources to be ready
* `--wait-for-jobs` - Wait for jobs to complete
* `--create-namespace` - Create namespace if missing
* `--skip-crds` - Skip CRD installation

**CRD and ClusterRole Deployment**:
Some Helm charts require cluster-wide permissions to deploy Custom Resource Definitions (CRDs) or ClusterRoles. Ensure your service account has appropriate permissions.

## Logs and Monitoring

Access logs for your Helm service:

* Real-time log streaming
* Historical logs by time range
* Pod-specific logs
* Log filtering and search

## Delete Service

To delete a Helm service:

<Steps>
  <Step title="Stop Service">
    Click the three-dot menu → **Stop**
  </Step>

  <Step title="Delete Service">
    Click the three-dot menu → **Remove helm**
  </Step>

  <Step title="Confirm Deletion">
    Review what will be deleted and confirm
  </Step>
</Steps>

<Warning>
  Deleting a Helm service removes all Kubernetes resources created by the chart. This action cannot be undone.
</Warning>

## Related Resources

<CardGroup cols={2}>
  <Card title="Helm Repository" icon="box" href="/configuration/organization/helm-repository">
    Configure Helm repositories for your organization
  </Card>

  <Card title="Environment Variables" icon="key" href="/configuration/environment-variables">
    Manage environment variables for Helm services
  </Card>

  <Card title="Custom Domains" icon="globe" href="/getting-started/guides/advanced-tutorials/cloudflare-custom-domain">
    Set up custom domains with SSL/TLS
  </Card>

  <Card title="Advanced Settings" icon="sliders" href="/configuration/service-advanced-settings">
    Configure advanced Helm deployment options
  </Card>
</CardGroup>
