Skip to main content

Helm

Deploy Expo Open OTA using Helm, a package manager for Kubernetes.

A ready-to-use Helm chart is available to deploy Expo Open OTA on your Kubernetes cluster.

Prerequisites​

A running Kubernetes cluster and Helm (>= 3.8) installed on your local machine are required to deploy the application. If you are not familiar with Helm or Kubernetes, we recommend you to deploy the server with custom docker deployment or railway.

Installation​

The chart is published as an OCI artifact to the GitHub Container Registry alongside the Docker image, so there is no need to clone the repository.

Chart versions follow the application releases, without the v prefix (release v1.2.3 → chart version 1.2.3). Always pass an explicit --version:

helm install expo-open-ota oci://ghcr.io/axelmarciano/charts/expo-open-ota --version 1.2.3 -n NAMESPACE

This also works with GitOps tools such as ArgoCD or Flux by referencing oci://ghcr.io/axelmarciano/charts as an OCI Helm repository.

Configuration​

The Helm chart uses a set of configurable values defined in values.yaml. These values can be overridden by passing a custom values.yaml file when deploying the chart.

Conditional Logic for Environment Variables​

The environment variables used by the application depend on the following key settings:

  • secretName: If defined, environment variables are loaded from the specified Kubernetes secret instead of being set directly.
  • storageMode:
    • s3: Requires AWS_REGION and S3_BUCKET_NAME to be set. Optionally supports AWS_BASE_ENDPOINT for S3-compatible object storage and AWS_S3_FORCE_PATH_STYLE=true for providers that require path-style addressing.
    • local: Requires LOCAL_BUCKET_BASE_PATH to be set.
  • keysStorageType:
    • aws-secrets-manager: Requires AWS Secrets Manager variables (AWSSM_EXPO_PUBLIC_KEY_SECRET_ID, AWSSM_EXPO_PRIVATE_KEY_SECRET_ID).
    • local: Requires local key paths (PRIVATE_LOCAL_EXPO_KEY_PATH, PUBLIC_LOCAL_EXPO_KEY_PATH).
    • environment: Requires base64-encoded keys (PUBLIC_EXPO_KEY_B64, PRIVATE_EXPO_KEY_B64).
  • useCloudfrontRedirect:
    • If true, requires CLOUDFRONT_DOMAIN, CLOUDFRONT_KEY_PAIR_ID, and a CloudFront private key (CLOUDFRONT_PRIVATE_KEY_B64, PRIVATE_CLOUDFRONT_KEY_PATH, or AWSSM_CLOUDFRONT_PRIVATE_KEY_SECRET_ID, depending on keysStorageType).
  • useAWSAccessKeys:
    • If true, requires AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to be set.
  • useGenericCDN:
    • If true, requires S3_CDN_PREFIX to be set.

Deployment​

To override values, create a custom my-values.yaml file and run:

helm install expo-open-ota oci://ghcr.io/axelmarciano/charts/expo-open-ota --version 1.2.3 -n NAMESPACE -f my-values.yaml

To upgrade an existing release:

helm upgrade expo-open-ota oci://ghcr.io/axelmarciano/charts/expo-open-ota --version 1.2.3 -n NAMESPACE -f my-values.yaml

For additional configuration details, refer to the Environment Variables documentation.

Ingress Configuration​

The Ingress configuration is crucial for exposing Expo Open OTA through a specific domain and must match the BASE_URL defined in the application.