mirror of
https://github.com/openziti/zrok.git
synced 2024-12-27 17:19:13 +01:00
16 lines
70 KiB
HTML
16 lines
70 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-guides/self-hosting/v0.3_self_hosting_guide">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v2.2.0">
|
||
<title data-rh="true">Self-Hosting Guide for Linux | Zrok</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://docs.zrok.io/docs/guides/self-hosting/v0.3_self_hosting_guide/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><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="Self-Hosting Guide for Linux | Zrok"><meta data-rh="true" name="description" content="Walkthrough Video"><meta data-rh="true" property="og:description" content="Walkthrough Video"><link data-rh="true" rel="icon" href="/img/space-ziggy.png"><link data-rh="true" rel="canonical" href="https://docs.zrok.io/docs/guides/self-hosting/v0.3_self_hosting_guide/"><link data-rh="true" rel="alternate" href="https://docs.zrok.io/docs/guides/self-hosting/v0.3_self_hosting_guide/" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.zrok.io/docs/guides/self-hosting/v0.3_self_hosting_guide/" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://CO73R59OLO-dsn.algolia.net" crossorigin="anonymous"><link rel="search" type="application/opensearchdescription+xml" title="Zrok" href="/opensearch.xml"><link rel="stylesheet" href="/assets/css/styles.ddae00fa.css">
|
||
<link rel="preload" href="/assets/js/runtime~main.fb396183.js" as="script">
|
||
<link rel="preload" href="/assets/js/main.116a898b.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:"dark")}()</script><div id="__docusaurus">
|
||
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><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 href="https://zrok.io" target="_self" rel="noopener noreferrer" class="navbar__brand"><div class="navbar__logo"><img src="/img/space-ziggy.png" alt="Ziggy Goes to Space" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/space-ziggy.png" alt="Ziggy Goes to Space" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">zrok</b></a></div><div class="navbar__items navbar__items--right"><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/getting-started/">What is zrok?</a><a href="https://github.com/orgs/openziti/projects/16" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Roadmap<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/getting-started/">Docs</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/downloads/">Downloads</a><a href="https://github.com/openziti/zrok" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><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 dark mode)" aria-label="Switch between dark and light mode (currently dark mode)" aria-live="polite"><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"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" 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-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/getting-started/">Getting Started with zrok</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/core-features/">Core Features</a><button aria-label="Toggle the collapsible sidebar category 'Core Features'" 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/category/guides/">Guides</a><button aria-label="Toggle the collapsible sidebar category 'Guides'" 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-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--active" aria-expanded="true" tabindex="0" href="/docs/category/self-hosting/">Self Hosting</a><button aria-label="Toggle the collapsible sidebar category 'Self Hosting'" 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-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/guides/self-hosting/v0.3_self_hosting_guide/">Linux VPS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/guides/self-hosting/v0.3_nginx_tls_guide/">Nginx TLS</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist" aria-expanded="false" tabindex="0" href="/docs/category/docker-share/">Docker Share</a><button aria-label="Toggle the collapsible sidebar category 'Docker Share'" type="button" class="clean-btn menu__caret"></button></div></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/downloads/">Downloads</a></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/category/guides/"><span itemprop="name">Guides</span></a><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><a class="breadcrumbs__link" itemprop="item" href="/docs/category/self-hosting/"><span itemprop="name">Self Hosting</span></a><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Linux VPS</span><meta itemprop="position" content="3"></li></ul></nav><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"><h1>Self-Hosting Guide for Linux</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="walkthrough-video">Walkthrough Video<a class="hash-link" href="#walkthrough-video" title="Direct link to heading"></a></h2><iframe width="100%" height="315" src="https://www.youtube.com/embed/870A5dke_u4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe><h2 class="anchor anchorWithStickyNavbar_LWe7" id="before-you-begin">Before you Begin<a class="hash-link" href="#before-you-begin" title="Direct link to heading"></a></h2><p>This will get you up and running with a self-hosted instance of zrok. I'll assume you have the following:</p><ul><li>a Linux server with a public IP</li><li>a wildcard DNS record like <code>*.zrok.quigley.com</code> that resolves to the server IP</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="openziti-quickstart">OpenZiti Quickstart<a class="hash-link" href="#openziti-quickstart" title="Direct link to heading"></a></h2><p>The first step is to log in to your Linux server and run the OpenZiti quickstart. This will install a Ziti controller and Ziti router as systemd services.</p><p>I specifically used the "Host OpenZiti Anywhere" variant because it provides a public controller. We'll need that to use zrok with multiple devices across different networks.</p><p>Keep track of the generated admin password when running the <code>expressInstall</code> script. The script will prompt you like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><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:#F8F8F2"><span class="token plain">Do you want to keep the generated admin password 'XO0xHp75uuyeireO2xmmVlK91T7B9fpD'? (Y/n)</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>You'll need that generated password (<code>XO0xHp75uuyeireO2xmmVlK91T7B9fpD</code>) when building your <code>zrok</code> controller configuration.</p><p>BEGIN: <a href="https://docs.openziti.io/docs/learn/quickstarts/network/hosted" target="_blank" rel="noopener noreferrer">Run the OpenZiti Quickstart</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="install-zrok">Install zrok<a class="hash-link" href="#install-zrok" title="Direct link to heading"></a></h2><p>Download <a href="https://github.com/openziti/zrok/releases/latest" target="_blank" rel="noopener noreferrer">the latest release</a> from GitHub.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configure-the-controller">Configure the Controller<a class="hash-link" href="#configure-the-controller" title="Direct link to heading"></a></h2><p>Create a controller configuration file in <code>etc/ctrl.yml</code>. The controller does not provide server TLS, but you may front the server with a reverse proxy. This example will expose the non-TLS listener for the controller.</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># _____ __ ___ | | __</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># |_ / '__/ _ \| |/ /</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># / /| | | (_) | <</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># /___|_| \___/|_|\_\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># controller configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">v</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">admin</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># generate these admin tokens from a source of randomness, e.g. </span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># LC_ALL=C tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c32</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">secrets</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Q8V0LqnNb5wNX9kE1fgQ0H6VlcvJybB1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">endpoint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">host</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 0.0.0.0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">port</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token number">18080</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> zrok.db</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> sqlite3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">ziti</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">api_endpoint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://127.0.0.1:1280"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">username</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> admin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token key atrule">password</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"XO0xHp75uuyeireO2xmmVlK91T7B9fpD"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><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><p>The <code>admin</code> section defines privileged administrative credentials and must be set in the <code>ZROK_ADMIN_TOKEN</code> environment variable in shells where you want to run <code>zrok admin</code>.</p><p>The <code>endpoint</code> section defines where your <code>zrok</code> controller will listen. </p><p>The <code>store</code> section defines the local <code>sqlite3</code> database used by the controller.</p><p>The <code>ziti</code> section defines how the <code>zrok</code> controller should communicate with your OpenZiti installation. When using the OpenZiti quickstart, an administrative password will be generated; the <code>password</code> in the <code>ziti</code> stanza should reflect this password.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="environment-variables">Environment Variables<a class="hash-link" href="#environment-variables" title="Direct link to heading"></a></h2><p>The <code>zrok</code> binaries are configured to work with the global <code>zrok.io</code> service, and default to using <code>api.zrok.io</code> as the endpoint for communicating with the service.</p><p>To work with a self-hosted <code>zrok</code> deployment, you'll need to set the <code>ZROK_API_ENDPOINT</code> environment variable to point to the address where your <code>zrok</code> controller will be listening, according to <code>endpoint</code> in the configuration file above.</p><p>In my case, I've set:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">ZROK_API_ENDPOINT</span><span class="token operator">=</span><span class="token plain">http://localhost:18080</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="bootstrap-openziti-for-zrok">Bootstrap OpenZiti for zrok<a class="hash-link" href="#bootstrap-openziti-for-zrok" title="Direct link to heading"></a></h2><p>With your OpenZiti network running and your configuration saved to a local file (I refer to mine as <code>etc/ctrl.yml</code> in these examples), you're ready to bootstrap the Ziti network.</p><p>Use the <code>zrok admin bootstrap</code> command to bootstrap like this:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ zrok admin bootstrap etc/ctrl.yml </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.002</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO main.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*adminBootstrap</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.run: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.002</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller/store.Open: database connected</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.006</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller/store.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*Store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.migrate: applied </span><span class="token number">0</span><span class="token plain"> migrations</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.006</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.Bootstrap: connecting to the ziti edge management api</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.039</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.Bootstrap: creating identity </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> controller ziti access</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.071</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.Bootstrap: controller identity: jKd8AINSz</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.082</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertIdentity: asserted identity </span><span class="token string" style="color:rgb(255, 121, 198)">'jKd8AINSz'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.085</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertErpForIdentity: asserted erps </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'ctrl'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">jKd8AINSz</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.085</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.Bootstrap: creating identity </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> frontend ziti access</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.118</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.Bootstrap: frontend identity: sqJRAINSiB</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.119</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertIdentity: asserted identity </span><span class="token string" style="color:rgb(255, 121, 198)">'sqJRAINSiB'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.120</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertErpForIdentity: asserted erps </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'frontend'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">sqJRAINSiB</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.120</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> WARNING zrok/controller.Bootstrap: missing public frontend </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> ziti </span><span class="token function" style="color:rgb(80, 250, 123)">id</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'sqJRAINSiB'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> please use </span><span class="token string" style="color:rgb(255, 121, 198)">'zrok admin create frontend sqJRAINSiB public https://{token}.your.dns.name'</span><span class="token plain"> to create a frontend instance</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.123</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertZrokProxyConfigType: found </span><span class="token string" style="color:rgb(255, 121, 198)">'zrok.proxy.v1'</span><span class="token plain"> config </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">type</span><span class="token plain"> with </span><span class="token function" style="color:rgb(80, 250, 123)">id</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'33CyjNbIepkXHN5VzGDA8L'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.124</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertMetricsService: creating </span><span class="token string" style="color:rgb(255, 121, 198)">'metrics'</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">service</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.126</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertMetricsService: asserted </span><span class="token string" style="color:rgb(255, 121, 198)">'metrics'</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">service</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">5RpPZZ7T8bZf1ENjwGiPc3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.128</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertMetricsSerp: creating </span><span class="token string" style="color:rgb(255, 121, 198)">'metrics'</span><span class="token plain"> serp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.130</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertMetricsSerp: asserted </span><span class="token string" style="color:rgb(255, 121, 198)">'metrics'</span><span class="token plain"> serp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.134</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertCtrlMetricsBind: creating </span><span class="token string" style="color:rgb(255, 121, 198)">'ctrl-metrics-bind'</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">service</span><span class="token plain"> policy</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.135</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertCtrlMetricsBind: asserted </span><span class="token string" style="color:rgb(255, 121, 198)">'ctrl-metrics-bind'</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">service</span><span class="token plain"> policy</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.138</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertFrontendMetricsDial: creating </span><span class="token string" style="color:rgb(255, 121, 198)">'frontend-metrics-dial'</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">service</span><span class="token plain"> policy</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.140</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.assertFrontendMetricsDial: asserted </span><span class="token string" style="color:rgb(255, 121, 198)">'frontend-metrics-dial'</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">service</span><span class="token plain"> policy</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.140</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO main.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*adminBootstrap</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.run: bootstrap complete</span><span class="token operator">!</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>The <code>zrok admin bootstrap</code> command configures the <code>zrok</code> database, the necessary OpenZiti identities, and all of the OpenZiti policies required to run a <code>zrok</code> service.</p><p>Notice this warning:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><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:#F8F8F2"><span class="token plain">[ 0.120] WARNING zrok/controller.Bootstrap: missing public frontend for ziti id 'sqJRAINSiB'; please use 'zrok admin create frontend sqJRAINSiB public https://{token}.your.dns.name' to create a frontend instance</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="run-zrok-controller">Run zrok Controller<a class="hash-link" href="#run-zrok-controller" title="Direct link to heading"></a></h2><p>The <code>zrok</code> bootstrap process wants us to create a "public frontend" for our service. <code>zrok</code> uses public frontends to allow users to specify where they would like public traffic to ingress from.</p><p>The <code>zrok admin create frontend</code> command requires a running <code>zrok</code> controller, so let's start that up first:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ zrok controller etc/ctrl.yml </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.003</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO main.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*controllerCommand</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.run: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.016</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.inspectZiti: inspecting ziti controller configuration</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.048</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.findZrokProxyConfigType: found </span><span class="token string" style="color:rgb(255, 121, 198)">'zrok.proxy.v1'</span><span class="token plain"> config </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">type</span><span class="token plain"> with </span><span class="token function" style="color:rgb(80, 250, 123)">id</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'33CyjNbIepkXHN5VzGDA8L'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.048</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller/store.Open: database connected</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.048</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller/store.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*Store</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.migrate: applied </span><span class="token number">0</span><span class="token plain"> migrations</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.049</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*metricsAgent</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.run: starting</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.064</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/rest_server_zrok.setupGlobalMiddleware: configuring</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.064</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/ui.StaticBuilder: building</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.065</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/rest_server_zrok.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*Server</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.Logf: Serving zrok at http://</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">::</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain">:18080</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.085</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/controller.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*metricsAgent</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.listen: started</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="create-zrok-frontend">Create zrok Frontend<a class="hash-link" href="#create-zrok-frontend" title="Direct link to heading"></a></h2><p>With our <code>ZROK_ADMIN_TOKEN</code> and <code>ZROK_API_ENDPOINT</code> environment variables set, we can create our public frontend like this:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ zrok admin create frontend sqJRAINSiB public http://</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain">token</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain">.zrok.quigley.com:8080</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.037</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO main.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*adminCreateFrontendCommand</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.run: created global public frontend </span><span class="token string" style="color:rgb(255, 121, 198)">'WEirJNHVlcW9'</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>The id of the frontend was emitted earlier in by the zrok controller when we ran the bootstrap command. If you don't have that log message the you can find the id again with the <code>ziti</code> CLI like this:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># initialize the Ziti quickstart env</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">source</span><span class="token plain"> ~/.ziti/quickstart/</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable function" style="color:rgb(80, 250, 123);font-style:italic">hostname</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> -s</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain">/</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token variable function" style="color:rgb(80, 250, 123);font-style:italic">hostname</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic"> -s</span><span class="token variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token plain">.env</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># login as admin</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">zitiLogin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># list Ziti identities created by the quickstart and bootstrap</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ziti edge list identities</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>The id is shown for the "frontend" identity. </p><p>Nice work! The <code>zrok</code> controller is fully configured now that you have created the zrok frontend.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configure-the-public-frontend">Configure the Public Frontend<a class="hash-link" href="#configure-the-public-frontend" title="Direct link to heading"></a></h2><p>Create <code>etc/http-frontend.yml</code>. You must reiterate the pattern you expressed in the public frontend URL template as a <code>host_match</code> pattern, and you may change the default address where the frontend will listen for public access requests. The frontend does not provide server TLS, but you may front the server with a reverse proxy. It is essential the reverse proxy forwards the <code>Host</code> header supplied by the viewer. This example will expose the non-TLS listener for the frontend.</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token key atrule">host_match</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> zrok.quigley.com</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">address</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> 0.0.0.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">8080</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="start-public-frontend">Start Public Frontend<a class="hash-link" href="#start-public-frontend" title="Direct link to heading"></a></h2><p>In another terminal window, run:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ zrok access public etc/http-frontend.yml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.002</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO main.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">*accessPublicCommand</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">.run: </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"> </span><span class="token number">0.002</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> INFO zrok/endpoints/public_frontend.newMetricsAgent: loaded </span><span class="token string" style="color:rgb(255, 121, 198)">'frontend'</span><span class="token plain"> identity</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 process uses the <code>frontend</code> identity created during the bootstrap process to provide public access for the <code>zrok</code> deployment. It is expected that the configured listener for this <code>frontend</code> corresponds to the DNS template specified when creating the public frontend record above.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="invite-yourself">Invite Yourself<a class="hash-link" href="#invite-yourself" title="Direct link to heading"></a></h2><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ zrok invite</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">New Email: user@domain.com</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Confirm Email: user@domain.com</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">invitation sent to </span><span class="token string" style="color:rgb(255, 121, 198)">'user@domain.com'</span><span class="token operator">!</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>If you look at the console output from your <code>zrok</code> controller, you'll see a message like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><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:#F8F8F2"><span class="token plain">[ 238.168] INFO zrok/controller.(*inviteHandler).Handle: account request for 'user@domain.com' has registration token 'U2Ewt1UCn3ql'</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>You can access your <code>zrok</code> controller's registration UI by pointing a web browser at:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><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:#F8F8F2"><span class="token plain">http://localhost:18080/register/U2Ewt1UCn3ql</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>The UI will ask you to set a password for your new account. Go ahead and do that.</p><p>After doing that, I see the following output in my controller console:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><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:#F8F8F2"><span class="token plain">[ 516.778] INFO zrok/controller.(*registerHandler).Handle: created account 'user@domain.com' with token 'SuGzRPjVDIcF'</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>Keep track of the token listed above (<code>SuGzRPjVDIcF</code>). We'll use this to enable our shell for this <code>zrok</code> deployment.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enable-your-shell">Enable Your Shell<a class="hash-link" href="#enable-your-shell" title="Direct link to heading"></a></h2><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">$ zrok </span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">enable</span><span class="token plain"> SuGzRPjVDIcF</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">zrok environment </span><span class="token string" style="color:rgb(255, 121, 198)">'2AS1WZ3Sz'</span><span class="token plain"> enabled </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'SuGzRPjVDIcF'</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>Congratulations. You have a working <code>zrok</code> environment!</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/openziti/zrok/blob/main/docs/../docs/guides/self-hosting/v0.3_self_hosting_guide.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/category/self-hosting/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Self Hosting</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/guides/self-hosting/v0.3_nginx_tls_guide/"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Nginx TLS</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="#walkthrough-video" class="table-of-contents__link toc-highlight">Walkthrough Video</a></li><li><a href="#before-you-begin" class="table-of-contents__link toc-highlight">Before you Begin</a></li><li><a href="#openziti-quickstart" class="table-of-contents__link toc-highlight">OpenZiti Quickstart</a></li><li><a href="#install-zrok" class="table-of-contents__link toc-highlight">Install zrok</a></li><li><a href="#configure-the-controller" class="table-of-contents__link toc-highlight">Configure the Controller</a></li><li><a href="#environment-variables" class="table-of-contents__link toc-highlight">Environment Variables</a></li><li><a href="#bootstrap-openziti-for-zrok" class="table-of-contents__link toc-highlight">Bootstrap OpenZiti for zrok</a></li><li><a href="#run-zrok-controller" class="table-of-contents__link toc-highlight">Run zrok Controller</a></li><li><a href="#create-zrok-frontend" class="table-of-contents__link toc-highlight">Create zrok Frontend</a></li><li><a href="#configure-the-public-frontend" class="table-of-contents__link toc-highlight">Configure the Public Frontend</a></li><li><a href="#start-public-frontend" class="table-of-contents__link toc-highlight">Start Public Frontend</a></li><li><a href="#invite-yourself" class="table-of-contents__link toc-highlight">Invite Yourself</a></li><li><a href="#enable-your-shell" class="table-of-contents__link toc-highlight">Enable Your Shell</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2023 NetFoundry Inc. Built with Docusaurus.</div></div></div></footer></div>
|
||
<script src="/assets/js/runtime~main.fb396183.js"></script>
|
||
<script src="/assets/js/main.116a898b.js"></script>
|
||
</body>
|
||
</html> |