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.15.1-beta6
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 URL http://YOUR-NODE-IP:30090
Grafana URL http://YOUR-NODE-IP:30091
Update
helm repo update
helm upgrade --install devlake devlake/devlake --version=0.15.1-beta6
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 the deployment, visit devlake at: http://192.168.0.6:30000
Deploy with Ingress
Conditions:
- I have already configured default ingress for the Kubernetes cluster
- I want to use http://devlake.example.com for visiting devlake
helm install devlake devlake/devlake --set "ingress.enabled=true,ingress.hostname=devlake.example.com"
After the deployment, visit devlake at: 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.pemandkey.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 the deployment, visit devlake at: 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
| Parameter | Description | Default | 
|---|---|---|
| replicaCount | Replica Count for devlake, currently not used | 1 | 
| imageTag | The version tag for all images | see Values.yaml | 
| mysql.useExternal | If use external mysql server, set true | false | 
| mysql.externalServer | External mysql server address | 127.0.0.1 | 
| mysql.externalPort | External mysql server port | 3306 | 
| mysql.username | username for mysql | merico | 
| mysql.password | password for mysql | merico | 
| mysql.database | database for mysql | lake | 
| mysql.rootPassword | root password for mysql | admin | 
| mysql.storage.class | storage class for mysql's volume | "" | 
| mysql.storage.size | volume size for mysql's data | 5Gi | 
| mysql.image.repository | repository for mysql's image | mysql | 
| mysql.image.tag | image tag for mysql's image | 8 | 
| mysql.image.pullPolicy | pullPolicy for mysql's image | IfNotPresent | 
| grafana.image.repository | repository for grafana's image | apache/devlake-dashboard | 
| grafana.image.pullPolicy | pullPolicy for grafana's image | Always | 
| lake.storage.class | storage class for lake's volume | "" | 
| lake.storage.size | volume size for lake's data | 100Mi | 
| lake.image.repository | repository for lake's image | apache/devlake | 
| lake.image.pullPolicy | pullPolicy for lake's image | Always | 
| lake.loggingDir | log dir for the lake server | /app/logs | 
| lake.loggingLevel | log level for the lake server | info | 
| lake.dotenv | initial configurations for injecting to lake's .env | see Values.yaml | 
| ui.image.repository | repository for ui's image | apache/devlake-config-ui | 
| ui.image.pullPolicy | pullPolicy for ui's image | Always | 
| ui.basicAuth.enabled | If the basic auth in ui is enabled | false | 
| ui.basicAuth.user | The user name for the basic auth | "admin" | 
| ui.basicAuth.password | The password for the basic auth | "admin" | 
| service.type | Service type for exposed service | NodePort | 
| service.uiPort | Node port for config ui | 32001 | 
| service.ingress.enabled | If ingress is enabled | false | 
| service.ingress.enableHttps | If https is enabled | false | 
| service.ingress.className | Class name for ingressClass. leave empty for using default | "" | 
| service.ingress.hostname | The hostname/domainname for ingress | localhost | 
| service.ingress.prefix | The prefix for endpoints, currently not used | / | 
| service.ingress.tlsSecretName | The secret name for tls's certificate for https | "" | 
| service.ingress.httpPort | The http port for ingress | 80 | 
| service.ingress.httpsPort | The https port for ingress | 443 | 
| option.localtime | The hostpath for mount as /etc/localtime | /etc/localtime | 
| option.database | The database type, valids: mysql | mysql | 
FAQ
- 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. 
- (Optional) Create a MySQL instance on AWS RDS following this doc. Skip this step if you would like to use an existing instance. 
- 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 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
Troubleshooting
If you run into any problems, please check the Troubleshooting or create an issue