| <!doctype html> |
| <html lang="en-GB" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-GettingStarted/HelmSetup"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| <meta name="generator" content="Docusaurus v2.0.0-rc.1"> |
| <link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache DevLake - Open-Source Dev Data Platform for Productivity RSS Feed"> |
| <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache DevLake - Open-Source Dev Data Platform for Productivity Atom Feed"><title data-rh="true">Install via Helm | Apache DevLake - Open-Source Dev Data Platform for Productivity</title><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://devlake.apache.org/docs/GettingStarted/HelmSetup"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="keywords" content="Engineering Productivity, Open-Source Engineering, Open-Source Integration Tools, Data Integrates Platform, Open-Source Dev Platform, Open-Source Data Integrates, DevOps Tools Integrates, Open-Source DevOps Tools"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Install via Helm | Apache DevLake - Open-Source Dev Data Platform for Productivity"><meta data-rh="true" name="description" content="The steps to install Apache DevLake via Helm for Kubernetes |
| "><meta data-rh="true" property="og:description" content="The steps to install Apache DevLake via Helm for Kubernetes |
| "><link data-rh="true" rel="icon" href="/img/logo.svg"><link data-rh="true" rel="canonical" href="https://devlake.apache.org/docs/GettingStarted/HelmSetup"><link data-rh="true" rel="alternate" href="https://devlake.apache.org/docs/GettingStarted/HelmSetup" hreflang="en-GB"><link data-rh="true" rel="alternate" href="https://devlake.apache.org/zh/docs/GettingStarted/HelmSetup" hreflang="zh"><link data-rh="true" rel="alternate" href="https://devlake.apache.org/docs/GettingStarted/HelmSetup" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.0a4edf75.css"> |
| <link rel="preload" href="/assets/js/runtime~main.566cb87a.js" as="script"> |
| <link rel="preload" href="/assets/js/main.c5c21f25.js" as="script"> |
| </head> |
| <body class="navigation-with-keyboard"> |
| <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus"> |
| <div role="region"><a href="#" class="skipToContent_fXgn">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.svg" alt="apache devlake" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/logo.svg" alt="apache devlake" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache DevLake</b></a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Docs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/Overview/Introduction">Next</a></li><li><a class="dropdown__link" href="/docs/v1.0/Overview/Introduction">v1.0 (Stable)</a></li><li><a class="dropdown__link" href="/docs/v0.21/Overview/Introduction">v0.21</a></li><li><a class="dropdown__link" href="/docs/v0.20/Overview/Introduction">v0.20</a></li><li><a class="dropdown__link" href="/docs/v0.19/Overview/Introduction">v0.19</a></li><li><a class="dropdown__link" href="/docs/v0.18/Overview/Introduction">v0.18</a></li><li><a class="dropdown__link" href="/docs/v0.17/Overview/Introduction">v0.17</a></li><li><a class="dropdown__link" href="/docs/v0.16/Overview/Introduction">v0.16</a></li><li><a class="dropdown__link" href="/docs/v0.15/Overview/Introduction">v0.15</a></li></ul></div><a class="navbar__item navbar__link" href="/livedemo/EngineeringLeads/DORA">Use Cases</a><a class="navbar__item navbar__link" href="/community/">Community</a><a class="navbar__item navbar__link" href="/team">Team</a><a class="navbar__item navbar__link" href="/blogOverview">Blog</a><a href="https://github.com/apache/devlake" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub</a><a class="navbar__item navbar__link" href="/download">Download</a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">ASF</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Foundation</a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">License</a></li><li><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events</a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Privacy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship</a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks</a></li></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"><div class="navbar__search searchBarContainer_NW3z"><input placeholder="Search" aria-label="Search" class="navbar__search-input"><div class="loadingRing_RJI3 searchBarLoadingRing_YnHq"><div></div><div></div><div></div><div></div></div></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/Overview">Overview</a><button aria-label="Toggle the collapsible sidebar category 'Overview'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" href="/docs/GettingStarted">Getting Started</a><button aria-label="Toggle the collapsible sidebar category 'Getting Started'" type="button" class="clean-btn menu__caret"></button></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/GettingStarted/QuickStart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/GettingStarted/DockerComposeSetup">Install via Docker Compose</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/GettingStarted/HelmSetup">Install via Helm</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/GettingStarted/Upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/GettingStarted/Authentication">Security and Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/GettingStarted/Environment">Environment Variables</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/Config UI">Config UI</a><button aria-label="Toggle the collapsible sidebar category 'Config UI'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/DORA">DORA</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/Metrics">Metrics</a><button aria-label="Toggle the collapsible sidebar category 'Metrics'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/DataModels">Data Models</a><button aria-label="Toggle the collapsible sidebar category 'Data Models'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/DeveloperManuals">Developer Manuals</a><button aria-label="Toggle the collapsible sidebar category 'Developer Manuals'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/Plugins">Plugins</a><button aria-label="Toggle the collapsible sidebar category 'Plugins'" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" href="/docs/Troubleshooting">Troubleshooting</a><button aria-label="Toggle the collapsible sidebar category 'Troubleshooting'" type="button" class="clean-btn menu__caret"></button></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/docs/GettingStarted"><span itemprop="name">Getting Started</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Install via Helm</span><meta itemprop="position" content="2"></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: Next</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Install via Helm</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a class="hash-link" href="#prerequisites" title="Direct link to heading"></a></h2><ul><li>Helm >= 3.6.0</li><li>Kubernetes >= 1.19.0</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="quick-start">Quick Start<a class="hash-link" href="#quick-start" title="Direct link to heading"></a></h2><h4 class="anchor anchorWithStickyNavbar_LWe7" id="you-can-also-check-httpsgithubcomapachedevlake-helm-chart-to-make-contribution">You can also check <a href="https://github.com/apache/devlake-helm-chart" target="_blank" rel="noopener noreferrer">https://github.com/apache/devlake-helm-chart</a> to make contribution<a class="hash-link" href="#you-can-also-check-httpsgithubcomapachedevlake-helm-chart-to-make-contribution" title="Direct link to heading"></a></h4><h4 class="anchor anchorWithStickyNavbar_LWe7" id="to-install-or-upgrade-to-the-latest-version-please-check-here">To install or upgrade to the latest version, please check <a href="https://github.com/apache/devlake-helm-chart/releases" target="_blank" rel="noopener noreferrer">here</a><a class="hash-link" href="#to-install-or-upgrade-to-the-latest-version-please-check-here" title="Direct link to heading"></a></h4><h3 class="anchor anchorWithStickyNavbar_LWe7" id="install">Install<a class="hash-link" href="#install" title="Direct link to heading"></a></h3><p>To install the chart with release name <code>devlake</code>,follow these steps:</p><ol><li><p>Generate a secure encryption key using a method such as OpenSSL. For example, run the following command to generate a 128-character string consisting of uppercase letters:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Copy the generated string, set the value of the ENCRYPTION_SECRET environment variable by running the following command:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export ENCRYPTION_SECRET="copied string"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This command will set the <code>ENCRYPTION_SECRET</code> environment variable to the value of the copied string.</p><p><strong>Please make sure to keep the ENCRYPTION_SECRET safe as it is used to encrypt sensitive information in the database, such as personal access tokens and passwords. If ENCRYPTION_SECRET is lost, it may not be possible to decrypt this sensitive information.</strong></p></li><li><p>By default, the timezone is UTC. To customize the timezone settings, apply the <code>--set commonEnvs.TZ="your timezone",grafana.env.TZ="your timezone"</code> command. For further guidance, please refer to <a href="#faq">FAQ</a>.</p></li><li><p>By default, a random password is generated and stored in a Kubernetes Secret for the Grafana admin user. Alternatively, you can explicitly set the password via <code>--set grafana.adminPassword=<your password></code>. For further guidance, please refer to <a href="#faq">FAQ</a>.</p></li><li><p>Install the chart by running the following commands:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> devlake https://apache.github.io/devlake-helm-chart</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> devlake devlake/devlake --version</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">1.0</span><span class="token plain">-beta1 --set lake.encryptionSecret.secret</span><span class="token operator" style="color:#393A34">=</span><span class="token variable" style="color:#36acaa">$ENCRYPTION_SECRET</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><p>And visit your devlake from the node port (32001 by default).</p><p>http://YOUR-NODE-IP:32001</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="tips">Tips:<a class="hash-link" href="#tips" title="Direct link to heading"></a></h4><p>If you are using minikube inside your mac, please use the following command to forward the port:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl port-forward service/devlake-ui </span><span class="token number" style="color:#36acaa">30090</span><span class="token plain">:4000</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>and open another terminal:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl port-forward service/devlake-grafana </span><span class="token number" style="color:#36acaa">30091</span><span class="token plain">:3000</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then you can visit: |
| config-ui by url <code>http://YOUR-NODE-IP:30090</code> |
| grafana by url <code>http://YOUR-NODE-IP:30091</code></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade">Upgrade<a class="hash-link" href="#upgrade" title="Direct link to heading"></a></h3><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_S0QG"><p><strong>Back up your Grafana dashboards</strong> before upgrading if you have modified/customized any dashboards. You can re-import these dashboards to Grafana after the upgrade.</p></div></div><p><strong>If you are upgrading from DevLake v0.18.x or later versions:</strong></p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm upgrade devlake devlake/devlake --version</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">1.0</span><span class="token plain">-beta1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><br><p><strong>If you are upgrading from DevLake v0.17.x or earlier versions to v0.18.x or later versions:</strong></p><ol><li><p>Copy the ENCODE_KEY value from /app/config/.env of the lake pod (e.g. devlake-lake-0), and replace the <ENCRYPTION_SECRET> in the upgrade command below.</p></li><li><p>You may encounter the below error when upgrading because the built-in grafana has been replaced by the official grafana dependency. So you may need to delete the grafana deployment first.</p><blockquote><p>Error: UPGRADE FAILED: cannot patch "devlake-grafana" with kind Deployment: Deployment.apps "devlake-grafana" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map<!-- -->[string]<!-- -->string{"app.kubernetes.io/instance":"devlake", "app.kubernetes.io/name":"grafana"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable</p></blockquote><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm upgrade devlake devlake/devlake --version</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">1.0</span><span class="token plain">-beta1--set lake.encryptionSecret.secret</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34"><</span><span class="token plain">ENCRYPTION_SECRET</span><span class="token operator" style="color:#393A34">></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="uninstall">Uninstall<a class="hash-link" href="#uninstall" title="Direct link to heading"></a></h3><p>To uninstall/delete the <code>devlake</code> release:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm uninstall devlake</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="some-example-deployments">Some example deployments<a class="hash-link" href="#some-example-deployments" title="Direct link to heading"></a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-with-nodeport">Deploy with NodePort<a class="hash-link" href="#deploy-with-nodeport" title="Direct link to heading"></a></h3><p>Conditions:</p><ul><li>IP Address of Kubernetes node: 192.168.0.6</li><li>Want to visit devlake with port 30000.</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake --set service.uiPort=30000 --set lake.encryptionSecret.secret=$ENCRYPTION_SECRET</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>After deployed, visit devlake: <a href="http://192.168.0.6:30000" target="_blank" rel="noopener noreferrer">http://192.168.0.6:30000</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-with-ingress">Deploy with Ingress<a class="hash-link" href="#deploy-with-ingress" title="Direct link to heading"></a></h3><p>Conditions:</p><ul><li>I have already configured default ingress for the Kubernetes cluster</li><li>I want to use <a href="http://devlake.example.com" target="_blank" rel="noopener noreferrer">http://devlake.example.com</a> for visiting devlake</li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake --set "ingress.enabled=true,ingress.hostname=devlake.example.com" --set lake.encryptionSecret.secret=$ENCRYPTION_SECRET</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>After deployed, visit devlake: <a href="http://devlake.example.com" target="_blank" rel="noopener noreferrer">http://devlake.example.com</a>, and grafana at <a href="http://devlake.example.com/grafana" target="_blank" rel="noopener noreferrer">http://devlake.example.com/grafana</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-with-ingress-https">Deploy with Ingress (Https)<a class="hash-link" href="#deploy-with-ingress-https" title="Direct link to heading"></a></h3><p>Conditions:</p><ul><li>I have already configured ingress(class: nginx) for the Kubernetes cluster, and the https using 8443 port.</li><li>I want to use <a href="https://devlake-0.example.com:8443" target="_blank" rel="noopener noreferrer">https://devlake-0.example.com:8443</a> for visiting devlake.</li><li>The https certificates are generated by letsencrypt.org, and the certificate and key files: <code>cert.pem</code> and <code>key.pem</code></li></ul><p>First, create the secret:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">kubectl create secret tls ssl-certificate --cert cert.pem --key secret.pem</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then, deploy the devlake:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set "ingress.enabled=true,ingress.enableHttps=true,ingress.hostname=devlake-0.example.com" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set "ingress.className=nginx,ingress.httpsPort=8443" \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set "ingress.tlsSecretName=ssl-certificate"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set lake.encryptionSecret.secret=$ENCRYPTION_SECRET</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>After deployed, visit devlake: <a href="https://devlake-0.example.com:8443" target="_blank" rel="noopener noreferrer">https://devlake-0.example.com:8443</a>, and grafana at <a href="https://devlake-0.example.com:8443/grafana" target="_blank" rel="noopener noreferrer">https://devlake-0.example.com:8443/grafana</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="parameters">Parameters<a class="hash-link" href="#parameters" title="Direct link to heading"></a></h2><p>Some useful parameters for the chart, you could also check them in values.yaml</p><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>replicaCount</td><td>Replica Count for devlake, currently not used</td><td>1</td></tr><tr><td>imageTag</td><td>The version tag for all images</td><td>see Values.yaml</td></tr><tr><td>commonEnvs</td><td>The common envs for all pods except grafana</td><td>{TZ: "UTC"}</td></tr><tr><td>mysql.useExternal</td><td>If use external mysql server, set true</td><td>false</td></tr><tr><td>mysql.externalServer</td><td>External mysql server address</td><td>127.0.0.1</td></tr><tr><td>mysql.externalPort</td><td>External mysql server port</td><td>3306</td></tr><tr><td>mysql.username</td><td>username for mysql</td><td>merico</td></tr><tr><td>mysql.password</td><td>password for mysql</td><td>merico</td></tr><tr><td>mysql.database</td><td>database for mysql</td><td>lake</td></tr><tr><td>mysql.rootPassword</td><td>root password for mysql</td><td>admin</td></tr><tr><td>mysql.storage.type</td><td>storage type, pvc or hostpath</td><td>pvc</td></tr><tr><td>mysql.storage.class</td><td>storage class for mysql's volume</td><td>""</td></tr><tr><td>mysql.storage.size</td><td>volume size for mysql's data</td><td>5Gi</td></tr><tr><td>mysql.storage.hostPath</td><td>the host path if mysql.storage.type is hostpath</td><td>/devlake/mysql/data</td></tr><tr><td>mysql.image.repository</td><td>repository for mysql's image</td><td>mysql</td></tr><tr><td>mysql.image.tag</td><td>image tag for mysql's image</td><td>8</td></tr><tr><td>mysql.image.pullPolicy</td><td>pullPolicy for mysql's image</td><td>IfNotPresent</td></tr><tr><td>mysql.initContainers</td><td>init containers to run to complete before mysql</td><td>[]</td></tr><tr><td>mysql.extraLabels</td><td>extra labels for mysql's statefulset</td><td>{}</td></tr><tr><td>mysql.securityContext</td><td>pod security context values</td><td>{}</td></tr><tr><td>mysql.containerSecurityContext</td><td>container security context values</td><td>{}</td></tr><tr><td>mysql.service.type</td><td>mysql service type</td><td>ClusterIP</td></tr><tr><td>mysql.service.nodePort</td><td>specify mysql nodeport</td><td>""</td></tr><tr><td>grafana</td><td>dashboard, datasource, etc. settings for grafana, installed by grafana official chart</td><td></td></tr><tr><td>lake.image.repository</td><td>repository for lake's image</td><td>apache/devlake</td></tr><tr><td>lake.image.pullPolicy</td><td>pullPolicy for lake's image</td><td>Always</td></tr><tr><td>lake.port</td><td>the port of devlake backend</td><td>8080</td></tr><tr><td>lake.envs</td><td>initial envs for lake</td><td>see Values.yaml</td></tr><tr><td>lake.extraEnvsFromSecret</td><td>existing secret name of extra envs</td><td>""</td></tr><tr><td>lake.encryptionSecret.secretName</td><td>the k8s secret name for ENCRYPTION_SECRET</td><td>""</td></tr><tr><td>lake.encryptionSecret.secret</td><td>the secret for ENCRYPTION_SECRET</td><td>""</td></tr><tr><td>lake.encryptionSecret.autoCreateSecret</td><td>whether let the helm chart create the secret</td><td>true</td></tr><tr><td>lake.extraLabels</td><td>extra labels for lake's statefulset</td><td>{}</td></tr><tr><td>lake.securityContext</td><td>pod security context values</td><td>{}</td></tr><tr><td>lake.containerSecurityContext</td><td>container security context values</td><td>{}</td></tr><tr><td>ui.image.repository</td><td>repository for ui's image</td><td>apache/devlake-config-ui</td></tr><tr><td>ui.image.pullPolicy</td><td>pullPolicy for ui's image</td><td>Always</td></tr><tr><td>ui.basicAuth.enabled</td><td>If the basic auth in ui is enabled</td><td>false</td></tr><tr><td>ui.basicAuth.user</td><td>The user name for the basic auth</td><td>"admin"</td></tr><tr><td>ui.basicAuth.password</td><td>The password for the basic auth</td><td>"admin"</td></tr><tr><td>ui.basicAuth.autoCreateSecret</td><td>If let the helm chart create the secret</td><td>true</td></tr><tr><td>ui.basicAuth.secretName</td><td>The basic auth secret name</td><td>""</td></tr><tr><td>ui.extraLabels</td><td>extra labels for ui's statefulset</td><td>{}</td></tr><tr><td>ui.securityContext</td><td>pod security context values</td><td>{}</td></tr><tr><td>ui.containerSecurityContext</td><td>container security context values</td><td>{}</td></tr><tr><td>service.type</td><td>Service type for exposed service</td><td>NodePort</td></tr><tr><td>service.uiPort</td><td>Node port for config ui</td><td>32001</td></tr><tr><td>service.ingress.enabled</td><td>If enable ingress</td><td>false</td></tr><tr><td>service.ingress.enableHttps</td><td>If enable https</td><td>false</td></tr><tr><td>service.ingress.className</td><td>Name for ingressClass. leave empty for using default</td><td>""</td></tr><tr><td>service.ingress.hostname</td><td>The hostname/domainname for ingress</td><td>localhost</td></tr><tr><td>service.ingress.prefix</td><td>The prefix for endpoints, currently not used</td><td>/</td></tr><tr><td>service.ingress.tlsSecretName</td><td>The secret name for tls's certificate for https</td><td>""</td></tr><tr><td>service.ingress.httpPort</td><td>The http port for ingress</td><td>80</td></tr><tr><td>service.ingress.httpsPort</td><td>The https port for ingress</td><td>443</td></tr><tr><td>option.database</td><td>The database type, valids: mysql</td><td>mysql</td></tr><tr><td>option.connectionSecretName</td><td>The database connection details secret name</td><td>devlake-mysql-auth</td></tr><tr><td>option.autoCreateSecret</td><td>If let the helm chart create the secret</td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="faq">FAQ<a class="hash-link" href="#faq" title="Direct link to heading"></a></h2><ol><li>Can I use a managed Cloud database service instead of running database in docker?</li></ol><p>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.</p><p>a. (Optional) Create a MySQL instance on AWS RDS following this <a href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html" target="_blank" rel="noopener noreferrer">doc</a>, skip this step if you'd like to use an existing instance |
| b. Provide below values while install from helm:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">- `mysql.useExternal`: this should be `true`</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- `mysql.externalServer`: use your RDS instance's IP address or domain name.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- `mysql.externalPort`: use your RDS instance's database port.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- `mysql.username`: use your `username` for access RDS instance's DB</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- `mysql.password`: use your `password` for access RDS instance's DB</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- `mysql.database`: use your RDS instance's DB name, you may need to create a database first with `CREATE DATABASE <DB name>;`</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Here is the example:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo add devlake https://apache.github.io/devlake-helm-chart</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set mysql.useExternal=true \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set mysql.externalServer=db.example.com \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set mysql.externalPort=3306 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set mysql.username=admin \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set mysql.password=password_4_admin \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set mysql.database=devlake</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set lake.encryptionSecret.secret=$ENCRYPTION_SECRET</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="2"><li>Can I use a secret to store the database connection details?</li></ol><p>Yes, to do so, you need to have a secret in your Kubernetes Cluster that contains the following values:</p><ul><li><code>MYSQL_USER</code>: The user to connect to your DB.</li><li><code>MYSQL_PASSWORD</code>: The password to connect to your DB.</li><li><code>MYSQL_DATABASE</code>: The database to connect to your DB.</li><li><code>MYSQL_ROOT_PASSWORD</code>: The root password to connect to your DB.</li><li><code>DB_URL</code>: mysql://<code>username</code>:<code>password</code>@<code>dbserver</code>:<code>port</code>/<code>database</code>?charset=utf8mb4&parseTime=True</li></ul><p>The secret name needs to be the same as the value <code>option.connectionSecretName</code></p><ol start="3"><li>Can I use an external Grafana instead of running built-in Grafana?</li></ol><p>Yes, the devlake helm chart supports using an external Grafana. You can set the following values while installing from helm:</p><ul><li><code>grafana.enabled</code>: this should be <code>false</code></li><li><code>grafana.external.url</code>: use your Grafana's URL, e.g. <code>https://grafana.example.com</code></li></ul><p>Here is the example:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo add devlake https://apache.github.io/devlake-helm-chart</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set grafana.enabled=false \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set grafana.external.url=https://grafana.example.com</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set lake.encryptionSecret.secret=$ENCRYPTION_SECRET</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="4"><li>How to set the timezone? If not explicitly set, the default is UTC</li></ol><ul><li><code>commonEnvs.TZ</code>: your timezone</li><li><code>grafana.env.TZ</code>: your timezone</li></ul><p>Here is the example:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo add devlake https://apache.github.io/devlake-helm-chart</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set commonEnvs.TZ=<your timezone> \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set grafana.env.TZ=<your timezone></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="5"><li>How to set the Grafana admin password? If not explicitly set, a random password will be generated and saved in a Kubernetes Secret</li></ol><ul><li><code>grafana.adminPassword</code>: your password</li></ul><p>Here is the example:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">helm repo add devlake https://apache.github.io/devlake-helm-chart</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ENCRYPTION_SECRET=$(openssl rand -base64 2000 | tr -dc 'A-Z' | fold -w 128 | head -n 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">helm install devlake devlake/devlake \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set grafana.adminPassword=<your password> \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --set lake.encryptionSecret.secret=$ENCRYPTION_SECRET</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="troubleshooting">Troubleshooting<a class="hash-link" href="#troubleshooting" title="Direct link to heading"></a></h2><p>If you run into any problem, please check the <a href="/docs/Troubleshooting/Installation">Troubleshooting</a> or <a href="https://github.com/apache/incubator-devlake/issues" target="_blank" rel="noopener noreferrer">create an issue</a></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/devlake-website/edit/main/docs/GettingStarted/HelmSetup.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_vwxv"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/GettingStarted/DockerComposeSetup"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Install via Docker Compose</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/GettingStarted/Upgrade"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Upgrade</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#quick-start" class="table-of-contents__link toc-highlight">Quick Start</a><ul><li><a href="#install" class="table-of-contents__link toc-highlight">Install</a></li><li><a href="#upgrade" class="table-of-contents__link toc-highlight">Upgrade</a></li><li><a href="#uninstall" class="table-of-contents__link toc-highlight">Uninstall</a></li></ul></li><li><a href="#some-example-deployments" class="table-of-contents__link toc-highlight">Some example deployments</a><ul><li><a href="#deploy-with-nodeport" class="table-of-contents__link toc-highlight">Deploy with NodePort</a></li><li><a href="#deploy-with-ingress" class="table-of-contents__link toc-highlight">Deploy with Ingress</a></li><li><a href="#deploy-with-ingress-https" class="table-of-contents__link toc-highlight">Deploy with Ingress (Https)</a></li></ul></li><li><a href="#parameters" class="table-of-contents__link toc-highlight">Parameters</a></li><li><a href="#faq" class="table-of-contents__link toc-highlight">FAQ</a></li><li><a href="#troubleshooting" class="table-of-contents__link toc-highlight">Troubleshooting</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/GettingStarted">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/DataModels/DevLakeDomainLayerSchema">Data Models</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/Metrics">Engineering Metrics</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://join.slack.com/t/devlake-io/shared_invite/zt-1lkgbdmys-AU2azidzO1u~mtjlg9my7A" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/incubator-devlake/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issue Tracker</a></li><li class="footer__item"><a href="https://github.com/apache/devlake-website/issues" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub Issue Tracker For Docs</a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/apache/devlake" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub</a></li><li class="footer__item"><a href="https://twitter.com/ApacheDevLake" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter</a></li><li class="footer__item"><a class="footer__link-item" href="/community/trademark">Trademark Guidelines</a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"> |
| <div style="margin-top: 20px"> |
| <a href="https://incubator.apache.org/" target="_blank"><img style="height:40px; margin-bottom: 10px; margin-top: 10px" alt="Apache Software Foundation" src="/img/apache-incubator.svg"></a> |
| <p style="text-align:left; font-weight: 300; font-size: 0.8em;">Apache DevLake is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</p> |
| <p style="text-align:left; font-weight: 300; font-size: 0.8em;">Copyright ©2026 Apache DevLake, DevLake, Apache, the Apache feather logo and the Apache DevLake project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p> |
| </div> |
| </div></div></div></footer></div> |
| <script src="/assets/js/runtime~main.566cb87a.js"></script> |
| <script src="/assets/js/main.c5c21f25.js"></script> |
| </body> |
| </html> |