Skip to main content
Version: v0.17

Install via Helm

Prerequisites

  • Helm >= 3.6.0
  • Kubernetes >= 1.19.0

Quick Start

You can also check https://github.com/apache/incubator-devlake-helm-chart to make contribution

Install

To install the chart with release name devlake:

helm repo add devlake https://apache.github.io/incubator-devlake-helm-chart
helm repo update
helm install devlake devlake/devlake --version=0.17.0

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

http://YOUR-NODE-IP:32001

Tips:

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 by url http://YOUR-NODE-IP:30090 grafana by url http://YOUR-NODE-IP:30091

Update

helm repo update
helm upgrade --install devlake devlake/devlake --version=0.17.0

Uninstall

To uninstall/delete the devlake release:

helm uninstall devlake

Some example deployments

Deploy with NodePort

Conditions:

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

After deployed, visit devlake: http://192.168.0.6:30000

Deploy with Ingress

Conditions:

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

After deployed, visit devlake: http://devlake.example.com, and grafana at http://devlake.example.com/grafana

Deploy with Ingress (Https)

Conditions:

  • I have already configured ingress(class: nginx) for the Kubernetes cluster, and the https using 8443 port.
  • I want to use https://devlake-0.example.com:8443 for visiting devlake.
  • The https certificates are generated by letsencrypt.org, 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,ingress.hostname=devlake-0.example.com" \
--set "ingress.className=nginx,ingress.httpsPort=8443" \
--set "ingress.tlsSecretName=ssl-certificate"

After deployed, visit devlake: https://devlake-0.example.com:8443, and grafana at https://devlake-0.example.com:8443/grafana

Parameters

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

ParameterDescriptionDefault
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
mysql.storage.classstorage class for mysql's volume""
mysql.storage.sizevolume 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
mysql.extraLabelsextra labels for mysql's statefulset{}
mysql.securityContextpod security context values{}
mysql.containerSecurityContextcontainer security context values{}
grafana.image.repositoryrepository for grafana's imageapache/devlake-dashboard
grafana.image.pullPolicypullPolicy for grafana's imageAlways
grafana.useExternalIf use external grafana serverfalse
grafana.externalUrlexternal grafana server if use external""
grafana.extraLabelsextra labels for grafana's statefulset{}
grafana.securityContextpod security context values{}
grafana.containerSecurityContextcontainer security context values{}
grafana.oauthEnabledenable oauth for grafanafalse
grafana.oauthConfiga list of env vars used for oauth{}
lake.storage.classstorage class for lake's volume""
lake.storage.sizevolume 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
lake.extraLabelsextra labels for lake's statefulset{}
lake.securityContextpod security context values{}
lake.containerSecurityContextcontainer security context values{}
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"
ui.basicAuth.useSecretIf use secret instead of configmap for basic authfalse
ui.basicAuth.autoCreateSecretIf let the helm chart create the secrettrue
ui.basicAuth.secretNameThe basic auth secret namedevlake-auth
ui.extraLabelsextra labels for ui's statefulset{}
ui.securityContextpod security context values{}
ui.containerSecurityContextcontainer security context values{}
service.typeService type for exposed serviceNodePort
service.uiPortNode port for config ui32001
service.ingress.enabledIf enable ingressfalse
service.ingress.enableHttpsIf enable httpsfalse
service.ingress.classNameName 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
option.useConnectionDetailsSecretIf use secret instead of configmap for db connectionfalse
option.connectionSecretNameThe database connection details secret namedevlake-db-connection
option.autoCreateSecretIf let the helm chart create the secrettrue
awsCognitoAuth.enableduse AWS cognito for authenticationfalse
awsCognitoAuth.awsAuthRegionaws Cognito auth region""
awsCognitoAuth.awsAuthUserPoolIDaws Cognito user pool ID""
awsCognitoAuth.awsAuthUserPoolWebClientIDaws Cognito web client ID for the user pool""

FAQ

  1. Can I use a managed Cloud database service instead of running database in docker?

Yes, it just set useExternal value to true while you deploy devlake with helm chart. Below we'll use MySQL on AWS RDS as an example.

a. (Optional) Create a MySQL instance on AWS RDS following this doc, skip this step if you'd like to use an existing instance b. Proviede below 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 https://apache.github.io/incubator-devlake-helm-chart
helm repo update
helm install devlake devlake/devlake \
--set mysql.useExternal=true \
--set mysql.externalServer=db.example.com \
--set mysql.externalPort=3306 \
--set mysql.username=admin \
--set mysql.password=password_4_admin \
--set mysql.database=devlake
  1. Can I use a secret to store the database connection details?

Yes, to do so, you need to have a secret in your Kubernetes Cluster that contains the following values:

  • MYSQL_USER: The user to connect to your DB.
  • MYSQL_PASSWORD: The password to connect to your DB.
  • MYSQL_DATABASE: The database to connect to your DB.
  • MYSQL_ROOT_PASSWORD: The root password to connect to your DB.
  • DB_URL: mysql://username:password@dbserver:port/database?charset=utf8mb4&parseTime=True

The secret name needs to be the same as the value option.connectionSecretName

  1. Can I use an external Grafana instead of running built-in Grafana?

Yes, the devlake helm chart supports using an external Grafana. You can set the following values while installing from helm:

  • grafana.useExternal: this should be true
  • grafana.externalUrl: use your Grafana's URL, e.g. https://grafana.example.com

Here is the example:

helm repo add devlake https://apache.github.io/incubator-devlake-helm-chart
helm repo update
helm install devlake devlake/devlake \
--set grafana.useExternal=true \
--set grafana.externalUrl=https://grafana.example.com

Troubleshooting

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