Deploy on Kubernetes
Deploy OpenPanel on Kubernetes using Helm
OpenPanel can be deployed on Kubernetes using the community-maintained Helm chart. This allows you to run OpenPanel in a scalable, production-ready Kubernetes environment.
The Helm chart is maintained by the community and available on Artifact Hub.
Prerequisites
- Kubernetes 1.19+
- Helm 3.0+
kubectlconfigured to access your cluster- At least 2GB RAM per node (4GB+ recommended)
- Persistent volume support (if using self-hosted databases)
Quick Start
Download Default Values
Download the default values file to customize your configuration:
⚠️ IMPORTANT: Before installing, you MUST configure the required values in values.yaml. The chart includes placeholder values (marked with <>) that will cause the installation to fail if not properly configured.
Configure Required Values
Edit my-values.yaml and configure the following required values:
-
Ingress Configuration:
-
Application URLs:
-
Cookie Secret (generate with
openssl rand -base64 32): -
PostgreSQL Configuration (choose one):
- Option A: External PostgreSQL (recommended for production)
- Option B: Self-hosted PostgreSQL
- Option A: External PostgreSQL (recommended for production)
Install OpenPanel
Install OpenPanel with your configured values:
Or override specific values directly:
Verify Installation
Check that all pods are running:
You should see pods for:
- API server (
op-api) - Dashboard (
op-dashboard) - Worker (
op-worker) - PostgreSQL (if using self-hosted)
- Redis (if using self-hosted)
- ClickHouse (if using self-hosted)
Check the status:
Access Your Dashboard
Once all pods are running, access OpenPanel at your configured domain. The ingress will route traffic to the dashboard service.
If you need to test locally, you can port-forward:
Then access OpenPanel at http://localhost:3000.
Configuration
Required Configuration
The following values MUST be configured before installation:
| Configuration | Required | Placeholder | Description |
|---|---|---|---|
ingress.fqdn | ✅ Yes | <fqdn> | Your domain name |
ingress.*.tlsSecretName | ✅ Yes | <tls_secret_name> | TLS certificate secret name |
config.apiUrl | ✅ Yes | <fqdn> | Full API URL |
config.dashboardUrl | ✅ Yes | <fqdn> | Full Dashboard URL |
config.googleRedirectUri | ✅ Yes | <fqdn> | OAuth callback URL |
secrets.cookieSecret | ✅ Yes | CHANGE_ME_... | Session encryption key |
externalPostgresql.* | ⚠️ If external | <postgres_*> | PostgreSQL connection details |
Complete Example Configuration
Here's a minimal example configuration file (my-values.yaml) with all required values:
Optional Configuration
The Helm chart maps environment variables to Helm values. For a complete reference of all available environment variables and their descriptions, see the Environment Variables documentation.
Email Configuration
Enable email functionality (password resets, invitations, etc.):
Get your Resend API key from resend.com. Make sure to verify your sender email domain.
AI Features
Enable AI-powered features:
You only need to configure the API key for the model you choose. Leave other API keys as empty strings ("") if not using them.
Google OAuth
Enable Google OAuth login:
Set up Google OAuth in Google Cloud Console. Add authorized redirect URI: https://your-domain.com/api/oauth/google/callback
Redis Configuration
Redis is enabled by default and deployed within Kubernetes. To use an external Redis instance:
ClickHouse Configuration
ClickHouse is enabled by default and deployed within Kubernetes. To use an external ClickHouse instance:
Application Components
Enable/disable individual components:
Resource Limits
Adjust resource requests and limits:
Updating OpenPanel
To upgrade to a newer version:
Replace <new-version> with the desired version number (e.g., 0.1.1).
Managing Your Deployment
View Logs
View logs from specific deployments:
Restart Services
Restart a specific deployment:
Scale Services
Scale services on the fly:
Or update your values file and upgrade:
Check Services
View all services:
Check ConfigMap and Secrets
Verify configuration:
Ingress Configuration
Standard Ingress (NGINX/Traefik)
HTTPProxy (Contour)
Troubleshooting
Pods Not Starting
-
Check pod status:
-
Check events:
-
Check logs:
Database Connection Issues
-
Verify database pods are running (if using self-hosted):
-
Check database service:
-
Test database connection:
Configuration Issues
If pods are failing due to configuration:
-
Verify all required values are set:
-
Check for placeholder values:
-
Ensure secrets are properly set:
Ingress Not Working
-
Check ingress status:
-
Verify ingress controller is running:
-
Check DNS configuration
Backup and Restore
Backup PostgreSQL
If using self-hosted PostgreSQL:
Or use a Kubernetes CronJob for automated backups.
Restore PostgreSQL
Restore from backup:
Uninstalling
To uninstall OpenPanel:
⚠️ Warning: This will delete all resources including persistent volumes. Make sure to backup your data before uninstalling!
To keep persistent volumes:
Next Steps
- Configure email settings for password resets and invitations
- Set up AI integration for the analytics assistant
- Configure SDK to track events from your applications