Overview
Open WebUI is a self-hosted, ChatGPT-style chat interface for large language models with user accounts, RAG (chat grounded in your uploaded documents), and model management. This template deploys a single-replica stateful workload that keeps all of its state on a persistent volume and connects to your models through an OpenAI-compatible API (such as the vLLM template or a hosted provider), an Ollama workload in the same GVC, or both. Neither backend is bundled: you point the template at model providers you already run or subscribe to. The administrator account comes from a secret you create before installing, and self-service sign-up is off, so the UI is ready to sign in to on its public URL as soon as it starts. The Control Plane MCP server is added as a tool server, so each user can connect their own Control Plane account and manage it from a chat.What Gets Created
Prerequisites
Two secrets must exist before you install: the admin account and the session signing key. Both are long-lived credentials, so they are secrets you own rather than Helm values. Secrets are org-level, so no GVC flag is involved.Create the admin account secret
email and password. Open WebUI creates this administrator on its first boot, before it serves anything, and turns self-service sign-up off:admin.secretName to this name. The secret is read on the first boot only; change the password later in the UI (Settings → Account).Create the session signing key secret
plain encoding:auth.secretKeyName to this name. The key signs every session and JWT: keep it forever, because replacing it signs every user out. Read it back with -o yaml; a bare cpln secret reveal prints only a summary table:Optional: create the OpenAI-compatible API key secret
openai.apiKeySecretName to this name. When pairing with the vLLM template, reuse vLLM’s own API key secret instead (see Pairing with vLLM). Leaving it empty (the default) keeps this backend off.Optional: have an Ollama workload in the same GVC
ollama.enabled: true and ollama.workloadName to that workload’s name.Installation
Install from the marketplace registry with the two required values, the names of the secrets you created:--set openai.baseUrl=... and --set openai.apiKeySecretName=OPENAI_KEY_SECRET_NAME for an OpenAI-compatible backend, or --set ollama.enabled=true --set ollama.workloadName=OLLAMA_WORKLOAD_NAME for Ollama. Model-backend values are read on the first boot only, so set them at install (see Model Backends). Then follow the instructions for your preferred method:
UI
CLI
Terraform
Pulumi
Configuration
One subsection per top-level values area. Each block shows the shipped defaults.Image and Resources
image— The Open WebUI container image.resources.minCpu/resources.minMemory— CPU and memory reserved for the container.resources.maxCpu/resources.maxMemory— The container’s limits. The first boot loads a local RAG embedding model into RAM, so keepmaxMemoryat or above the default.
maxCpu to minCpu may not exceed 4:1. The shipped 1 / 500m is 2:1; raising maxCpu without raising minCpu can cross the limit and is rejected when the workload is applied.Persistence and Backup
volumeset.capacity— Volume size in GiB (minimum 10) for the SQLite database, uploads, RAG vector store, and cache at/app/backend/data.backup.enabled— Take scheduled snapshots of the data volume. Snapshots are platform-managed; no cloud account or bucket is needed.backup.schedule— Cron expression in UTC with a single fixed minute. The chart refuses a schedule more frequent than hourly.backup.retention— How long each snapshot is kept, for example7d,720h,30d.
Authentication
auth.secretKeyName— Name of the opaque secret holding the session and JWT signing key. It must exist before you install (see Prerequisites) and must never change afterwards.admin.secretName— Name of the dictionary secret (keysemail,password) the administrator is created from. It is read only while the database has no accounts, so changing the secret later changes nothing.
Model Backends
ollama.enabled— Connect to an existing Ollama workload in this GVC.ollama.workloadName— That workload’s name; required whenollama.enabledistrue. The Ollama template names its workload after its release name followed by-ollama. The base URL is always fully qualified:http://OLLAMA_WORKLOAD_NAME.GVC_NAME.cpln.local:11434.ollama.port— The Ollama API port.openai.baseUrl— The provider’s API base URL. The shipped default is the hosted OpenAI v1 API; set it to any OpenAI-compatible endpoint.openai.apiKeySecretName— Name of the opaque secret holding the provider’s API key (see Prerequisites). Empty leaves this backend off and the policy grants no access to any key secret.
Control Plane MCP
cplnMcp.enabled— Add the Control Plane MCP server as a tool server. It is added once per install, so an administrator who removes it keeps it removed. Each user connects their own Control Plane account, so the tools act with that user’s Control Plane permissions. See Connecting Control Plane Tools.
Access
customDomain— Full URL of a custom domain, for examplehttps://chat.example.com. The scheme is required; the chart fails the render without it. Empty uses the canonical*.cpln.appendpoint.publicAccess.enabled— Serve the chat UI and its sign-in form over public HTTPS on the canonical*.cpln.appendpoint. Set it tofalseto keep the UI off the internet.internalAccess.type— Inbound firewall scope for in-GVC callers of the Open WebUI API on port8080:
Pairing with vLLM
To chat with a model served by the vLLM template in the same GVC, point the OpenAI-compatible backend at vLLM’s internal address and reuse vLLM’s API key secret. The vLLM workload is named after its release name followed by-vllm:
- vLLM must allow the caller (its default
internalAccess.type: same-gvcdoes) and keepmodel.toolCallParserset. Open WebUI offers tools on every chat, and vLLM rejects those requests without it. - vLLM’s default model and 8192-token context are fine for chat; the Control Plane tools need a 64k context (see Connecting Control Plane Tools).
- Images (Capture and image uploads) need a vision model. A text model such as Qwen2.5-7B-Instruct rejects them with
is not a multimodal model. - Set these at install: the backend settings are read on the first boot only. Change them later in Settings → Admin → Connections.
Connecting
First Run
Create the secrets and install
Wait for the workload to be ready
Sign in at the public URL
status.canonicalEndpoint:Share models with your users
Connecting Control Plane Tools
WithcplnMcp.enabled: true, the Control Plane MCP server is ready to use. Each user connects their own account, so the tools act with that user’s Control Plane permissions:
Switch on the Control Plane tools
Sign in to Control Plane
Ask a question
model.toolCallParser set; Qwen2.5-7B-Instruct reaches 64k with YaRN, set in the vLLM template’s values:
Control Plane, ID cpln, URL https://mcp.cpln.io/mcp, Auth OAuth 2.1. Click Register Client, then Save.
Using a Model Backend
Install with an OpenAI-compatible backend (a hosted provider, or the vLLM template as in Pairing with vLLM), or withollama.enabled: true and ollama.workloadName set to an Ollama workload with at least one model pulled; the backend’s models appear in the model picker.
If a configured Ollama backend is unreachable the UI still boots and simply shows no Ollama models. Because backend values are frozen after the first boot, correct a connection in Settings → Admin → Connections rather than by upgrading.
Operations
Backing Up
Backups are scheduled volume snapshots managed by the platform; no cloud account or bucket is required. On the configured schedule the platform snapshots the data volume, and SQLite recovers cleanly from one. Snapshots are pruned afterbackup.retention, and a final snapshot is always taken when the release is uninstalled.
- Default schedule — Daily at 03:00 UTC (
backup.schedule: "0 3 * * *"), kept for 7 days (backup.retention: 7d). - Minimum interval — Hourly; the chart refuses a more frequent schedule.
Restoring a Backup
There is no automated restore.backup.enabled only takes snapshots; recovering from one is a manual, deliberate operation that restores the chosen snapshot onto the release’s own volume set, after which the workload restarts onto the restored data. You can do it from the Control Plane console or with the CLI.
Find the snapshot to restore
name, location, and volume index of the one you want:Restore it onto the volume set
0:Verify
Upgrading from 1.0.0
Template version 1.1.0 moved the session/JWT signing key out of Helm values into a prerequisite secret. A release coming from 1.0.0 also takes the later changes, so follow Upgrading from 1.1.0 and Upgrading from 1.2.0 as well.Create the secret with the key you already use
auth.webuiSecretKey as the payload of a new opaque secret. A different value signs every user out:Update your values
auth.webuiSecretKey and set auth.secretKeyName to the secret’s name. Then apply the changes from the later upgrade notes before you run the upgrade.Upgrading from 1.1.0
Version 1.2.0 renamed the resource limits so it is unambiguous which number is the ceiling:resources.cpu is now resources.maxCpu and resources.memory is now resources.maxMemory. minCpu and minMemory are unchanged, and the shipped defaults are the same values.
Rename the two keys in your values and upgrade. No data or account is affected.
Upgrading from 1.2.0
Version 1.3.0 creates the administrator from a secret, removesauth.enableSignup, makes the UI public by default, turns the Ollama backend off by default, and adds the Control Plane MCP tool server.
Create the admin secret first
admin.secretName, so create the dictionary secret before upgrading (see Prerequisites). An install that already has accounts ignores it and keeps every login. Put your current administrator’s email and password in it if you want the Control Plane tools added during the upgrade.Update your values
- Remove
auth.enableSignup; the upgrade is refused while it is set. Manage sign-up in Settings → Admin → Authentication (New Sign Ups). publicAccess.enablednow defaults totrue, and your existing login protects it. Set it tofalseexplicitly to stay private.ollama.enablednow defaults tofalse. An existing install keeps its stored connections either way, because they are read on the first boot only.
Upgrade
If the rollout stalls
RELEASE_NAME-open-webui has not moved to the new version after 5 minutes, force a redeployment:Scaling and Availability
The workload runs as exactly one replica by design, with noreplicas value: the embedded SQLite database is single-writer and the volume set is per-replica, so a second instance would be a second, disconnected application rather than a cluster. A restart or upgrade is therefore a brief full outage of the UI.
Scale vertically with resources, keeping the 4:1 maxCpu to minCpu ratio noted in Image and Resources. Multi-replica operation would need an external database, cache and object store, which this template does not offer.
Troubleshooting
Workload never becomes ready and cpln logs returns nothing
Workload never becomes ready and cpln logs returns nothing
cpln helm install reported success, the workload sits at zero ready replicas, and cpln logs returns zero lines. cpln workload get-deployments RELEASE_NAME-open-webui --gvc GVC_NAME -o yaml shows under status.versions[].message:auth.secretKeyName, admin.secretName or openai.apiKeySecretName names a secret that does not exist.Fix: Create the secret exactly as in Prerequisites. The workload recovers on its own after a wait, or run cpln workload force-redeployment RELEASE_NAME-open-webui --gvc GVC_NAME to skip it.Upgrade from 1.2.0 does not move to the new version
Upgrade from 1.2.0 does not move to the new version
cpln helm upgrade, RELEASE_NAME-open-webui stays on the old version.Cause: The platform is still granting the workload access to the new admin secret.Fix: After 5 minutes, run cpln workload force-redeployment RELEASE_NAME-open-webui --gvc GVC_NAME.A user signs in and sees no models
A user signs in and sees no models
The model picker is empty for everyone
The model picker is empty for everyone
ollama.workloadName does not name a ready Ollama workload in this GVC. An unreachable Ollama backend is non-fatal, so nothing else looks wrong.Fix: Confirm the backend is up, for Ollama with cpln workload get-deployments OLLAMA_WORKLOAD_NAME --gvc GVC_NAME -o yaml. Because backend values are read on the first boot only, add or correct a connection in Settings → Admin → Connections rather than by upgrading.Control Plane tools fail or the chat errors once they are on
Control Plane tools fail or the chat errors once they are on
model.toolCallParser set and raise the context as in Connecting Control Plane Tools.An image upload is rejected with is not a multimodal model
An image upload is rejected with is not a multimodal model
is not a multimodal model.Cause: The selected model is text-only.Fix: Use a vision model for image input.A webhook or web page fetch to an address in the GVC is refused
A webhook or web page fetch to an address in the GVC is refused
*.cpln.local address fails.Cause: Open WebUI refuses private addresses for webhooks and web fetches. MCP tool servers are not affected.Fix: Expose the receiver publicly or use an external endpoint.Changing ollama, openai or customDomain in an upgrade has no effect
Changing ollama, openai or customDomain in an upgrade has no effect
customDomain has to be set at the first install.Custom domain hostname never resolves
Custom domain hostname never resolves
customDomain set, but the hostname does not resolve and only the canonical endpoint works.Cause: customDomain sets WEBUI_URL only; it does not create a Control Plane domain.Fix: Create and verify the domain and its DNS records separately.Every user was signed out at once
Every user was signed out at once
auth.secretKeyName secret changed, or the workload was pointed at a different secret. The key signs every session and JWT.Fix: Point auth.secretKeyName back at the original secret, or restore its original payload from your backup, then run cpln workload force-redeployment RELEASE_NAME-open-webui --gvc GVC_NAME. If the original key is lost, users simply sign in again; nothing else is affected.Render error about auth.enableSignup or resources.cpu or auth.webuiSecretKey
Render error about auth.enableSignup or resources.cpu or auth.webuiSecretKey
cpln helm upgrade fails before touching anything with auth.enableSignup was removed in 1.3.0, resources.cpu was RENAMED to resources.maxCpu or auth.webuiSecretKey was removed in 1.1.0.Cause: Your values still use keys from an earlier template version.Fix: Follow Upgrading from 1.2.0, Upgrading from 1.1.0 or Upgrading from 1.0.0.Important Notes
- Create both secrets before installing, and never change the session key. A missing secret wedges the deployment with no logs; the session key signs every session and JWT, so replacing it signs every user out.
- The admin secret is read on the first boot only. Changing it later changes nothing; change the password in the UI (Settings → Account).
- Self-service sign-up is off. Add users from Admin Panel → Users, or open sign-up in Settings → Admin → Authentication (New Sign Ups).
- New users see no models until you share them. Set each model’s Access in Settings → Admin → Models.
ollama.*,openai.*andcustomDomainapply at install, then persist in the application database. A later upgrade is ignored and the old backend keeps working; change model connections in Settings → Admin → Connections.- The Control Plane tools need a model with tool calling and at least a 64k-token context. The tool list alone is about 56k tokens.
- Image input needs a vision model. A text-only model rejects images with
is not a multimodal model. - Webhooks and web-page fetches need a public URL. Open WebUI refuses private addresses such as
*.cpln.local; MCP tool servers are not affected. customDomaindoes not create a domain. It setsWEBUI_URLonly; create the Control Plane domain and its DNS separately.- Restoring a snapshot is manual and loses post-snapshot data, including accounts created after it was taken. See Restoring a Backup.
- Single replica, by design. A restart or upgrade is a brief full outage of the UI.
- Data lives only on the volume set. Uninstall deletes it (a final snapshot is taken first); a reinstall starts empty and creates the administrator from the admin secret again. Your own prerequisite secrets are not deleted, since the chart does not own them.
- License / branding clause. Keep the “Open WebUI” branding visible in the UI unless your deployment serves 50 or fewer users or you have enterprise permission. It is not a template setting.