Skip to main content
Version: v0.13

Install via Helm


  • Helm >= 3.6.0
  • Kubernetes >= 1.19.0

Quick Install

clone the code, and enter the deployment/helm folder.

helm install devlake .

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


Some example deployments

Deploy with NodePort


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

After deployed, visit devlake:

Deploy with Ingress


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

After deployed, visit devlake:, 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 . \
--set "ingress.enabled=true,ingress.enableHttps=true," \
--set "ingress.className=nginx,ingress.httpsPort=8443" \
--set "ingress.tlsSecretName=ssl-certificate"

After deployed, visit devlake:, and grafana at


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

replicaCountReplica Count for devlake, currently not used1
mysql.useExternalIf use external mysql server, currently not usedfalse
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.0.26
mysql.image.pullPolicypullPolicy for mysql's imageIfNotPresent
grafana.image.repositoryrepository for grafana's imagemericodev/grafana
grafana.image.tagimage tag for grafana's imagelatest
grafana.image.pullPolicypullPolicy for grafana's imageAlways class for lake's volume"" size for lake's data100Mi
lake.image.repositoryrepository for lake's imagemericodev/lake
lake.image.tagimage tag for lake's imagelatest
lake.image.pullPolicypullPolicy for lake's imageAlways
lake.loggingDirthe root logging directory of Devlake/app/logs
ui.image.repositoryrepository for ui's imagemericodev/config-ui
ui.image.tagimage tag for ui's imagelatest
ui.image.pullPolicypullPolicy for ui's imageAlways
service.typeService type for exposed serviceNodePort
service.uiPortService port for config ui32001
service.ingress.enabledIf enable ingressfalse
service.ingress.enableHttpsIf enable httpsfalse
service.ingress.classNameThe class name for ingressClass. If leave empty, the default IngressClass will be used""
service.ingress.hostnameThe hostname/domainname for ingresslocalhost
service.ingress.prefixThe prefix for endpoints, currently not supported due to devlake's implementation/
service.ingress.tlsSecretNameThe secret name for tls's certificate, required when https enabled""
service.ingress.httpPortThe http port for ingress80
service.ingress.httpsPortThe https port for ingress443
option.localtimeThe hostpath for mount as /etc/localtime/etc/localtime