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: RequiresAWS_REGIONandS3_BUCKET_NAMEto be set. Optionally supportsAWS_BASE_ENDPOINTfor S3-compatible object storage andAWS_S3_FORCE_PATH_STYLE=truefor providers that require path-style addressing.local: RequiresLOCAL_BUCKET_BASE_PATHto 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, requiresCLOUDFRONT_DOMAIN,CLOUDFRONT_KEY_PAIR_ID, and a CloudFront private key (CLOUDFRONT_PRIVATE_KEY_B64,PRIVATE_CLOUDFRONT_KEY_PATH, orAWSSM_CLOUDFRONT_PRIVATE_KEY_SECRET_ID, depending onkeysStorageType).
- If
useAWSAccessKeys:- If
true, requiresAWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEYto be set.
- If
useGenericCDN:- If
true, requiresS3_CDN_PREFIXto be set.
- If
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.