Quick Start
Get Vesta running on your Kubernetes cluster in under 5 minutes.
Prerequisites
- Kubernetes 1.27+
kubectland Helm 3- PostgreSQL — or let Vesta deploy one for you
- (Optional) cert-manager for TLS, metrics-server for autoscaling
1. Install
curl -fsSL https://getvesta.sh/install.sh | sh
Checks your prerequisites, deploys Vesta with a bundled PostgreSQL, waits for it to come up, and prints the URL. Re-running it is also the upgrade path.
To point at a database you already run:
VESTA_DATABASE_URL="postgres://user:pass@db-host:5432/vesta?sslmode=disable" \
sh -c "$(curl -fsSL https://getvesta.sh/install.sh)"
Other variables: VESTA_VERSION, VESTA_NAMESPACE, VESTA_RELEASE, VESTA_INGRESS_CLASS,
and VESTA_DRY_RUN=1 to print the Helm command without running it.
With Helm directly
Create the namespace first, carrying the metadata Helm uses to recognise its own resources, then install:
kubectl create namespace vesta-system
kubectl annotate namespace vesta-system \
meta.helm.sh/release-name=vesta \
meta.helm.sh/release-namespace=vesta-system
kubectl label namespace vesta-system app.kubernetes.io/managed-by=Helm
helm install vesta oci://ghcr.io/vesta-infra/charts/vesta \
-n vesta-system \
--set postgres.enabled=true \
--set config.ingressClassName=traefik
Not --create-namespace: that makes the namespace without the ownership metadata, and the
chart’s own Namespace object then collides with it.
CRDs are applied by the chart — there is nothing to kubectl apply by hand, on install or
on upgrade.
Set config.ingressClassName to match your ingress controller. Leaving it empty produces
app ingresses with no class, which no controller claims, and every app URL returns 404.
2. Open the dashboard
kubectl port-forward -n vesta-system svc/vesta-ui 8080:80
Then visit http://localhost:8080/setup to create the first admin account.
To serve it on a real hostname, set that under Settings → SSL Certificates once you are
in, or pass --set ui.ingress.enabled=true --set ui.ingress.host=vesta.example.com at
install time.
3. Upgrading
helm upgrade vesta oci://ghcr.io/vesta-infra/charts/vesta \
-n vesta-system --reset-then-reuse-values
CRDs come with it. --reset-then-reuse-values rather than --reuse-values: the latter
carries your old values forward wholesale and silently drops new chart defaults.
An admin can also upgrade from Settings → System, where Vesta shows the running version and whether a newer release exists.
4. Deploy your first app
Create a project and an app in the web UI (or via the API), then ship it.
Build straight from a git branch:
vesta build my-app --environment production --branch main
Or roll out a pre-built image tag:
vesta deploy my-app --tag v1.2.3 --environment production
The same thing over the API — environment is required:
curl -X POST https://<api-host>/api/v1/apps/my-app/deploy \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"environment": "production", "tag": "v1.2.3"}'
Next steps
- Configuration — Customize Vesta with Helm values
- Architecture — Understand how the components work together
- CLI Reference — Full list of CLI commands