| --- |
| title: "Install via Helm" |
| description: > |
| The steps to install Apache DevLake via Helm for Kubernetes |
| sidebar_position: 2 |
| --- |
| |
| ## 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`: |
| |
| ```shell |
| helm repo add devlake https://apache.github.io/incubator-devlake-helm-chart |
| helm repo update |
| helm install devlake devlake/devlake --version=0.16.0-beta17 |
| ``` |
| |
| 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: |
| ```shell |
| kubectl port-forward service/devlake-ui 30090:4000 |
| ``` |
| and open another terminal: |
| ```shell |
| 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 |
| |
| ```shell |
| helm repo update |
| helm upgrade --install devlake devlake/devlake --version=0.16.0-beta17 |
| ``` |
| |
| ### Uninstall |
| |
| To uninstall/delete the `devlake` release: |
| |
| ```shell |
| 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.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 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 |
| ### 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. |
| 1. (Optional) Create a MySQL instance on AWS RDS following this [doc](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html). Skip this step if you would like to use an existing instance. |
| 2. 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](/Troubleshooting/Installation.md) or [create an issue](https://github.com/apache/incubator-devlake/issues) |