diff --git a/.env b/.env new file mode 100644 index 00000000..dc96c78c --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +NEXT_PUBLIC_DOCSEARCH_APP_ID=APP_NEXT_PUBLIC_DOCSEARCH_APP_ID +NEXT_PUBLIC_DOCSEARCH_API_KEY=APP_NEXT_PUBLIC_DOCSEARCH_API_KEY +NEXT_PUBLIC_DOCSEARCH_INDEX_NAME=APP_NEXT_PUBLIC_DOCSEARCH_INDEX_NAME \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 984f7657..1015a188 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,15 +16,17 @@ RUN npm install --production # Copy all files COPY ./ ./ +COPY /docker/entrypoint.sh ./entrypoint.sh + # Build app RUN npm run build +RUN chmod u+x /usr/app/entrypoint.sh + # Expose the listening port EXPOSE 3000 -# Run container as non-root (unprivileged) user -# The node user is provided in the Node.js Alpine base image -USER node +# apply env variables to the Nextjs .env file +ENTRYPOINT ["/usr/app/entrypoint.sh"] -# Run npm start script with PM2 when container starts -CMD [ "pm2-runtime", "npm", "--", "start" ] \ No newline at end of file +CMD npm run start \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 00000000..9a3c381f --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# this script will check for the following NEXT_* environment variables passed via Docker environment (-e) and apply them +# to the Nextjs. +# The properties that will be replaced and have to start with APP_ prefix in the .env file + +set -ex +NEXT_PUBLIC_DOCSEARCH_APP_ID=${NEXT_PUBLIC_DOCSEARCH_APP_ID:-"none"} +NEXT_PUBLIC_DOCSEARCH_API_KEY=${NEXT_PUBLIC_DOCSEARCH_API_KEY:-"none"} +NEXT_PUBLIC_DOCSEARCH_INDEX_NAME=${NEXT_PUBLIC_DOCSEARCH_INDEX_NAME:"none"} + +find /usr/app/.next \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#APP_NEXT_PUBLIC_DOCSEARCH_APP_ID#${NEXT_PUBLIC_DOCSEARCH_APP_ID}#g" +find /usr/app/.next \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#APP_NEXT_PUBLIC_DOCSEARCH_API_KEY#${NEXT_PUBLIC_DOCSEARCH_API_KEY}#g" +find /usr/app/.next \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i "s#APP_NEXT_PUBLIC_DOCSEARCH_INDEX_NAME#${NEXT_PUBLIC_DOCSEARCH_INDEX_NAME}#g" + +echo "starting Nextjs" +exec "$@" \ No newline at end of file diff --git a/docs/getting-started/zitadel-quickstart.md b/docs/getting-started/zitadel-quickstart.md new file mode 100644 index 00000000..08428318 --- /dev/null +++ b/docs/getting-started/zitadel-quickstart.md @@ -0,0 +1,133 @@ +--- +sidebar_position: 4 +title: Zitadel Quickstart Guide +--- + +NetBird is open-source and can be self-hosted on your servers. + +This guide describes how to quickly get started with a self-hosted NetBird instance with an auto-configured Zitadel identity provider. It explains the steps to set up and configure this configuration, enabling you to efficiently start using your own self-hosted NetBird instance. + +### Step 1: Create Zitadel Service User + +In this step we will create a `netbird` service user. + +- Navigate to zitadel console +- Click `Users` in the top menu +- Select `Service Users` tab +- Click `New` +- Fill in the form with the following values: + - User Name: `netbird` + - Name: `netbird` + - Description: `Netbird Service User` + - Access Token Type: `JWT` +- Click `Create` + +![](/img/getting-started/zitadel-create-user.png) + +In this step we will generate `ClientSecret` for the `netbird` service user. + +- Click `Actions` in the top right corner and click `Generate Client Secret` +- Copy `ClientSecret` from the dialog will be used later to set `ClientSecret` when prompted. + +![](/img/getting-started/zitadel-service-user-secret.png) + +### Step 2: Grant manage-organization role to netbird service user + +In this step we will grant `Org User Manager` role to `netbird` service user. + +- Click `Organization` in the top menu +- Click `+` in the top right corner +- Search for `netbird` service user +- Check `Org Owner` checkbox +- Click `Add` + +![](/img/getting-started/zitadel-service-account-role.png) + + +### Step 3: Get the latest stable NetBird code + +```bash +#!/bin/bash +REPO="https://github.com/netbirdio/netbird/" +# this command will fetch the latest release e.g. v0.19.0 +LATEST_TAG=$(basename $(curl -fs -o/dev/null -w %{redirect_url} ${REPO}releases/latest)) +echo $LATEST_TAG + +# this comman will clone the latest tag +git clone --depth 1 --branch $LATEST_TAG $REPO +``` + +Then switch to the infra folder that contains docker-compose file: + +```bash +cd netbird/infrastructure_files/ +``` + +### Step 4: Prepare configuration files + +To simplify the setup we have prepared a script to substitute required properties in the [docker-compose.yml.tmpl](https://github.com/netbirdio/netbird/tree/main/infrastructure_files/docker-compose.yml.tmpl) and [management.json.zitadel.tmpl](https://github.com/netbirdio/netbird/tree/main/infrastructure_files/management.json.zitadel.tmpl) files. + +The [setup.env.example](https://github.com/netbirdio/netbird/tree/main/infrastructure_files/setup.env.example) file contains multiple properties that have to be filled. You need to copy the example file to `setup.env` before updating it. + +```bash +# Dashboard domain. e.g. app.mydomain.com +NETBIRD_DOMAIN="" + +# OIDC configuration e.g., https://example.eu.auth0.com/.well-known/openid-configuration +NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT="https:///.well-known/openid-configuration" + +# indicates whether to use Auth0 or not: true or false +NETBIRD_USE_AUTH0="false" +NETBIRD_IDP_PROVIDER="zitadel" +NETBIRD_AUTH_REDIRECT_URI="/auth" +NETBIRD_AUTH_SILENT_REDIRECT_URI="/silent-auth" + +# e.g. hello@mydomain.com +NETBIRD_LETSENCRYPT_EMAIL="" +``` + +- Set ```NETBIRD_DOMAIN``` to your domain, e.g. `demo.netbird.io` +- Configure ```NETBIRD_LETSENCRYPT_EMAIL``` property. + This can be any email address. [Let's Encrypt](https://letsencrypt.org/) will create an account while generating a new certificate. + +:::tip +Let's Encrypt will notify you via this email when certificates are about to expire. NetBird supports automatic renewal by default. +::: + +:::info +If you want to setup netbird with your own reverse-Proxy and without using the integrated letsencrypt, follow [this step here instead](self-hosting#advanced-running-netbird-behind-an-existing-reverse-proxy). +::: + +### Step 5: Disable single account mode (optional) + +NetBird Management service runs in a single account mode by default since version v0.10.1. +Management service was creating a separate account for each registered user before v0.10.1. +Single account mode ensures that all the users signing up for your self-hosted installation will join the same account/network. +In most cases, this is the desired behavior. + +If you want to disable the single-account mode, set `--disable-single-account-mode` flag in the +[docker-compose.yml.tmpl](https://github.com/netbirdio/netbird/tree/main/infrastructure_files/docker-compose.yml.tmpl) +`command` section of the `management` service. + +### Step 6: Run configuration script +Make sure all the required properties set in the ```setup.env``` file and run: + + ```bash + ./configure.sh + ``` + +This will export all the properties as environment variables and generate ```docker-compose.yml``` and ```management.json``` files substituting required variables. + +### Step 7: Run docker compose: + +```bash +docker-compose up -d +``` +### Step 8: Check docker logs (Optional) + + ```bash + docker-compose logs signal + docker-compose logs management + docker-compose logs coturn + docker-compose logs dashboard +``` \ No newline at end of file diff --git a/docs/integrations/identity-providers/self-hosted/zitadel.md b/docs/integrations/identity-providers/self-hosted/zitadel.md new file mode 100644 index 00000000..dfde5fd1 --- /dev/null +++ b/docs/integrations/identity-providers/self-hosted/zitadel.md @@ -0,0 +1,163 @@ +--- +id: using-netbird-with-zitadel +title: Using NetBird with Zitadel +sidebar_position: 5 +tags: +- integrations +- idp +- zitadel +- oidc +- how-to +--- + +This guide is a part of the [NetBird Self-hosting Guide](/getting-started/self-hosting) and explains how to integrate +**self-hosted** NetBird with [Zitadel](https://zitadel.com). + +:::tip managed idp +If you prefer not to self-host an Identity and Access Management solution, then you could use a managed alternative like +[Auth0](/integrations/identity-providers/self-hosted/using-netbird-with-auth0). +::: + +### 1. Create and configure Zitadel application +In this step, we will create and configure Netbird application in zitadel. + +Create new zitadel project +- Navigate to zitadel console +- Click `Projects` at the top menu, then click `Create New Project` to create a new project +- Fill in the form with the following values and click `Continue` + - Name: `NETBIRD` + +![](/img/integrations/identity-providers/self-hosted/zitadel-new-project.png) + +Create new zitadel application +- Click `Projects` in the top menu and select `NETBIRD` project from the list +- Click `New` in `APPLICATIONS` section to create a new application +- Fill in the form with the following values and click `Continue` + - Name: `netbird` + - TYPE OF APPLICATION: `User Agent` + +![](/img/integrations/identity-providers/self-hosted/zitadel-new-application.png) + +- Fill in the form with the following values and click `Continue` + - Authentication Method: `PKCE` + +![](/img/integrations/identity-providers/self-hosted/zitadel-new-application-auth.png) + +- Fill in the form with the following values and click `Continue` + - Redirect URIs: `https:///auth` and click `+` + - Post Logout URIs: `https:///silent-auth` and click `+` + +![](/img/integrations/identity-providers/self-hosted/zitadel-new-application-uri.png) + +- Verify applications details and Click `Create` and then click `Close` +- Check `Refresh Token` checkbox and click `Save` + +![](/img/integrations/identity-providers/self-hosted/zitadel-new-application-overview.png) + +- Copy `Client ID` will be used later in the `setup.env` + +### Step 2: Application Token Configuration + +To configure `netbird` application token you need to: + +- Click `Projects` in the top menu and select `NETBIRD` project from the list +- Select `netbird` application from `APPLICATIONS` section +- Click `Token Settings` in the left menu +- Fill in the form with the following values: + - Auth Token Type: `JWT` + - Check `Add user roles to the access token` checkbox +- Click `Save` + +![](/img/integrations/identity-providers/self-hosted/zitadel-token-settings.png) + +### Step 3: Application Redirect Configuration + +:::caution +This step is intended for setup running in development mode with no SSL +::: + +To configure `netbird` application redirect you need to: + +- Click `Projects` in the top menu and select `NETBIRD` project from the list +- Select `netbird` application from `APPLICATIONS` section +- Click `Redirect Settings` in the left menu +- Fill in the form with the following values: + - Toggle `Development Mode` +- Click `Save` + +![](/img/integrations/identity-providers/self-hosted/zitadel-redirect-settings.png) + +### Step 4: Create a Service User + +In this step we will create a `netbird` service user. + +- Click `Users` in the top menu +- Select `Service Users` tab +- Click `New` +- Fill in the form with the following values: + - User Name: `netbird` + - Name: `netbird` + - Description: `Netbird Service User` + - Access Token Type: `JWT` +- Click `Create` + +![](/img/integrations/identity-providers/self-hosted/zitadel-create-user.png) + +In this step we will generate `ClientSecret` for the `netbird` service user. + +- Click `Actions` in the top right corner and click `Generate Client Secret` +- Copy `ClientSecret` from the dialog will be used later to set `ClientSecret` in the `management.json` + +![](/img/integrations/identity-providers/self-hosted/zitadel-service-user-secret.png) + +### Step 5: Grant manage-users role to netbird service user + +In this step we will grant `Org User Manager` role to `netbird` service user. + +- Click `Organization` in the top menu +- Click `+` in the top right corner +- Search for `netbird` service user +- Check `Org User Manager` checkbox +- Click `Add` + +![](/img/integrations/identity-providers/self-hosted/zitadel-service-account-role.png) + + +Your authority OIDC configuration will be available under: +``` +https:///.well-known/openid-configuration +``` +:::caution +Double-check if the endpoint returns a JSON response by calling it from your browser. +::: + +- Set properties in the `setup.env` file: +```json +NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT="https:///.well-known/openid-configuration" +NETBIRD_USE_AUTH0=false +NETBIRD_AUTH_CLIENT_ID="" +NETBIRD_AUTH_AUDIENCE="" +NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID="" +NETBIRD_AUTH_REDIRECT_URI="/auth" +NETBIRD_AUTH_SILENT_REDIRECT_URI="/silent-auth" +``` + +- You can now continue with the [NetBird Self-hosting Guide](/getting-started/self-hosting#step-3-configure-identity-provider). + +- Set property `IdpManagerConfig` in the `management.json` file with: + :::caution + The file management.json is created automatically. Please refer [here](/getting-started/self-hosting#step-5-run-configuration-script) for more information. + ::: + + ```json + { + "ManagerType": "zitadel", + "ZitadelClientCredentials": { + "ClientID": "netbird", + "ClientSecret": "", + "GrantType": "client_credentials", + "TokenEndpoint": "https:///oauth/v2/token", + "ManagementEndpoint": "https:///management/v1" + } + } + ``` \ No newline at end of file diff --git a/next.config.mjs b/next.config.mjs index 5ff9474b..715b5af4 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,45 +1,112 @@ import nextMDX from '@next/mdx' -import { remarkPlugins } from './mdx/remark.mjs' -import { rehypePlugins } from './mdx/rehype.mjs' -import { recmaPlugins } from './mdx/recma.mjs' -import rehypeSlug from "rehype-slug"; +import {remarkPlugins} from './mdx/remark.mjs' +import {rehypePlugins} from './mdx/rehype.mjs' +import {recmaPlugins} from './mdx/recma.mjs' const withMDX = nextMDX({ - options: { - remarkPlugins, - // rehypeSlug, - rehypePlugins, - recmaPlugins, - providerImportSource: '@mdx-js/react', - }, + options: { + remarkPlugins, + // rehypeSlug, + rehypePlugins, + recmaPlugins, + providerImportSource: '@mdx-js/react', + }, }) + /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, - pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'mdx'], - experimental: { - scrollRestoration: true, - }, - redirects: async () => { - return [ - { - source: '/', - destination: '/docs/introductions', - permanent: true, - }, - { - source: '/docs', - destination: '/docs/introductions', - permanent: true, - }, - { - source: '/ipa', - destination: '/ipa/introductions', - permanent: true, - }, - ] - } + assetPrefix: '/docs-static', + reactStrictMode: true, + pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'mdx'], + experimental: { + scrollRestoration: true, + }, + redirects: async () => { + return [ + { + source: '/docs/getting-started/installation', + destination: '/how-to/getting-started#installation', + permanent: true, + }, + { + source: '/docs/overview/personal-access-tokens', + destination: '/how-to/access-netbird-public-api', + permanent: true, + }, + { + source: '/docs/overview/personal-access-tokens', + destination: '/how-to/access-netbird-public-api', + permanent: true, + }, + { + source: '/docs/overview/acls', + destination: '/how-to/manage-network-access', + permanent: true, + }, + { + source: '/docs/how-to-guides/nameservers', + destination: '/how-to/manage-dns-in-your-network', + permanent: true, + }, + { + source: '/docs/how-to-guides/nameservers', + destination: '/how-to/manage-dns-in-your-network', + permanent: true, + }, + { + source: '/docs/how-to-guides/network-routes', + destination: '/routing-traffic-to-private-networks', + permanent: true, + }, + { + source: '/docs/overview/setup-keys', + destination: '/how-to/register-machines-using-setup-keys', + permanent: true, + }, + { + source: '/docs/how-to-guides/activity-monitoring', + destination: '/how-to/monitor-system-and-network-activity', + permanent: true, + }, + { + source: '/docs/how-to-guides/periodic-authentication', + destination: '/how-to/enforce-periodic-user-authentication', + permanent: true, + }, + { + source: '/docs/overview/setup-keys', + destination: '/how-to/register-machines-using-setup-keys', + permanent: true, + }, + { + source: '/docs', + destination: '/', + permanent: true, + }, + { + source: '/docs/:path*', + destination: '/:path*', + permanent: true, + } + ] + }, + rewrites: async () => { + return [ + { + source: '/', + destination: '/introduction', + }, + { + source: '/api', + destination: '/ipa/introduction', + }, + { + source: '/api/:path*', + destination: '/ipa/:path*', + } + ] + } } export default withMDX(nextConfig) diff --git a/package.json b/package.json index ee18f89a..18c5b3ea 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,19 @@ "start": "next start", "lint": "next lint" }, - "browserslist": "defaults, not ie <= 11", + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all", + "defaults, not ie <= 11" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, "dependencies": { "@algolia/autocomplete-core": "^1.9.2", "@algolia/autocomplete-preset-algolia": "^1.9.2", diff --git a/public/img/architecture/acls.png b/public/docs-static/img/architecture/acls.png similarity index 100% rename from public/img/architecture/acls.png rename to public/docs-static/img/architecture/acls.png diff --git a/public/img/architecture/high-level-dia.png b/public/docs-static/img/architecture/high-level-dia.png similarity index 100% rename from public/img/architecture/high-level-dia.png rename to public/docs-static/img/architecture/high-level-dia.png diff --git a/public/img/architecture/management.png b/public/docs-static/img/architecture/management.png similarity index 100% rename from public/img/architecture/management.png rename to public/docs-static/img/architecture/management.png diff --git a/public/img/architecture/mesh.png b/public/docs-static/img/architecture/mesh.png similarity index 100% rename from public/img/architecture/mesh.png rename to public/docs-static/img/architecture/mesh.png diff --git a/public/img/architecture/netbird-peer-auto-tagging-newkey.png b/public/docs-static/img/architecture/netbird-peer-auto-tagging-newkey.png similarity index 100% rename from public/img/architecture/netbird-peer-auto-tagging-newkey.png rename to public/docs-static/img/architecture/netbird-peer-auto-tagging-newkey.png diff --git a/public/img/architecture/peer-auto-tagging-setupkey.gif b/public/docs-static/img/architecture/peer-auto-tagging-setupkey.gif similarity index 100% rename from public/img/architecture/peer-auto-tagging-setupkey.gif rename to public/docs-static/img/architecture/peer-auto-tagging-setupkey.gif diff --git a/public/img/architecture/relay.png b/public/docs-static/img/architecture/relay.png similarity index 100% rename from public/img/architecture/relay.png rename to public/docs-static/img/architecture/relay.png diff --git a/public/img/architecture/setup-keys.png b/public/docs-static/img/architecture/setup-keys.png similarity index 100% rename from public/img/architecture/setup-keys.png rename to public/docs-static/img/architecture/setup-keys.png diff --git a/public/img/architecture/signal.png b/public/docs-static/img/architecture/signal.png similarity index 100% rename from public/img/architecture/signal.png rename to public/docs-static/img/architecture/signal.png diff --git a/public/img/examples/wiretrustee-on-aws-ecs.png b/public/docs-static/img/examples/wiretrustee-on-aws-ecs.png similarity index 100% rename from public/img/examples/wiretrustee-on-aws-ecs.png rename to public/docs-static/img/examples/wiretrustee-on-aws-ecs.png diff --git a/public/img/favicon.ico b/public/docs-static/img/favicon.ico similarity index 100% rename from public/img/favicon.ico rename to public/docs-static/img/favicon.ico diff --git a/public/docs-static/img/getting-started/add-peer.png b/public/docs-static/img/getting-started/add-peer.png new file mode 100644 index 00000000..f8e6932e Binary files /dev/null and b/public/docs-static/img/getting-started/add-peer.png differ diff --git a/public/docs-static/img/getting-started/auth.png b/public/docs-static/img/getting-started/auth.png new file mode 100644 index 00000000..e3de1f96 Binary files /dev/null and b/public/docs-static/img/getting-started/auth.png differ diff --git a/public/docs-static/img/getting-started/device-confirmation.png b/public/docs-static/img/getting-started/device-confirmation.png new file mode 100644 index 00000000..3d53b2b0 Binary files /dev/null and b/public/docs-static/img/getting-started/device-confirmation.png differ diff --git a/public/docs-static/img/getting-started/empty-peers.png b/public/docs-static/img/getting-started/empty-peers.png new file mode 100644 index 00000000..389de4e8 Binary files /dev/null and b/public/docs-static/img/getting-started/empty-peers.png differ diff --git a/public/img/getting-started/high-level-dia.png b/public/docs-static/img/getting-started/high-level-dia.png similarity index 100% rename from public/img/getting-started/high-level-dia.png rename to public/docs-static/img/getting-started/high-level-dia.png diff --git a/public/docs-static/img/getting-started/img.png b/public/docs-static/img/getting-started/img.png new file mode 100644 index 00000000..d76fd6e7 Binary files /dev/null and b/public/docs-static/img/getting-started/img.png differ diff --git a/public/img/getting-started/logo-full.png b/public/docs-static/img/getting-started/logo-full.png similarity index 100% rename from public/img/getting-started/logo-full.png rename to public/docs-static/img/getting-started/logo-full.png diff --git a/public/img/getting-started/logo.png b/public/docs-static/img/getting-started/logo.png similarity index 100% rename from public/img/getting-started/logo.png rename to public/docs-static/img/getting-started/logo.png diff --git a/public/img/getting-started/netbird-sso-login-cmd.gif b/public/docs-static/img/getting-started/netbird-sso-login-cmd.gif similarity index 100% rename from public/img/getting-started/netbird-sso-login-cmd.gif rename to public/docs-static/img/getting-started/netbird-sso-login-cmd.gif diff --git a/public/img/getting-started/netbird-sso-login-ui.gif b/public/docs-static/img/getting-started/netbird-sso-login-ui.gif similarity index 100% rename from public/img/getting-started/netbird-sso-login-ui.gif rename to public/docs-static/img/getting-started/netbird-sso-login-ui.gif diff --git a/public/docs-static/img/getting-started/netbird-up.png b/public/docs-static/img/getting-started/netbird-up.png new file mode 100644 index 00000000..bfe674a9 Binary files /dev/null and b/public/docs-static/img/getting-started/netbird-up.png differ diff --git a/public/img/getting-started/peerA.gif b/public/docs-static/img/getting-started/peerA.gif similarity index 100% rename from public/img/getting-started/peerA.gif rename to public/docs-static/img/getting-started/peerA.gif diff --git a/public/img/getting-started/peerB.gif b/public/docs-static/img/getting-started/peerB.gif similarity index 100% rename from public/img/getting-started/peerB.gif rename to public/docs-static/img/getting-started/peerB.gif diff --git a/public/img/getting-started/peers.gif b/public/docs-static/img/getting-started/peers.gif similarity index 100% rename from public/img/getting-started/peers.gif rename to public/docs-static/img/getting-started/peers.gif diff --git a/public/docs-static/img/getting-started/peers.png b/public/docs-static/img/getting-started/peers.png new file mode 100644 index 00000000..aeef5368 Binary files /dev/null and b/public/docs-static/img/getting-started/peers.png differ diff --git a/public/img/getting-started/systray.png b/public/docs-static/img/getting-started/systray.png similarity index 100% rename from public/img/getting-started/systray.png rename to public/docs-static/img/getting-started/systray.png diff --git a/public/img/how-to-guides/activity-monitoring.png b/public/docs-static/img/how-to-guides/activity-monitoring.png similarity index 100% rename from public/img/how-to-guides/activity-monitoring.png rename to public/docs-static/img/how-to-guides/activity-monitoring.png diff --git a/public/docs-static/img/how-to-guides/add-new-peer-empty.png b/public/docs-static/img/how-to-guides/add-new-peer-empty.png new file mode 100644 index 00000000..174e5978 Binary files /dev/null and b/public/docs-static/img/how-to-guides/add-new-peer-empty.png differ diff --git a/public/docs-static/img/how-to-guides/add-new-peer-popup.png b/public/docs-static/img/how-to-guides/add-new-peer-popup.png new file mode 100644 index 00000000..fb5b70f9 Binary files /dev/null and b/public/docs-static/img/how-to-guides/add-new-peer-popup.png differ diff --git a/public/docs-static/img/how-to-guides/google-play-badge.png b/public/docs-static/img/how-to-guides/google-play-badge.png new file mode 100644 index 00000000..131f3aca Binary files /dev/null and b/public/docs-static/img/how-to-guides/google-play-badge.png differ diff --git a/public/img/how-to-guides/individual-peer-login-expiration.png b/public/docs-static/img/how-to-guides/individual-peer-login-expiration.png similarity index 100% rename from public/img/how-to-guides/individual-peer-login-expiration.png rename to public/docs-static/img/how-to-guides/individual-peer-login-expiration.png diff --git a/public/img/how-to-guides/netbird-nameserver-add-button.png b/public/docs-static/img/how-to-guides/netbird-nameserver-add-button.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-add-button.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-add-button.png diff --git a/public/img/how-to-guides/netbird-nameserver-all-group.png b/public/docs-static/img/how-to-guides/netbird-nameserver-all-group.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-all-group.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-all-group.png diff --git a/public/img/how-to-guides/netbird-nameserver-custom.png b/public/docs-static/img/how-to-guides/netbird-nameserver-custom.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-custom.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-custom.png diff --git a/public/img/how-to-guides/netbird-nameserver-predefined-selected.png b/public/docs-static/img/how-to-guides/netbird-nameserver-predefined-selected.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-predefined-selected.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-predefined-selected.png diff --git a/public/img/how-to-guides/netbird-nameserver-remote-resolver.png b/public/docs-static/img/how-to-guides/netbird-nameserver-remote-resolver.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-remote-resolver.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-remote-resolver.png diff --git a/public/img/how-to-guides/netbird-nameserver-remote-route.png b/public/docs-static/img/how-to-guides/netbird-nameserver-remote-route.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-remote-route.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-remote-route.png diff --git a/public/img/how-to-guides/netbird-nameserver-remote-rule.png b/public/docs-static/img/how-to-guides/netbird-nameserver-remote-rule.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-remote-rule.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-remote-rule.png diff --git a/public/img/how-to-guides/netbird-nameserver-selection-view-open.png b/public/docs-static/img/how-to-guides/netbird-nameserver-selection-view-open.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-selection-view-open.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-selection-view-open.png diff --git a/public/img/how-to-guides/netbird-nameserver-selection-view.png b/public/docs-static/img/how-to-guides/netbird-nameserver-selection-view.png similarity index 100% rename from public/img/how-to-guides/netbird-nameserver-selection-view.png rename to public/docs-static/img/how-to-guides/netbird-nameserver-selection-view.png diff --git a/public/img/how-to-guides/netbird-network-routes-add-button.png b/public/docs-static/img/how-to-guides/netbird-network-routes-add-button.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes-add-button.png rename to public/docs-static/img/how-to-guides/netbird-network-routes-add-button.png diff --git a/public/img/how-to-guides/netbird-network-routes-create-ha.png b/public/docs-static/img/how-to-guides/netbird-network-routes-create-ha.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes-create-ha.png rename to public/docs-static/img/how-to-guides/netbird-network-routes-create-ha.png diff --git a/public/img/how-to-guides/netbird-network-routes-create.png b/public/docs-static/img/how-to-guides/netbird-network-routes-create.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes-create.png rename to public/docs-static/img/how-to-guides/netbird-network-routes-create.png diff --git a/public/img/how-to-guides/netbird-network-routes-masquerading.png b/public/docs-static/img/how-to-guides/netbird-network-routes-masquerading.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes-masquerading.png rename to public/docs-static/img/how-to-guides/netbird-network-routes-masquerading.png diff --git a/public/img/how-to-guides/netbird-network-routes-saved-new-ha.png b/public/docs-static/img/how-to-guides/netbird-network-routes-saved-new-ha.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes-saved-new-ha.png rename to public/docs-static/img/how-to-guides/netbird-network-routes-saved-new-ha.png diff --git a/public/img/how-to-guides/netbird-network-routes-saved-new.png b/public/docs-static/img/how-to-guides/netbird-network-routes-saved-new.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes-saved-new.png rename to public/docs-static/img/how-to-guides/netbird-network-routes-saved-new.png diff --git a/public/img/how-to-guides/netbird-network-routes.png b/public/docs-static/img/how-to-guides/netbird-network-routes.png similarity index 100% rename from public/img/how-to-guides/netbird-network-routes.png rename to public/docs-static/img/how-to-guides/netbird-network-routes.png diff --git a/public/docs-static/img/how-to-guides/peer-list.png b/public/docs-static/img/how-to-guides/peer-list.png new file mode 100644 index 00000000..1d4efd02 Binary files /dev/null and b/public/docs-static/img/how-to-guides/peer-list.png differ diff --git a/public/img/how-to-guides/peer-login-expiration.png b/public/docs-static/img/how-to-guides/peer-login-expiration.png similarity index 100% rename from public/img/how-to-guides/peer-login-expiration.png rename to public/docs-static/img/how-to-guides/peer-login-expiration.png diff --git a/public/img/how-to-guides/peer-needs-login.png b/public/docs-static/img/how-to-guides/peer-needs-login.png similarity index 100% rename from public/img/how-to-guides/peer-needs-login.png rename to public/docs-static/img/how-to-guides/peer-needs-login.png diff --git a/public/img/how-to-guides/user-invites.gif b/public/docs-static/img/how-to-guides/user-invites.gif similarity index 100% rename from public/img/how-to-guides/user-invites.gif rename to public/docs-static/img/how-to-guides/user-invites.gif diff --git a/public/img/integrations/identity-providers/self-hosted/auth0-create-interactive-login-app.png b/public/docs-static/img/integrations/identity-providers/self-hosted/auth0-create-interactive-login-app.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/auth0-create-interactive-login-app.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/auth0-create-interactive-login-app.png diff --git a/public/img/integrations/identity-providers/self-hosted/auth0-grant-types.png b/public/docs-static/img/integrations/identity-providers/self-hosted/auth0-grant-types.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/auth0-grant-types.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/auth0-grant-types.png diff --git a/public/img/integrations/identity-providers/self-hosted/auth0-interactive-login-settings.png b/public/docs-static/img/integrations/identity-providers/self-hosted/auth0-interactive-login-settings.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/auth0-interactive-login-settings.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/auth0-interactive-login-settings.png diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-add-user-group.png b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-add-user-group.png new file mode 100644 index 00000000..ceca4477 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-add-user-group.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-application.png new file mode 100644 index 00000000..240b7225 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-application.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-provider-config.png b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-provider-config.png new file mode 100644 index 00000000..f76ba157 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-provider-config.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-provider-type.png b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-provider-type.png new file mode 100644 index 00000000..fe325709 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-provider-type.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-service-account.png b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-service-account.png new file mode 100644 index 00000000..edac9094 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-new-service-account.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-service-account-details.png b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-service-account-details.png new file mode 100644 index 00000000..1465df8d Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/authentik-service-account-details.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-add-application-scope.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-add-application-scope.png new file mode 100644 index 00000000..89f7ec5a Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-add-application-scope.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-add-scope.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-add-scope.png new file mode 100644 index 00000000..3597262d Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-add-scope.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-applications-permissions.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-applications-permissions.png new file mode 100644 index 00000000..d0585fb0 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-applications-permissions.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-client-secret.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-client-secret.png new file mode 100644 index 00000000..33733245 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-client-secret.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-flows-setup.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-flows-setup.png new file mode 100644 index 00000000..2a27aa6f Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-flows-setup.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-grant-admin-conset.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-grant-admin-conset.png new file mode 100644 index 00000000..eb5468b5 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-grant-admin-conset.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-netbird-api-permisssions.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-netbird-api-permisssions.png new file mode 100644 index 00000000..d7fa422c Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-netbird-api-permisssions.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-new-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-new-application.png new file mode 100644 index 00000000..37c98396 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-new-application.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-openid-permissions.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-openid-permissions.png new file mode 100644 index 00000000..164f8e2f Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-openid-permissions.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-spa-uri-setup.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-spa-uri-setup.png new file mode 100644 index 00000000..fe3aad0c Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-spa-uri-setup.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/azure-user-permissions.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-user-permissions.png new file mode 100644 index 00000000..131ee243 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/azure-user-permissions.png differ diff --git a/public/img/integrations/identity-providers/self-hosted/azure_api_scope.png b/public/docs-static/img/integrations/identity-providers/self-hosted/azure_api_scope.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/azure_api_scope.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/azure_api_scope.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloack-add-client-scope.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-add-client-scope.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloack-add-client-scope.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-add-client-scope.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain-category.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain-category.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain-category.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain-category.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper-domain.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claim-mapper.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claims-client.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claims-client.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claims-client.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloack-domain-token-claims-client.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-access-settings.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-access-settings.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-access-settings.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-access-settings.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-add-role.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-add-role.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-add-role.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-add-role.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-auth-grant.gif b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-auth-grant.gif similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-auth-grant.gif rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-auth-grant.gif diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-backend-client-auth.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-backend-client-auth.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-backend-client-auth.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-backend-client-auth.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-backend-client-credentials.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-backend-client-credentials.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-backend-client-credentials.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-backend-client-credentials.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper-2.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper-2.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper-2.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper-2.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-configure-audience-mapper.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-create-backend-client.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-backend-client.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-create-backend-client.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-backend-client.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-create-client-scope.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-client-scope.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-create-client-scope.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-client-scope.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-create-client.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-client.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-create-client.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-client.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-create-realm.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-realm.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-create-realm.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-realm.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-create-user.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-user.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-create-user.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-create-user.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-domain-token-claim-scope.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-domain-token-claim-scope.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-domain-token-claim-scope.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-domain-token-claim-scope.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-enable-auth.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-enable-auth.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-enable-auth.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-enable-auth.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-service-account-role.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-service-account-role.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-service-account-role.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-service-account-role.png diff --git a/public/img/integrations/identity-providers/self-hosted/keycloak-set-password.png b/public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-set-password.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/keycloak-set-password.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/keycloak-set-password.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-generate-token.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-generate-token.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-generate-token.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-generate-token.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-native-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-native-application.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-native-application.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-native-application.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-native-sign-on-configuration.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-native-sign-on-configuration.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-native-sign-on-configuration.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-native-sign-on-configuration.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-new-native-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-new-native-application.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-new-native-application.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-new-native-application.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-new-single-page-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-new-single-page-application.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-new-single-page-application.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-new-single-page-application.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-single-page-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-single-page-application.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-single-page-application.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-single-page-application.png diff --git a/public/img/integrations/identity-providers/self-hosted/okta-single-sign-on-configuration.png b/public/docs-static/img/integrations/identity-providers/self-hosted/okta-single-sign-on-configuration.png similarity index 100% rename from public/img/integrations/identity-providers/self-hosted/okta-single-sign-on-configuration.png rename to public/docs-static/img/integrations/identity-providers/self-hosted/okta-single-sign-on-configuration.png diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-create-user.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-create-user.png new file mode 100644 index 00000000..63173e6d Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-create-user.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-auth.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-auth.png new file mode 100644 index 00000000..726a345a Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-auth.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-overview.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-overview.png new file mode 100644 index 00000000..23a16f55 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-overview.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-uri.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-uri.png new file mode 100644 index 00000000..b2c97936 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application-uri.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application.png new file mode 100644 index 00000000..a8e5f201 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-application.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-project.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-project.png new file mode 100644 index 00000000..4329df2a Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-new-project.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-redirect-settings.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-redirect-settings.png new file mode 100644 index 00000000..9d3744ed Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-redirect-settings.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-service-account-role.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-service-account-role.png new file mode 100644 index 00000000..871997c1 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-service-account-role.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-service-user-secret.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-service-user-secret.png new file mode 100644 index 00000000..c25b343d Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-service-user-secret.png differ diff --git a/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-token-settings.png b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-token-settings.png new file mode 100644 index 00000000..bdbf1bf4 Binary files /dev/null and b/public/docs-static/img/integrations/identity-providers/self-hosted/zitadel-token-settings.png differ diff --git a/public/docs-static/img/logo/logo-api-dark.png b/public/docs-static/img/logo/logo-api-dark.png new file mode 100644 index 00000000..bbbaae63 Binary files /dev/null and b/public/docs-static/img/logo/logo-api-dark.png differ diff --git a/public/img/logo/logo-api-dark.svg b/public/docs-static/img/logo/logo-api-dark.svg similarity index 88% rename from public/img/logo/logo-api-dark.svg rename to public/docs-static/img/logo/logo-api-dark.svg index 29055bf9..7c4f75e7 100644 --- a/public/img/logo/logo-api-dark.svg +++ b/public/docs-static/img/logo/logo-api-dark.svg @@ -7,7 +7,7 @@ viewBox="0 0 132.29167 23.812502" version="1.1" id="svg1203" - inkscape:version="1.1.1 (1:1.1+202109281944+c3084ef5ed)" + inkscape:version="1.2.1 (1:1.2.1+202210291243+9c6d41e410)" sodipodi:docname="logo-api-dark.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -26,15 +26,17 @@ width="650px" units="px" inkscape:zoom="1.4289282" - inkscape:cx="334.86637" - inkscape:cy="27.993009" - inkscape:window-width="2560" - inkscape:window-height="1335" - inkscape:window-x="1920" + inkscape:cx="334.51646" + inkscape:cy="28.692834" + inkscape:window-width="1920" + inkscape:window-height="973" + inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="layer1" - inkscape:snap-global="false" /> + inkscape:snap-global="false" + inkscape:showpageshadow="2" + inkscape:deskcolor="#d1d1d1" /> + hide_knots="false" + nodesatellites_param="F,0,0,1,0,4.4979167,0,1 @ F,0,0,1,0,4.4979167,0,1 @ F,0,0,1,0,4.4979167,0,1 @ F,0,0,1,0,4.4979167,0,1" /> API + x="99.439789" + y="15.949568">API + inkscape:snap-global="false" + inkscape:showpageshadow="2" + inkscape:deskcolor="#d1d1d1" /> + hide_knots="false" + nodesatellites_param="F,0,0,1,0,4.4979167,0,1 @ F,0,0,1,0,4.4979167,0,1 @ F,0,0,1,0,4.4979167,0,1 @ F,0,0,1,0,4.4979167,0,1" /> API + x="99.440025" + y="15.806142">API { window.navigator.clipboard.writeText(code).then(() => { @@ -101,7 +101,7 @@ function CodePanelHeader({ tag, label }) { } return ( -
+
{tag && (
{tag} @@ -142,9 +142,9 @@ function CodeGroupHeader({ title, children, selectedIndex }) { } return ( -
+
{title && ( -

+

{title}

)} @@ -156,7 +156,7 @@ function CodeGroupHeader({ title, children, selectedIndex }) { 'border-b py-3 transition focus:[&:not(:focus-visible)]:outline-none', childIndex === selectedIndex ? 'border-orange-500 text-orange-400' - : 'border-transparent text-zinc-400 hover:text-zinc-300' + : 'border-transparent text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-300' )} > {getPanelTitle(child.props)} @@ -266,7 +266,7 @@ export function CodeGroup({ children, title, ...props }) { {children} diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx index 7c8ab45a..1f11812a 100644 --- a/src/components/Footer.jsx +++ b/src/components/Footer.jsx @@ -126,7 +126,7 @@ function PageLink({ label, page, previous = false }) { function PageNavigation() { let router = useRouter() - let allPages = router.route.startsWith('/docs') ? docsNavigation.flatMap((group) => group.links) : apiNavigation.flatMap((group) => group.links) + let allPages = !router.route.startsWith('/ipa') ? docsNavigation.flatMap((group) => group.links) : apiNavigation.flatMap((group) => group.links) let currentPageIndex = allPages.findIndex( (page) => page.href === router.pathname ) diff --git a/src/components/Guides.jsx b/src/components/Guides.jsx index 764ee7fe..4b8ed384 100644 --- a/src/components/Guides.jsx +++ b/src/components/Guides.jsx @@ -3,12 +3,12 @@ import { Heading } from '@/components/Heading' const guides = [ { - href: '/ipa/guides/authentication', + href: '/api/guides/authentication', name: 'Authentication', description: 'Learn how to authenticate your API requests.', }, { - href: '/ipa/guides/errors', + href: '/api/guides/errors', name: 'Errors', description: 'Read about the different types of errors returned by the API.', diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 217f3b8f..69ae0579 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -69,8 +69,8 @@ export const Header = forwardRef(function Header({ className }, ref) {
- +
diff --git a/src/components/How-To-Guides.jsx b/src/components/How-To-Guides.jsx index 6b28c2e8..efdaec94 100644 --- a/src/components/How-To-Guides.jsx +++ b/src/components/How-To-Guides.jsx @@ -3,28 +3,39 @@ import { Heading } from '@/components/Heading' const howToGuides = [ { - href: '/docs/how-to/add-users-to-your-network', - name: 'Add Users to your network', - description: 'Learn how to add users to your network.', + href: '/how-to/getting-started', + name: 'Quickstart guide', + description: 'Start using NetBird in under 5 minutes.', }, { - href: '/docs/how-to/configure-periodic-user-authentication', - name: 'Configure periodic user authentication', + href: '/how-to/manage-network-access', + name: 'Manage network access', description: - 'Learn how to configure periodic user authentication.', + 'Learn how to use access controls to manage access to your machines.', }, { - href: '/docs/how-to/manage-dns-in-your-network', - name: 'Manage DNS in your network', + href: '/how-to/add-users-to-your-network', + name: 'Add users to your network', + description: 'learn how to add team members to your NetBird network.', + }, + { + href: '/how-to/routing-traffic-to-private-networks', + name: 'Route traffic to private networks', description: - 'Learn how to configure DNS servers for your network.', + 'Learn how to provide access to LANs, VPS, and corporate private networks.', }, { - href: '/docs/how-to/monitor-system-and-network-activity', - name: 'Monitoring system and network activities', + href: '/how-to/monitor-system-and-network-activity', + name: 'Log and monitor network activity', description: 'Learn how to keep track of system and network activities in your account.', }, + { + href: '/how-to/manage-dns-in-your-network', + name: 'Manage DNS in your network', + description: + 'Learn how to configure name servers in your private network.', + }, ] export function HowToGuides() { diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx index 1e5c44d1..b56add6a 100644 --- a/src/components/Layout.jsx +++ b/src/components/Layout.jsx @@ -3,7 +3,7 @@ import Link from 'next/link' import { useRouter } from 'next/router' import clsx from 'clsx' -import { Logo, Logomark } from '@/components/Logo' +import { Logo } from '@/components/Logo' import { Prose } from '@/components/Prose' import {HeroPattern} from "@/components/HeroPattern"; import {NavigationDocs} from "@/components/NavigationDocs"; @@ -17,54 +17,54 @@ const navigation = [ title: 'Introduction', links: [ { title: 'Getting started', href: '/' }, - { title: 'Installation', href: '/docs/installation' }, + { title: 'Installation', href: '/installation' }, ], }, { title: 'Core concepts', links: [ - { title: 'Understanding caching', href: '/docs/understanding-caching' }, + { title: 'Understanding caching', href: '/understanding-caching' }, { title: 'Predicting user behavior', - href: '/docs/predicting-user-behavior', + href: '/predicting-user-behavior', }, - { title: 'Basics of time-travel', href: '/docs/basics-of-time-travel' }, + { title: 'Basics of time-travel', href: '/basics-of-time-travel' }, { title: 'Introduction to string theory', - href: '/docs/introduction-to-string-theory', + href: '/introduction-to-string-theory', }, - { title: 'The butterfly effect', href: '/docs/the-butterfly-effect' }, + { title: 'The butterfly effect', href: '/the-butterfly-effect' }, ], }, { title: 'Advanced guides', links: [ - { title: 'Writing plugins', href: '/docs/writing-plugins' }, - { title: 'Neuralink integration', href: '/docs/neuralink-integration' }, - { title: 'Temporal paradoxes', href: '/docs/temporal-paradoxes' }, - { title: 'Testing', href: '/docs/testing' }, - { title: 'Compile-time caching', href: '/docs/compile-time-caching' }, + { title: 'Writing plugins', href: '/writing-plugins' }, + { title: 'Neuralink integration', href: '/neuralink-integration' }, + { title: 'Temporal paradoxes', href: '/temporal-paradoxes' }, + { title: 'Testing', href: '/testing' }, + { title: 'Compile-time caching', href: '/compile-time-caching' }, { title: 'Predictive data generation', - href: '/docs/predictive-data-generation', + href: '/predictive-data-generation', }, ], }, { title: 'API reference', links: [ - { title: 'CacheAdvance.predict()', href: '/docs/cacheadvance-predict' }, - { title: 'CacheAdvance.flush()', href: '/docs/cacheadvance-flush' }, - { title: 'CacheAdvance.revert()', href: '/docs/cacheadvance-revert' }, - { title: 'CacheAdvance.regret()', href: '/docs/cacheadvance-regret' }, + { title: 'CacheAdvance.predict()', href: '/cacheadvance-predict' }, + { title: 'CacheAdvance.flush()', href: '/cacheadvance-flush' }, + { title: 'CacheAdvance.revert()', href: '/cacheadvance-revert' }, + { title: 'CacheAdvance.regret()', href: '/cacheadvance-regret' }, ], }, { title: 'Contributing', links: [ - { title: 'How to contribute', href: '/docs/how-to-contribute' }, - { title: 'Architecture guide', href: '/docs/architecture-guide' }, - { title: 'Design principles', href: '/docs/design-principles' }, + { title: 'How to contribute', href: '/how-to-contribute' }, + { title: 'Architecture guide', href: '/architecture-guide' }, + { title: 'Design principles', href: '/design-principles' }, ], }, ] @@ -146,7 +146,7 @@ export function Layout({ children, title, tableOfContents }) { return ( <> -
+
- {router.route.startsWith("/ipa") && } - {router.route.startsWith("/docs") && } + {router.route.startsWith("/ipa") ? : }
-
+
{children}
- {!router.route.startsWith("/ipa/resources") && !router.route.includes("introductions") &&
-