Merge pull request #1250 from openziti/sidebar-edits

adjust sidebar and buckets
This commit is contained in:
Nico Alba
2026-05-16 08:09:23 -06:00
committed by GitHub
26 changed files with 106 additions and 52 deletions
-4
View File
@@ -2,11 +2,7 @@
sidebar_label: Concepts
---
import DocCardList from '@theme/DocCardList';
# Concepts
zrok is built around a small set of core concepts: accounts and environments, shares, namespaces, and the agent.
Understanding these will give you a mental model for how zrok works and how its parts fit together.
<DocCardList />
+2 -2
View File
@@ -6,7 +6,7 @@ sidebar_position: 10
:::info v2.0 feature
This page describes the v2.0 namespace and name system. If you're migrating from v1.x, see the [v2 migration
guide](/how-tos/migrate-v1-to-v2.md) for details on how this replaces the old `zrok reserve` workflow.
guide](/how-tos/migration/migrate-v1-to-v2.md) for details on how this replaces the old `zrok reserve` workflow.
:::
By default, when you create a public or private share using `zrok2 share`, zrok assigns it a randomly generated _share
@@ -15,7 +15,7 @@ token_. When you terminate the `zrok2 share` command, the share is deleted and t
In v2.0, zrok introduces a more powerful system for creating persistent shares through **namespaces** and **names**.
To create and manage reserved names, see [Manage reserved names](../how-tos/manage-reserved-names.md).
To create and manage reserved names, see [Manage reserved names](../how-tos/shares/manage-reserved-names.md).
## Understand namespaces and names
+1 -1
View File
@@ -24,7 +24,7 @@ In this step, you'll create a zrok account and get the account token you need to
If you've deployed your own zrok instance, there are two ways to create an account:
- **Self-service** — If your instance has invitations enabled, run `zrok2 invite` and follow the prompts to register
with your email address. See [Invitations](../self-hosting/self-service-invite.mdx) for details.
with your email address. See [Invitations](../self-hosting/user-management/self-service-invite.mdx) for details.
- **Admin** — An administrator can create an account directly:
```bash
@@ -0,0 +1,8 @@
{
"label": "Migration",
"position": 4,
"link": {
"type": "generated-index",
"description": "Guides for migrating from older versions of zrok and transitioning away from removed features."
}
}
@@ -10,8 +10,8 @@ The `vpn` backend mode was removed in `v1.1.11` due to dependency conflicts with
If you were using the VPN backend mode, consider these alternatives depending on your use case:
- [Share TCP and UDP services](./shares/share-tcp-udp.mdx): Use `tcpTunnel` to forward a specific TCP or UDP port
- [Use SOCKS proxy mode](./shares/socks-proxy-mode.mdx): Use `socks` for dynamic forwarding to multiple services
- [Share TCP and UDP services](../shares/share-tcp-udp.mdx): Use `tcpTunnel` to forward a specific TCP or UDP port
- [Use SOCKS proxy mode](../shares/socks-proxy-mode.mdx): Use `socks` for dynamic forwarding to multiple services
## When to use each mode
@@ -305,7 +305,7 @@ If you run into issues during migration:
2. Use `zrok2 list namespaces` to see what namespaces are available to you
3. Use `zrok2 list names` to see your current names
4. Review the error messages - v2.0 has improved error reporting
5. Consult the [self-hosting guides](@zrokdocs/category/self-hosting/) if you manage your own instance
5. Consult the [self-hosting guides](@zrokdocs/category/host-your-own-zrok/) if you manage your own instance
6. Check the [concepts documentation](/concepts/index.mdx) for deeper understanding
7. Reach out on the [OpenZiti Discourse](https://openziti.discourse.group) for help
+5 -1
View File
@@ -1,4 +1,8 @@
{
"label": "Shares",
"position": 2
"position": 2,
"link": {
"type": "generated-index",
"description": "How-to guides for creating and managing shares — HTTP proxies, file sharing, TCP/UDP tunnels, SOCKS proxying, permission modes, and reserved names."
}
}
@@ -4,8 +4,8 @@ sidebar_label: Manage reserved names
# Manage reserved names
Reserved [names](../concepts/namespaces.md) give your shares a persistent, human-readable identifier that survives
across share sessions. [Namespaces](../concepts/namespaces.md) are the containers that organize names. This how-to
Reserved [names](../../concepts/namespaces.md) give your shares a persistent, human-readable identifier that survives
across share sessions. [Namespaces](../../concepts/namespaces.md) are the containers that organize names. This how-to
covers the full lifecycle: creating names, using them with shares, managing them, and configuring a default namespace.
## Create a reserved name
@@ -47,7 +47,7 @@ zrok2 share public localhost:8080 -n <namespaceToken>:api
```
The name can be either reserved (created with `zrok2 create name`) or ephemeral (created on-the-fly when the share
starts). See [Reserved names and namespaces](../concepts/namespaces.md) for a full explanation of the difference.
starts). See [Reserved names and namespaces](../../concepts/namespaces.md) for a full explanation of the difference.
### Private shares with custom tokens
@@ -63,10 +63,10 @@ Access it from another environment:
zrok2 access private myapi-prod
```
![zrok2 share private --share-token terminal output](../images/zrok_share_reserved.png)
![zrok2 share private --share-token terminal output](../../images/zrok_share_reserved.png)
When using the zrok agent, shares with `--share-token` automatically restart after abnormal exit or agent restart.
See [zrok agent overview](../concepts/agent.md) for more details.
See [zrok agent overview](../../concepts/agent.md) for more details.
### Multiple names on one share
@@ -10,7 +10,7 @@ and PostgreSQL, using official container images with runtime configuration via e
:::info Single-host deployment
This compose stack runs one frontend instance. For higher throughput or availability, run multiple frontend instances
behind a reverse proxy (e.g., Caddy or Traefik). See [Scaling frontends](@zrokdocs/self-hosting/scaling-frontends) for
behind a reverse proxy (e.g., Caddy or Traefik). See [Scaling frontends](@zrokdocs/self-hosting/frontends/scaling-frontends) for
details.
:::
@@ -12,7 +12,7 @@ frontend, and metrics bridge. This is the simplest production-ready configuratio
:::info Single-host deployment
To scale the frontend for higher throughput or availability, see
[Scaling frontends](@zrokdocs/self-hosting/scaling-frontends).
[Scaling frontends](@zrokdocs/self-hosting/frontends/scaling-frontends).
:::
## Prerequisites
@@ -519,7 +519,7 @@ Replace `<frontend-token>` with the token from [Step 6](#step-6-create-a-dynamic
```
For a complete reference of all frontend options including OAuth, see the
[Dynamic proxy frontend migration guide](@zrokdocs/self-hosting/dynamic-proxy).
[Dynamic proxy frontend migration guide](@zrokdocs/self-hosting/frontends/dynamic-proxy).
### Step 11: Start the frontend
@@ -746,7 +746,7 @@ sudo journalctl -u zrok2-controller --since "5 minutes ago"
If a service fails to start, verify the configuration file syntax and that the OpenZiti network is reachable.
For dynamic frontend troubleshooting (AMQP connectivity, gRPC errors, mapping issues), see [Dynamic proxy frontend
migration guide](@zrokdocs/self-hosting/dynamic-proxy#troubleshooting).
migration guide](@zrokdocs/self-hosting/frontends/dynamic-proxy#troubleshooting).
For metrics troubleshooting (InfluxDB connectivity, AMQP queues, event flow), see [Configure
metrics](@zrokdocs/self-hosting/metrics-and-limits/configure-metrics).
@@ -0,0 +1,8 @@
{
"label": "Frontends",
"position": 20,
"link": {
"type": "generated-index",
"description": "Configure and operate zrok frontends, including error pages, interstitial pages, dynamic proxy, and horizontal scaling."
}
}
@@ -304,7 +304,7 @@ Configuration parameters:
#### OAuth configuration (optional)
To enable OAuth authentication, add an `oauth` section. For detailed OAuth setup, see the [OAuth Configuration Guide](oauth/oauth-public-frontend.md).
To enable OAuth authentication, add an `oauth` section. For detailed OAuth setup, see the [OAuth Configuration Guide](../oauth/oauth-public-frontend.md).
```yaml
oauth:
@@ -562,7 +562,7 @@ oauth:
supports_pkce: true
```
For detailed OAuth provider configuration, see the [OAuth Configuration Guide](oauth/oauth-public-frontend.md).
For detailed OAuth provider configuration, see the [OAuth Configuration Guide](../oauth/oauth-public-frontend.md).
## Namespace management
@@ -811,7 +811,7 @@ This allows you to isolate mapping updates between different deployment environm
Integrate with your monitoring stack:
1. **RabbitMQ metrics**: Use the management plugin to monitor queue depth, message rates, and connections
2. **zrok controller metrics**: if you've configured InfluxDB metrics (see [Configuring Metrics](metrics-and-limits/configure-metrics.md)), monitor:
2. **zrok controller metrics**: if you've configured InfluxDB metrics (see [Configuring Metrics](../metrics-and-limits/configure-metrics.md)), monitor:
- Frontend registration count
- Mapping update frequency
- gRPC request latency
@@ -819,8 +819,8 @@ Integrate with your monitoring stack:
## Additional resources
- [OAuth Configuration Guide](oauth/oauth-public-frontend.md) - detailed OAuth provider setup
- [Configuring Metrics](metrics-and-limits/configure-metrics.md) - InfluxDB integration for monitoring
- [OAuth Configuration Guide](../oauth/oauth-public-frontend.md) - detailed OAuth provider setup
- [Configuring Metrics](../metrics-and-limits/configure-metrics.md) - InfluxDB integration for monitoring
- [Interstitial Page Configuration](interstitial-page.md) - customizing the interstitial page
- [Error Pages](error-pages.md) - customizing error pages
@@ -20,7 +20,7 @@ By default, if you don't enable interstitial pages on a public frontend, your se
The following diagram shows how the interstitial mechanism works—the share configuration rendezvous between the
controller and a frontend:
![zrok_interstitial_rendezvous](../images/zrok_interstitial_rendezvous.png)
![zrok_interstitial_rendezvous](../../images/zrok_interstitial_rendezvous.png)
Every zrok share has a *config* recorded in the underlying OpenZiti network. The config is of type `zrok.proxy.v1`. The
frontend uses the information in this config to understand the disposition of the share. The config can contain an
@@ -1,3 +1,7 @@
---
sidebar_position: 90
---
# Use another zrok instance
:::note
@@ -0,0 +1,8 @@
{
"label": "User management",
"position": 80,
"link": {
"type": "generated-index",
"description": "Manage user accounts on your self-hosted zrok instance, including organizations and self-service invitations."
}
}
@@ -13,7 +13,7 @@ giving them visibility into the environments, shares, and accesses created withi
## Configure an organization
Managing organizations requires a site-level `ZROK2_ADMIN_TOKEN`. See the [self-hosting
guide](deployment/linux.mdx#step-2-configure-the-controller) for details on configuring admin tokens.
guide](../deployment/linux.mdx#step-2-configure-the-controller) for details on configuring admin tokens.
### Create an organization
@@ -34,20 +34,20 @@ The `zrok2 invite` command walks users through these steps:
2. Check the email you provided. Click the link in the message to set a password for your new account.
![Enter a Password](../images/zrok_verify.png)
![Enter a Password](../../images/zrok_verify.png)
3. Enter a password, confirm it, and click **Register Account**.
![Successful Registration](../images/zrok_registration_success.png)
![Successful Registration](../../images/zrok_registration_success.png)
You can ignore the "enable your shell for zrok" section for now.
4. Click the **zrok web portal** link.
![Web Login](../images/zrok_web_login.png)
![Web Login](../../images/zrok_web_login.png)
5. Click **Log In** to enter the zrok web console.
![Web Console; Empty](../images/zrok_web_console_empty.png)
![Web Console; Empty](../../images/zrok_web_console_empty.png)
Congratulations! Your zrok account is ready to go!
+11 -10
View File
@@ -10,8 +10,8 @@ export function zrokRedirects(routeBasePath: string = 'docs/zrok'): PluginConfig
redirects: [
// getting-started → get-started
{ to: `${p}/get-started/`, from: [`${p}/getting-started`] },
// category/guides → category/how-to-guides
{ to: `${p}/category/how-to-guides`, from: [`${p}/category/guides`] },
// category/guides → intro (how-to-guides category no longer exists)
{ to: `${p}/intro`, from: [`${p}/category/guides`, `${p}/category/how-to-guides`] },
// guides/* → how-tos/*
{ to: `${p}/how-tos/agent/`, from: [`${p}/guides/agent/`] },
{ to: `${p}/how-tos/agent/configure-http-healthcheck`, from: [`${p}/guides/agent/http-healthcheck`, `${p}/how-tos/agent/http-healthcheck`] },
@@ -26,9 +26,9 @@ export function zrokRedirects(routeBasePath: string = 'docs/zrok'): PluginConfig
{ to: `${p}/how-tos/install/linux`, from: [`${p}/guides/install/linux`] },
{ to: `${p}/how-tos/install/macos`, from: [`${p}/guides/install/macos`] },
{ to: `${p}/how-tos/install/windows`, from: [`${p}/guides/install/windows`] },
{ to: `${p}/how-tos/configure-permission-modes`, from: [`${p}/guides/permission-modes`, `${p}/how-tos/permission-modes`] },
{ to: `${p}/how-tos/migrate-v1-to-v2`, from: [`${p}/guides/v2-migration-guide`, `${p}/how-tos/v2-migration-guide`] },
{ to: `${p}/how-tos/migrate-from-vpn`, from: [`${p}/guides/vpn`, `${p}/how-tos/vpn`] },
{ to: `${p}/how-tos/shares/configure-permission-modes`, from: [`${p}/guides/permission-modes`, `${p}/how-tos/permission-modes`, `${p}/how-tos/configure-permission-modes`] },
{ to: `${p}/how-tos/migration/migrate-v1-to-v2`, from: [`${p}/guides/v2-migration-guide`, `${p}/how-tos/v2-migration-guide`, `${p}/how-tos/migrate-v1-to-v2`] },
{ to: `${p}/how-tos/migration/migrate-from-vpn`, from: [`${p}/guides/vpn`, `${p}/how-tos/vpn`, `${p}/how-tos/migrate-from-vpn`] },
// concepts/* → concepts/*
{ to: `${p}/concepts/private-shares`, from: [`${p}/concepts/private`, `${p}/concepts/sharing-private`, `${p}/concepts/shares/private`] },
{ to: `${p}/concepts/public-shares`, from: [`${p}/concepts/public`, `${p}/concepts/sharing-public`, `${p}/concepts/shares/public`] },
@@ -38,10 +38,10 @@ export function zrokRedirects(routeBasePath: string = 'docs/zrok'): PluginConfig
{ to: `${p}/concepts/namespaces`, from: [`${p}/concepts/sharing-reserved`] },
// guides/self-hosting/* → self-hosting/*
{ to: `${p}/self-hosting/deployment/docker`, from: [`${p}/guides/self-hosting/docker`, `${p}/self-hosting/docker`] },
{ to: `${p}/self-hosting/dynamic-proxy`, from: [`${p}/guides/self-hosting/dynamicProxy`] },
{ to: `${p}/self-hosting/error-pages`, from: [`${p}/guides/self-hosting/error-pages`] },
{ to: `${p}/self-hosting/frontends/dynamic-proxy`, from: [`${p}/guides/self-hosting/dynamicProxy`, `${p}/self-hosting/dynamic-proxy`] },
{ to: `${p}/self-hosting/frontends/error-pages`, from: [`${p}/guides/self-hosting/error-pages`, `${p}/self-hosting/error-pages`] },
{ to: `${p}/self-hosting/instance-configuration`, from: [`${p}/guides/self-hosting/instance-configuration`] },
{ to: `${p}/self-hosting/interstitial-page`, from: [`${p}/guides/self-hosting/interstitial-page`] },
{ to: `${p}/self-hosting/frontends/interstitial-page`, from: [`${p}/guides/self-hosting/interstitial-page`, `${p}/self-hosting/interstitial-page`] },
{ to: `${p}/self-hosting/deployment/kubernetes`, from: [`${p}/guides/self-hosting/kubernetes`, `${p}/self-hosting/kubernetes`] },
{ to: `${p}/self-hosting/deployment/linux`, from: [`${p}/guides/self-hosting/self_hosting_guide`, `${p}/guides/self-hosting/linux`, `${p}/self-hosting/linux/`] },
{ to: `${p}/self-hosting/deployment/linux`, from: [`${p}/guides/self-hosting/nginx_tls_guide/`, `${p}/guides/self-hosting/linux/nginx`] },
@@ -52,9 +52,10 @@ export function zrokRedirects(routeBasePath: string = 'docs/zrok'): PluginConfig
{ to: `${p}/self-hosting/oauth/integrations/github`, from: [`${p}/guides/self-hosting/oauth/integrations/github`] },
{ to: `${p}/self-hosting/oauth/integrations/google`, from: [`${p}/guides/self-hosting/oauth/integrations/google`] },
{ to: `${p}/self-hosting/oauth/integrations/oidc`, from: [`${p}/guides/self-hosting/oauth/integrations/oidc`] },
{ to: `${p}/self-hosting/organizations`, from: [`${p}/guides/self-hosting/organizations`] },
{ to: `${p}/category/host-your-own-zrok`, from: [`${p}/category/self-hosting`] },
{ to: `${p}/self-hosting/user-management/organizations`, from: [`${p}/guides/self-hosting/organizations`, `${p}/self-hosting/organizations`] },
{ to: `${p}/concepts/personalized-frontend`, from: [`${p}/guides/self-hosting/personalized-frontend`, `${p}/self-hosting/personalized-frontend`] },
{ to: `${p}/self-hosting/self-service-invite`, from: [`${p}/guides/self-hosting/self-service-invite`] },
{ to: `${p}/self-hosting/user-management/self-service-invite`, from: [`${p}/guides/self-hosting/self-service-invite`, `${p}/self-hosting/self-service-invite`] },
],
},
];
+1 -1
View File
@@ -19,7 +19,7 @@
"@docusaurus/preset-classic": "^3.7.0",
"@docusaurus/theme-mermaid": "^3.8.1",
"@mdx-js/react": "^3.0.1",
"@netfoundry/docusaurus-theme": "0.10.20",
"@netfoundry/docusaurus-theme": "0.12.2",
"clsx": "^1.2.1",
"prism-react-renderer": "^1.3.5",
"react": "^18.3.1",
+27 -2
View File
@@ -1,8 +1,33 @@
import type { SidebarsConfig } from '@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }],
docsSidebar: [
{type: 'html', value: '<span class="menu__link">INTRO</span>', className: 'sidebar-title'},
{type: 'doc', id: 'intro'},
{type: 'category', label: 'Get started', link: {type: 'doc', id: 'get-started/index'}, items: [
{type: 'doc', id: 'get-started/get-token'},
{type: 'doc', id: 'get-started/install-zrok2'},
{type: 'doc', id: 'get-started/enable-env'},
{type: 'doc', id: 'get-started/create-share'},
{type: 'doc', id: 'get-started/set-up-agent'},
]},
{type: 'html', value: '<span class="menu__link">HOW-TO</span>', className: 'sidebar-title'},
{type: 'autogenerated', dirName: 'how-tos'},
{type: 'html', value: '<span class="menu__link">LEARN</span>', className: 'sidebar-title'},
{type: 'category', label: 'Share types', link: {type: 'generated-index', description: 'Understand the two share types zrok supports — public and private — and how backend modes control what each share exposes.'}, items: [
{type: 'doc', id: 'concepts/private-shares'},
{type: 'doc', id: 'concepts/public-shares'},
{type: 'doc', id: 'concepts/backend-modes/index'},
]},
{type: 'doc', id: 'concepts/agent'},
{type: 'doc', id: 'concepts/environments'},
{type: 'doc', id: 'concepts/namespaces'},
{type: 'doc', id: 'concepts/personalized-frontend'},
{type: 'html', value: '<span class="menu__link">MYZROK</span>', className: 'sidebar-title'},
{type: 'autogenerated', dirName: 'myzrok'},
{type: 'html', value: '<span class="menu__link">SELF-HOSTING</span>', className: 'sidebar-title'},
{type: 'category', label: 'Host your own zrok', link: {type: 'generated-index', description: 'Deploy and operate your own zrok instance on Linux, Docker, or Kubernetes. These guides cover configuration, OAuth authentication, metrics and limits, organizations, and user management.'}, items: [{type: 'autogenerated', dirName: 'self-hosting'}]},
],
};
export default sidebars;
+4 -4
View File
@@ -2363,10 +2363,10 @@
dependencies:
langium "3.3.1"
"@netfoundry/docusaurus-theme@0.7.4":
version "0.7.4"
resolved "https://registry.yarnpkg.com/@netfoundry/docusaurus-theme/-/docusaurus-theme-0.7.4.tgz#b43ff4b0dfd7814724ee3170e009728d77b26fbd"
integrity sha512-LV5tbuJT/mYxuPlOtXP/HuJc/Ft90j4mH6mzcKBOvX/iWZy04N7zcU4EPHHn5BuqGpcGxauqO3bxvgoBjwB4hQ==
"@netfoundry/docusaurus-theme@0.12.2":
version "0.12.2"
resolved "https://registry.yarnpkg.com/@netfoundry/docusaurus-theme/-/docusaurus-theme-0.12.2.tgz#5f06bbada385678a4d3bdbaaf1655ade207b6673"
integrity sha512-fIfFcJpXBAEkQcpuoFfn4m3Z9qTyREp2fzKgZOUp3BPnG8c4qo2fgLoezJckNi7esO9XGJvoZQSGbOgDeOaxcQ==
dependencies:
"@docsearch/react" "^3"
algoliasearch "^5"
@@ -54,7 +54,7 @@ Here's a quick overview of what's involved in getting started with `zrok`:
Run a zrok instance on Linux, Docker, or Kubernetes.
</CardBody>
<CardFooter>
<a href={"@zrokdocs/category/self-hosting/"}>
<a href={"/docs/zrok/1.0/category/self-hosting/"}>
<button className='button button--secondary button--block'>Guides</button>
</a>
</CardFooter>
@@ -322,7 +322,7 @@ You use the `zrok reserve` command to create _reserved shares_. Reserved shares
## Self-Hosting an Instance
Interested in self-hosting your own `zrok` instance? See the [self-hosting guides](@zrokdocs/category/self-hosting/)!
Interested in self-hosting your own `zrok` instance? See the [self-hosting guides](/docs/zrok/1.0/category/self-hosting/)!
## Resources
@@ -54,7 +54,7 @@ Here's a quick overview of what's involved in getting started with `zrok`:
Run a zrok instance on Linux, Docker, or Kubernetes.
</CardBody>
<CardFooter>
<a href={useBaseUrl("/docs/zrok/category/self-hosting/")}>
<a href={useBaseUrl("/docs/zrok/1.1/category/self-hosting/")}>
<button className='button button--secondary button--block'>Guides</button>
</a>
</CardFooter>
@@ -322,7 +322,7 @@ You use the `zrok reserve` command to create _reserved shares_. Reserved shares
## Self-Hosting an Instance
Interested in self-hosting your own `zrok` instance? See the [self-hosting guides](/docs/zrok/category/self-hosting/)!
Interested in self-hosting your own `zrok` instance? See the [self-hosting guides](/docs/zrok/1.1/category/self-hosting/)!
## Resources