Skip to main content
Version: v0.15

Install via Helm


  • Helm >= 3.6.0
  • Kubernetes >= 1.19.0

Quick Start

You can also check to make contribution


To install the chart with release name devlake:

helm repo add devlake
helm repo update
helm install devlake devlake/devlake --version=0.15.1-beta6

And visit your devlake from the node port (32001 by default).



If you are using minikube inside your mac, please use the following command to forward the port:

kubectl port-forward service/devlake-ui  30090:4000

and open another terminal:

kubectl port-forward service/devlake-grafana  30091:3000

Then you can visit: Config UI URL http://YOUR-NODE-IP:30090 Grafana URL http://YOUR-NODE-IP:30091


helm repo update
helm upgrade --install devlake devlake/devlake --version=0.15.1-beta6


To uninstall/delete the devlake release:

helm uninstall devlake

Some example deployments

Deploy with NodePort


  • IP Address of Kubernetes node:
  • Want to visit devlake with port 30000.
helm install devlake devlake/devlake --set service.uiPort=30000

After the deployment, visit devlake at:

Deploy with Ingress


helm install devlake devlake/devlake --set "ingress.enabled=true,"

After the deployment, visit devlake at:, and grafana at

Deploy with Ingress (Https)


  • I have already configured ingress(class: nginx) for the Kubernetes cluster, and the https using 8443 port.
  • I want to use for visiting devlake.
  • The https certificates are generated by, and the certificate and key files: cert.pem and key.pem

First, create the secret:

kubectl create secret tls ssl-certificate --cert cert.pem --key secret.pem

Then, deploy the devlake:

helm install devlake devlake/devlake \
--set "ingress.enabled=true,ingress.enableHttps=true," \
--set "ingress.className=nginx,ingress.httpsPort=8443" \
--set "ingress.tlsSecretName=ssl-certificate"

After the deployment, visit devlake at:, and grafana at


Some useful parameters for the chart, you could also check them in values.yaml

replicaCountReplica Count for devlake, currently not used1
imageTagThe version tag for all imagessee Values.yaml
mysql.useExternalIf use external mysql server, set truefalse
mysql.externalServerExternal mysql server address127.0.0.1
mysql.externalPortExternal mysql server port3306
mysql.usernameusername for mysqlmerico
mysql.passwordpassword for mysqlmerico
mysql.databasedatabase for mysqllake
mysql.rootPasswordroot password for mysqladmin class for mysql's volume"" size for mysql's data5Gi
mysql.image.repositoryrepository for mysql's imagemysql
mysql.image.tagimage tag for mysql's image8
mysql.image.pullPolicypullPolicy for mysql's imageIfNotPresent
grafana.image.repositoryrepository for grafana's imageapache/devlake-dashboard
grafana.image.pullPolicypullPolicy for grafana's imageAlways class for lake's volume"" size for lake's data100Mi
lake.image.repositoryrepository for lake's imageapache/devlake
lake.image.pullPolicypullPolicy for lake's imageAlways
lake.loggingDirlog dir for the lake server/app/logs
lake.loggingLevellog level for the lake serverinfo
lake.dotenvinitial configurations for injecting to lake's .envsee Values.yaml
ui.image.repositoryrepository for ui's imageapache/devlake-config-ui
ui.image.pullPolicypullPolicy for ui's imageAlways
ui.basicAuth.enabledIf the basic auth in ui is enabledfalse
ui.basicAuth.userThe user name for the basic auth"admin"
ui.basicAuth.passwordThe password for the basic auth"admin"
service.typeService type for exposed serviceNodePort
service.uiPortNode port for config ui32001
service.ingress.enabledIf ingress is enabledfalse
service.ingress.enableHttpsIf https is enabledfalse
service.ingress.classNameClass name for ingressClass. leave empty for using default""
service.ingress.hostnameThe hostname/domainname for ingresslocalhost
service.ingress.prefixThe prefix for endpoints, currently not used/
service.ingress.tlsSecretNameThe secret name for tls's certificate for https""
service.ingress.httpPortThe http port for ingress80
service.ingress.httpsPortThe https port for ingress443
option.localtimeThe hostpath for mount as /etc/localtime/etc/localtime
option.databaseThe database type, valids: mysqlmysql


  1. Can I use a managed cloud database service instead of running database in Docker?

    Yes, you can just set useExternal value to true while deploying devlake with helm chart. Below we will use MySQL on AWS RDS as an example.

  2. (Optional) Create a MySQL instance on AWS RDS following this doc. Skip this step if you would like to use an existing instance.

  3. Provide the following values while install from helm:

* `mysql.useExternal`: this should be `true`
* `mysql.externalServer`: use your RDS instance's IP address or domain name.
* `mysql.externalPort`: use your RDS instance's database port.
* `mysql.username`: use your `username` for access RDS instance's DB
* `mysql.password`: use your `password` for access RDS instance's DB
* `mysql.database`: use your RDS instance's DB name, you may need to create a database first with `CREATE DATABASE <DB name>;`

Here is the example:

helm repo add devlake
helm repo update
helm install devlake devlake/devlake \
--set mysql.useExternal=true \
--set \
--set mysql.externalPort=3306 \
--set mysql.username=admin \
--set mysql.password=password_4_admin \
--set mysql.database=devlake


If you run into any problems, please check the Troubleshooting or create an issue