Quick Start

Get Vesta running on your Kubernetes cluster in under 5 minutes.

Prerequisites

  • Kubernetes cluster (v1.27+)
  • Helm 3
  • PostgreSQL database (for the API server)
  • (Optional) cert-manager for TLS
  • (Optional) metrics-server for autoscaling

1. Install CRDs

Apply the Custom Resource Definitions that Vesta uses to manage your applications:

kubectl apply -f https://raw.githubusercontent.com/vesta-infra/vesta-kubernetes/main/deploy/helm/vesta/crds/kubernetes.getvesta.sh_vestaapps.yaml
kubectl apply -f https://raw.githubusercontent.com/vesta-infra/vesta-kubernetes/main/deploy/helm/vesta/crds/kubernetes.getvesta.sh_vestaprojects.yaml
kubectl apply -f https://raw.githubusercontent.com/vesta-infra/vesta-kubernetes/main/deploy/helm/vesta/crds/kubernetes.getvesta.sh_vestaconfigs.yaml
kubectl apply -f https://raw.githubusercontent.com/vesta-infra/vesta-kubernetes/main/deploy/helm/vesta/crds/kubernetes.getvesta.sh_vestaenvironments.yaml
kubectl apply -f https://raw.githubusercontent.com/vesta-infra/vesta-kubernetes/main/deploy/helm/vesta/crds/kubernetes.getvesta.sh_vestasecrets.yaml

2. Create the database secret

Vesta’s API server requires a PostgreSQL database. Create a secret with your connection string:

kubectl create namespace vesta-system

kubectl create secret generic vesta-db-secret \
  -n vesta-system \
  --from-literal=DATABASE_URL="postgres://user:password@db-host:5432/vesta?sslmode=disable"

3. Install with Helm

helm install vesta oci://ghcr.io/vesta-infra/charts/vesta \
  -n vesta-system --create-namespace \
  --set api.database.existingSecret=vesta-db-secret \
  --set config.ingressClassName=traefik

4. Deploy your first app

Once Vesta is running, deploy an application with the CLI:

vesta deploy my-app --tag v1.2.3 --env production

Or via the API:

curl -X POST https://<api-host>/api/v1/apps/my-app/deploy \
  -H "Authorization: Bearer <token>" \
  -d '{"tag": "v1.2.3", "environment": "production"}'

Next steps