mirror of
https://github.com/kerberos-io/documentation.git
synced 2026-10-20 17:38:31 +00:00
optiizations
This commit is contained in:
@@ -2,11 +2,12 @@
|
||||
const preferDefault = m => m && m.default || m
|
||||
|
||||
exports.components = {
|
||||
"component---cache-dev-404-page-js": () => import("./dev-404-page.js" /* webpackChunkName: "component---cache-dev-404-page-js" */),
|
||||
"component---src-architectures-mdx": () => import("./../../src/architectures.mdx" /* webpackChunkName: "component---src-architectures-mdx" */),
|
||||
"component---src-how-mdx": () => import("./../../src/how.mdx" /* webpackChunkName: "component---src-how-mdx" */),
|
||||
"component---src-index-mdx": () => import("./../../src/index.mdx" /* webpackChunkName: "component---src-index-mdx" */),
|
||||
"component---src-enterprise-index-mdx": () => import("./../../src/enterprise/index.mdx" /* webpackChunkName: "component---src-enterprise-index-mdx" */),
|
||||
"component---src-enterprise-installation-cloud-mdx": () => import("./../../src/enterprise/installation-cloud.mdx" /* webpackChunkName: "component---src-enterprise-installation-cloud-mdx" */),
|
||||
"component---src-enterprise-index-mdx": () => import("./../../src/enterprise/index.mdx" /* webpackChunkName: "component---src-enterprise-index-mdx" */),
|
||||
"component---src-enterprise-installation-mdx": () => import("./../../src/enterprise/installation.mdx" /* webpackChunkName: "component---src-enterprise-installation-mdx" */),
|
||||
"component---src-enterprise-releases-mdx": () => import("./../../src/enterprise/releases.mdx" /* webpackChunkName: "component---src-enterprise-releases-mdx" */),
|
||||
"component---src-open-source-get-started-mdx": () => import("./../../src/open-source/get-started.mdx" /* webpackChunkName: "component---src-open-source-get-started-mdx" */),
|
||||
@@ -14,10 +15,10 @@ exports.components = {
|
||||
"component---src-open-source-upgrade-mdx": () => import("./../../src/open-source/upgrade.mdx" /* webpackChunkName: "component---src-open-source-upgrade-mdx" */),
|
||||
"component---src-open-source-web-mdx": () => import("./../../src/open-source/web.mdx" /* webpackChunkName: "component---src-open-source-web-mdx" */),
|
||||
"component---src-storage-get-started-mdx": () => import("./../../src/storage/get-started.mdx" /* webpackChunkName: "component---src-storage-get-started-mdx" */),
|
||||
"component---src-storage-index-mdx": () => import("./../../src/storage/index.mdx" /* webpackChunkName: "component---src-storage-index-mdx" */),
|
||||
"component---src-storage-installation-cloud-mdx": () => import("./../../src/storage/installation-cloud.mdx" /* webpackChunkName: "component---src-storage-installation-cloud-mdx" */),
|
||||
"component---src-storage-installation-edge-mdx": () => import("./../../src/storage/installation-edge.mdx" /* webpackChunkName: "component---src-storage-installation-edge-mdx" */),
|
||||
"component---src-storage-installation-providers-md": () => import("./../../src/storage/installation-providers.md" /* webpackChunkName: "component---src-storage-installation-providers-md" */),
|
||||
"component---src-storage-index-mdx": () => import("./../../src/storage/index.mdx" /* webpackChunkName: "component---src-storage-index-mdx" */),
|
||||
"component---src-storage-installation-recycle-md": () => import("./../../src/storage/installation-recycle.md" /* webpackChunkName: "component---src-storage-installation-recycle-md" */),
|
||||
"component---src-storage-installation-mdx": () => import("./../../src/storage/installation.mdx" /* webpackChunkName: "component---src-storage-installation-mdx" */),
|
||||
"component---src-cloud-index-mdx": () => import("./../../src/cloud/index.mdx" /* webpackChunkName: "component---src-cloud-index-mdx" */),
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
{
|
||||
"name": "/Users/i353408/Vagrant/www/repos/documentation/node_modules/@emotion/babel-preset-css-prop/dist/babel-preset-css-prop.cjs.js",
|
||||
"options": {
|
||||
"sourceMap": false,
|
||||
"autoLabel": false,
|
||||
"sourceMap": true,
|
||||
"autoLabel": true,
|
||||
"plugins": []
|
||||
}
|
||||
}
|
||||
@@ -45,8 +45,8 @@
|
||||
{
|
||||
"name": "/Users/i353408/Vagrant/www/repos/documentation/node_modules/@emotion/babel-preset-css-prop/dist/babel-preset-css-prop.cjs.js",
|
||||
"options": {
|
||||
"sourceMap": false,
|
||||
"autoLabel": false,
|
||||
"sourceMap": true,
|
||||
"autoLabel": true,
|
||||
"plugins": []
|
||||
}
|
||||
}
|
||||
@@ -73,8 +73,8 @@
|
||||
{
|
||||
"name": "/Users/i353408/Vagrant/www/repos/documentation/node_modules/@emotion/babel-preset-css-prop/dist/babel-preset-css-prop.cjs.js",
|
||||
"options": {
|
||||
"sourceMap": false,
|
||||
"autoLabel": false,
|
||||
"sourceMap": true,
|
||||
"autoLabel": true,
|
||||
"plugins": []
|
||||
}
|
||||
}
|
||||
@@ -101,8 +101,8 @@
|
||||
{
|
||||
"name": "/Users/i353408/Vagrant/www/repos/documentation/node_modules/@emotion/babel-preset-css-prop/dist/babel-preset-css-prop.cjs.js",
|
||||
"options": {
|
||||
"sourceMap": false,
|
||||
"autoLabel": false,
|
||||
"sourceMap": true,
|
||||
"autoLabel": true,
|
||||
"plugins": []
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Executable
+145
@@ -0,0 +1,145 @@
|
||||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
import { graphql, Link } from "gatsby"
|
||||
|
||||
class Dev404Page extends React.Component {
|
||||
static propTypes = {
|
||||
data: PropTypes.object,
|
||||
custom404: PropTypes.element,
|
||||
location: PropTypes.object,
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props)
|
||||
const { data } = this.props
|
||||
const pagePaths = data.allSitePage.nodes.map(node => node.path)
|
||||
this.state = {
|
||||
showCustom404: false,
|
||||
initPagePaths: pagePaths,
|
||||
pagePaths: pagePaths,
|
||||
pagePathSearchTerms: ``,
|
||||
}
|
||||
this.showCustom404 = this.showCustom404.bind(this)
|
||||
this.handlePagePathSearch = this.handlePagePathSearch.bind(this)
|
||||
this.handleSearchTermChange = this.handleSearchTermChange.bind(this)
|
||||
}
|
||||
|
||||
showCustom404() {
|
||||
this.setState({ showCustom404: true })
|
||||
}
|
||||
|
||||
handleSearchTermChange(event) {
|
||||
this.setState({
|
||||
pagePathSearchTerms: event.target.value,
|
||||
})
|
||||
}
|
||||
|
||||
handlePagePathSearch(event) {
|
||||
event.preventDefault()
|
||||
const tempPagePaths = [...this.state.initPagePaths]
|
||||
const searchTerm = new RegExp(`${this.state.pagePathSearchTerms}`)
|
||||
this.setState({
|
||||
pagePaths: tempPagePaths.filter(pagePath => searchTerm.test(pagePath)),
|
||||
})
|
||||
}
|
||||
|
||||
render() {
|
||||
const { pathname } = this.props.location
|
||||
let newFilePath
|
||||
if (pathname === `/`) {
|
||||
newFilePath = `src/pages/index.js`
|
||||
} else if (pathname.slice(-1) === `/`) {
|
||||
newFilePath = `src/pages${pathname.slice(0, -1)}.js`
|
||||
} else {
|
||||
newFilePath = `src/pages${pathname}.js`
|
||||
}
|
||||
|
||||
return this.state.showCustom404 ? (
|
||||
this.props.custom404
|
||||
) : (
|
||||
<div>
|
||||
<h1>Gatsby.js development 404 page</h1>
|
||||
<p>
|
||||
{`There's not a page yet at `}
|
||||
<code>{pathname}</code>
|
||||
</p>
|
||||
{this.props.custom404 ? (
|
||||
<p>
|
||||
<button onClick={this.showCustom404}>
|
||||
Preview custom 404 page
|
||||
</button>
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
{`A custom 404 page wasn't detected - if you would like to add one, create a component in your site directory at `}
|
||||
<code>src/pages/404.js</code>.
|
||||
</p>
|
||||
)}
|
||||
<p>
|
||||
Create a React.js component in your site directory at
|
||||
{` `}
|
||||
<code>{newFilePath}</code>
|
||||
{` `}
|
||||
and this page will automatically refresh to show the new page
|
||||
component you created.
|
||||
</p>
|
||||
{this.state.initPagePaths.length > 0 && (
|
||||
<div>
|
||||
<p>
|
||||
If you were trying to reach another page, perhaps you can find it
|
||||
below.
|
||||
</p>
|
||||
<h2>
|
||||
Pages (
|
||||
{this.state.pagePaths.length != this.state.initPagePaths.length
|
||||
? `${this.state.pagePaths.length}/${this.state.initPagePaths.length}`
|
||||
: this.state.initPagePaths.length}
|
||||
)
|
||||
</h2>
|
||||
|
||||
<form onSubmit={this.handlePagePathSearch}>
|
||||
<label>
|
||||
Search:
|
||||
<input
|
||||
type="text"
|
||||
id="search"
|
||||
placeholder="Search pages..."
|
||||
value={this.state.pagePathSearchTerms}
|
||||
onChange={this.handleSearchTermChange}
|
||||
/>
|
||||
</label>
|
||||
<input type="submit" value="Submit" />
|
||||
</form>
|
||||
<ul>
|
||||
{this.state.pagePaths.map(
|
||||
(pagePath, index) =>
|
||||
index < 100 && (
|
||||
<li key={pagePath}>
|
||||
<Link to={pagePath}>{pagePath}</Link>
|
||||
</li>
|
||||
)
|
||||
)}
|
||||
{this.state.pagePaths.length > 100 && (
|
||||
<p style={{ fontWeight: `bold` }}>
|
||||
... and {this.state.pagePaths.length - 100} more.
|
||||
</p>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default Dev404Page
|
||||
|
||||
export const pagesQuery = graphql`
|
||||
query PagesQuery {
|
||||
allSitePage(filter: { path: { ne: "/dev-404-page/" } }) {
|
||||
nodes {
|
||||
path
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
Binary file not shown.
Binary file not shown.
@@ -5,11 +5,12 @@ const preferDefault = m => m && m.default || m
|
||||
|
||||
|
||||
exports.components = {
|
||||
"component---cache-dev-404-page-js": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/.docz/.cache/dev-404-page.js"))),
|
||||
"component---src-architectures-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/architectures.mdx"))),
|
||||
"component---src-how-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/how.mdx"))),
|
||||
"component---src-index-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/index.mdx"))),
|
||||
"component---src-enterprise-index-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/enterprise/index.mdx"))),
|
||||
"component---src-enterprise-installation-cloud-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/enterprise/installation-cloud.mdx"))),
|
||||
"component---src-enterprise-index-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/enterprise/index.mdx"))),
|
||||
"component---src-enterprise-installation-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/enterprise/installation.mdx"))),
|
||||
"component---src-enterprise-releases-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/enterprise/releases.mdx"))),
|
||||
"component---src-open-source-get-started-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/open-source/get-started.mdx"))),
|
||||
@@ -17,10 +18,10 @@ exports.components = {
|
||||
"component---src-open-source-upgrade-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/open-source/upgrade.mdx"))),
|
||||
"component---src-open-source-web-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/open-source/web.mdx"))),
|
||||
"component---src-storage-get-started-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/get-started.mdx"))),
|
||||
"component---src-storage-index-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/index.mdx"))),
|
||||
"component---src-storage-installation-cloud-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/installation-cloud.mdx"))),
|
||||
"component---src-storage-installation-edge-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/installation-edge.mdx"))),
|
||||
"component---src-storage-installation-providers-md": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/installation-providers.md"))),
|
||||
"component---src-storage-index-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/index.mdx"))),
|
||||
"component---src-storage-installation-recycle-md": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/installation-recycle.md"))),
|
||||
"component---src-storage-installation-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/storage/installation.mdx"))),
|
||||
"component---src-cloud-index-mdx": hot(preferDefault(require("/Users/i353408/Vagrant/www/repos/documentation/src/cloud/index.mdx"))),
|
||||
|
||||
+16
-1
@@ -483,6 +483,11 @@
|
||||
"depth": 2,
|
||||
"value": "Traefik"
|
||||
},
|
||||
{
|
||||
"slug": "ingress-nginx-alternative-for-traefik",
|
||||
"depth": 2,
|
||||
"value": "Ingress-Nginx (alternative for Traefik)"
|
||||
},
|
||||
{
|
||||
"slug": "mongodb",
|
||||
"depth": 2,
|
||||
@@ -2270,11 +2275,21 @@
|
||||
},
|
||||
{
|
||||
"slug": "kerberos-cloud",
|
||||
"depth": 2,
|
||||
"depth": 3,
|
||||
"value": "Kerberos Cloud"
|
||||
},
|
||||
{
|
||||
"slug": "kerberos-storage",
|
||||
"depth": 3,
|
||||
"value": "Kerberos Storage"
|
||||
},
|
||||
{
|
||||
"slug": "kerberos-cloud-1",
|
||||
"depth": 2,
|
||||
"value": "Kerberos Cloud"
|
||||
},
|
||||
{
|
||||
"slug": "kerberos-storage-1",
|
||||
"depth": 2,
|
||||
"value": "Kerberos Storage"
|
||||
},
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
const { get } = require('docz-utils')
|
||||
|
||||
const NO_OP = () => {}
|
||||
|
||||
const DEFAULT_RESOLVABLE_EXTENSIONS = () => [`.js`, `.jsx`]
|
||||
|
||||
let gatsbyNodeCustom = {}
|
||||
try {
|
||||
gatsbyNodeCustom = require('./gatsby-node.custom')
|
||||
} catch (err) {}
|
||||
|
||||
// https://www.gatsbyjs.org/docs/node-apis/
|
||||
|
||||
exports.createPages = args => {
|
||||
const createPages = get(gatsbyNodeCustom, 'createPages', NO_OP)
|
||||
return createPages(args)
|
||||
}
|
||||
|
||||
exports.createPagesStatefully = args => {
|
||||
const createPagesStatefully = get(
|
||||
gatsbyNodeCustom,
|
||||
'createPagesStatefully',
|
||||
NO_OP,
|
||||
)
|
||||
return createPagesStatefully(args)
|
||||
}
|
||||
|
||||
exports.createResolvers = args => {
|
||||
const createResolvers = get(gatsbyNodeCustom, 'createResolvers', NO_OP)
|
||||
return createResolvers(args)
|
||||
}
|
||||
|
||||
exports.createSchemaCustomization = args => {
|
||||
const createSchemaCustomization = get(
|
||||
gatsbyNodeCustom,
|
||||
'createSchemaCustomization',
|
||||
NO_OP,
|
||||
)
|
||||
return createSchemaCustomization(args)
|
||||
}
|
||||
|
||||
exports.generateSideEffects = args => {
|
||||
const generateSideEffects = get(
|
||||
gatsbyNodeCustom,
|
||||
'generateSideEffects',
|
||||
NO_OP,
|
||||
)
|
||||
return generateSideEffects(args)
|
||||
}
|
||||
|
||||
exports.onCreateBabelConfig = args => {
|
||||
const onCreateBabelConfig = get(
|
||||
gatsbyNodeCustom,
|
||||
'onCreateBabelConfig',
|
||||
NO_OP,
|
||||
)
|
||||
return onCreateBabelConfig(args)
|
||||
}
|
||||
|
||||
exports.onCreateDevServer = args => {
|
||||
const onCreateDevServer = get(gatsbyNodeCustom, 'onCreateDevServer', NO_OP)
|
||||
return onCreateDevServer(args)
|
||||
}
|
||||
|
||||
exports.onCreateNode = args => {
|
||||
const onCreateNode = get(gatsbyNodeCustom, 'onCreateNode', NO_OP)
|
||||
return onCreateNode(args)
|
||||
}
|
||||
|
||||
exports.onCreatePage = args => {
|
||||
const onCreatePage = get(gatsbyNodeCustom, 'onCreatePage', NO_OP)
|
||||
return onCreatePage(args)
|
||||
}
|
||||
|
||||
exports.onCreateWebpackConfig = args => {
|
||||
const onCreateWebpackConfig = get(
|
||||
gatsbyNodeCustom,
|
||||
'onCreateWebpackConfig',
|
||||
NO_OP,
|
||||
)
|
||||
return onCreateWebpackConfig(args)
|
||||
}
|
||||
|
||||
exports.onPostBootstrap = args => {
|
||||
const onPostBootstrap = get(gatsbyNodeCustom, 'onPostBootstrap', NO_OP)
|
||||
return onPostBootstrap(args)
|
||||
}
|
||||
|
||||
exports.onPostBuild = args => {
|
||||
const onPostBuild = get(gatsbyNodeCustom, 'onPostBuild', NO_OP)
|
||||
return onPostBuild(args)
|
||||
}
|
||||
|
||||
exports.onPreBootstrap = args => {
|
||||
const onPreBootstrap = get(gatsbyNodeCustom, 'onPreBootstrap', NO_OP)
|
||||
return onPreBootstrap(args)
|
||||
}
|
||||
|
||||
exports.onPreBuild = args => {
|
||||
const onPreBuild = get(gatsbyNodeCustom, 'onPreBuild', NO_OP)
|
||||
return onPreBuild(args)
|
||||
}
|
||||
|
||||
exports.onPreExtractQueries = args => {
|
||||
const onPreExtractQueries = get(
|
||||
gatsbyNodeCustom,
|
||||
'onPreExtractQueries',
|
||||
NO_OP,
|
||||
)
|
||||
return onPreExtractQueries(args)
|
||||
}
|
||||
|
||||
exports.onPreInit = args => {
|
||||
const onPreInit = get(gatsbyNodeCustom, 'onPreInit', NO_OP)
|
||||
return onPreInit(args)
|
||||
}
|
||||
|
||||
exports.preprocessSource = args => {
|
||||
const preprocessSource = get(gatsbyNodeCustom, 'preprocessSource', NO_OP)
|
||||
return preprocessSource(args)
|
||||
}
|
||||
|
||||
exports.resolvableExtensions = args => {
|
||||
const resolvableExtensions = get(
|
||||
gatsbyNodeCustom,
|
||||
'resolvableExtensions',
|
||||
DEFAULT_RESOLVABLE_EXTENSIONS,
|
||||
)
|
||||
return resolvableExtensions(args)
|
||||
}
|
||||
|
||||
exports.setFieldsOnGraphQLNodeType = args => {
|
||||
const setFieldsOnGraphQLNodeType = get(
|
||||
gatsbyNodeCustom,
|
||||
'setFieldsOnGraphQLNodeType',
|
||||
() => ({}),
|
||||
)
|
||||
return setFieldsOnGraphQLNodeType(args)
|
||||
}
|
||||
|
||||
exports.sourceNodes = args => {
|
||||
const sourceNodes = get(gatsbyNodeCustom, 'sourceNodes', NO_OP)
|
||||
return sourceNodes(args)
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
{"componentChunkName":"component---cache-dev-404-page-js","path":"/dev-404-page/","result":{"data":{"allSitePage":{"nodes":[{"path":"/architectures"},{"path":"/how"},{"path":"/"},{"path":"/enterprise/get-started"},{"path":"/enterprise/introduction"},{"path":"/enterprise/installation-cloud"},{"path":"/enterprise/installation"},{"path":"/enterprise/releases"},{"path":"/opensource/get-started"},{"path":"/opensource/introduction"},{"path":"/opensource/upgrade"},{"path":"/opensource/web"},{"path":"/storage/get-started"},{"path":"/storage/introduction"},{"path":"/storage/installation-cloud"},{"path":"/storage/installation-edge"},{"path":"/storage/installation-recycle"},{"path":"/storage/installation-providers"},{"path":"/storage/installation"},{"path":"/cloud"},{"path":"/enterprise/installation-edge"},{"path":"/opensource/contribute"},{"path":"/opensource/installation-advanced"},{"path":"/opensource/installation"},{"path":"/opensource/license"},{"path":"/opensource/releases"},{"path":"/storage/license"},{"path":"/opensource/machinery"},{"path":"/404/"},{"path":"/404.html"}]}},"pageContext":{}}}
|
||||
{"componentChunkName":"component---cache-dev-404-page-js","path":"/dev-404-page/","result":{"data":{"allSitePage":{"nodes":[{"path":"/architectures"},{"path":"/how"},{"path":"/"},{"path":"/enterprise/installation-cloud"},{"path":"/enterprise/introduction"},{"path":"/enterprise/installation"},{"path":"/enterprise/releases"},{"path":"/opensource/get-started"},{"path":"/opensource/introduction"},{"path":"/opensource/upgrade"},{"path":"/opensource/web"},{"path":"/storage/get-started"},{"path":"/storage/introduction"},{"path":"/storage/installation-cloud"},{"path":"/storage/installation-edge"},{"path":"/storage/installation-providers"},{"path":"/storage/installation-recycle"},{"path":"/storage/installation"},{"path":"/cloud"},{"path":"/enterprise/get-started"},{"path":"/enterprise/installation-edge"},{"path":"/opensource/contribute"},{"path":"/opensource/installation-advanced"},{"path":"/opensource/installation"},{"path":"/opensource/license"},{"path":"/opensource/releases"},{"path":"/storage/license"},{"path":"/opensource/machinery"},{"path":"/404/"},{"path":"/404.html"}]}},"pageContext":{}}}
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
@@ -129,6 +129,16 @@ On the other hand it's an open platform, as it allows you build extensions and i
|
||||
|
||||
To connect one or more Kerberos Enterprise agents to your Kerberos Storage instance, you should open the configuration option and navigate to the `cloud` tab. Once selected you need to fill-in the credentials from your Kerberos Storage account.
|
||||
|
||||
- Storage URI: this is the API endpoint of your Kerberos Storage instance. Typically this is in the following format: `http(s)://api.yourdomain.com/storage`. Where `api.yourdomain.com` should match your Kerberos Storage API endpoint.
|
||||
|
||||
- Provider: the name of the provider, which you created on the Kerberos Storage providers page, to which you want to send your recordings to.
|
||||
|
||||
- Directory: this is the subdirectory in which your files will be stored. At the time of writing this should also equal your Kerberos Cloud username, if you plan to upload to Kerberos Cloud.
|
||||
|
||||
- Access Key: this should match the access key of one of your Kerberos Storage accounts.
|
||||
|
||||
- Secret Access Key: this should match the secret access key of one of your Kerberos Storage accounts.
|
||||
|
||||
|
||||

|
||||
|
||||
@@ -139,3 +149,16 @@ For the visualisation part Kerberos Cloud comes into the picture. Kerberos Cloud
|
||||
You have two choices when using Kerberos Cloud, either you send your recordings from your Kerberos Enterprise agents directly to Kerberos Cloud, or you send your recordings to Kerberos Storage, and connect Kerberos Storage to Kerberos Cloud. About the latter more is explained on the [Kerberos Storage page](/storage/get-started).
|
||||
|
||||
Select the Kerberos Cloud option, and copy-paste the credentials from your Kerberos Cloud subscription.
|
||||
|
||||

|
||||
|
||||
|
||||
- Region: this is the region where your recordings will be stored. Only `eu-west-1` for now (will change, on the roadmap).
|
||||
|
||||
- Bucket: the name of the Kerberos Cloud bucket. Only `kerberosaccept` for now (will change, on the roadmap).
|
||||
|
||||
- Directory: this is your personal directory, and matches your Kerberos Cloud username.
|
||||
|
||||
- Public Key: this should match the public key of your Kerberos Cloud subscription.
|
||||
|
||||
- Secret Access Key: this should match the private key of your Kerberos Cloud subscription.
|
||||
|
||||
@@ -10,7 +10,18 @@ Over the years Kerberos evolved into a mature and stable solution. Lots of peopl
|
||||
solution has its limitations, especially if you aim to scale it.
|
||||
|
||||
That being said, Kerberos Open Source is perfect when monitoring a limited set of surveillance cameras, but it doesn't scale well if you plan to monitor dozens or hundreds of surveillance cameras. Although Kerberos Open Source ships
|
||||
as a docker image, it has no high availability or fail over functionality. Due to these reasons we have developed Kerberos Enterprise, which is suitable for scaling against your ever growing video surveillance landscape, and keeps them up and running in whatever situation.
|
||||
as a Docker image, it has no high availability or fail over functionality.
|
||||
|
||||
Independent from that we've seen many vendors developing their own custom VMS solutions, usually tightly coupled to there proprietary surveillance hardware, which are delivered to enterprise customers as closed software solutions with limited API's and/or messaging capabilities.
|
||||
|
||||
Due to these reasons we have developed Kerberos Enterprise, Kerberos Storage and Kerberos Cloud, which is an open scalable solution stack, suitable for your ever growing video surveillance landscape, but having extensibility and integration built-in from the ground up.
|
||||
|
||||
The major key differentiators compared to to other solutions are:
|
||||
|
||||
- Scalability with Kubernetes,
|
||||
- Open API's with well documented Swagger API's,
|
||||
- Host anywhere, in the cloud or on premise,
|
||||
- Integration and extension, allowing to build custom apps, ML services and more.
|
||||
|
||||
<br/>
|
||||
<div class='embed-container'><iframe src="https://player.vimeo.com/video/405037695" width="640" height="400" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe></div>
|
||||
@@ -22,7 +33,7 @@ To provide our customer with the high availability and fail over requirements th
|
||||
|
||||

|
||||
|
||||
Kerberos Enterprise is installed inside a Kubernetes cluster. It will create pods/deployments for every surveillance camera you want to monitor. Kubernetes will scale and distrubute these pods across your nodes (VM's/Bare metal machines).
|
||||
Kerberos Enterprise is installed inside a Kubernetes cluster. It will create pods/deployments for every surveillance camera you want to monitor. Kubernetes will scale and distrubute these pods across your nodes (VM's/Baremetal machines).
|
||||
|
||||
Nodes inside your cluster can fail or crash, Kubernetes will make sure the Kerberos pods running on the failed nodes will be deployed to healthy node. This, to make sure the monitoring of your video surveillance cameras continues seamlessly.
|
||||
|
||||
|
||||
@@ -78,6 +78,14 @@ After installation you should have an IP attached to traefik service, look for i
|
||||
|
||||
Go to your DNS provider and link the domain you've configured in the first step `traefik.domain.com` to the IP address of the `EXTERNAL-IP` attribute. When browsing to `traefik.domain.com`, you should see the traefik dashboard showing up.
|
||||
|
||||
## Ingress-Nginx (alternative for Traefik)
|
||||
|
||||
If you don't like `Traefik` but you prefer `Ingress Nginx`, that works as well.
|
||||
|
||||
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
|
||||
helm repo update
|
||||
helm install ingress-nginx ingress-nginx/ingress-nginx
|
||||
|
||||
## MongoDB
|
||||
|
||||
When using Kerberos Enterprise, it will generate configurations for every surveillance camera deployed. These configuration files are stored centrally in a MongoDB database. Therefore we use `helm `to install a MongoDB instance inside your cluster.
|
||||
@@ -98,7 +106,7 @@ The last step is to install the Kerberos Enterprise application. Kerberos Enterp
|
||||
|
||||
The Factory is shipped as a web app (React) which provides you with a tool to update your deployments (agents) easily, monitor them, etc. The Factory is the central portal for managing Kerberos Enterprise inside your cluster. However at any point you can fine-tune or take-over using the `kubectl` command.
|
||||
|
||||
Before installing the Factory web app, open the `./enterprise/yaml/factory/deployment.yaml` configuration file. At the bottom file you will find two endpoints, similar to the traefik config file. Update the domain names to your own domain, and add these to your DNS server (pointing to the same IP as the traefik EXTERNAL-IP).
|
||||
Before installing the Factory web app, open the `./enterprise/yaml/factory/deployment.yaml` configuration file. At the of the bottom file you will find two endpoints, similar to the Ingres file bewlwo. Update the hostnames to your own perferred domain, and add these to your DNS server or `/etc/hosts` file (pointing to the same IP as the Traefik/Ingress nginx EXTERNAL-IP).
|
||||
|
||||
spec:
|
||||
rules:
|
||||
@@ -117,6 +125,16 @@ Before installing the Factory web app, open the `./enterprise/yaml/factory/deplo
|
||||
serviceName: factory
|
||||
servicePort: 8081
|
||||
|
||||
If you are using Ingress Nginx, do not forgot to comment `Traefik` and uncomment `Ingress Nginx`.
|
||||
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: factory
|
||||
annotations:
|
||||
#kubernetes.io/ingress.class: traefik
|
||||
kubernetes.io/ingress.class: nginx
|
||||
|
||||
Modify the MongoDB credentials, and make sure they match the credentials of your MongoDB instance.
|
||||
|
||||
- name: MONGODB_USERNAME
|
||||
|
||||
@@ -178,10 +178,10 @@ After modified properly you can go ahead with creating the PV.
|
||||
|
||||
kubectl create -f ./enterprise/yaml/mongodb/volume.yaml
|
||||
|
||||
Have a look into the `yaml/mongodb/values.yaml` file, you will find plenty of configurations for your MongoDB instance. You will also find the attribute where you can change the root password of mongodb. If using Helm version 2, write `--name mongodb`.
|
||||
Have a look into the `./enterprise/yaml/mongodb/values.yaml` file, you will find plenty of configurations for your MongoDB instance. You will also find the attribute where you can change the root password of MongoDB.
|
||||
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
||||
helm install mongodb bitnami/mongodb --values ./yaml/mongodb/values-edge.yaml
|
||||
helm install mongodb bitnami/mongodb --values ./enterprise/yaml/mongodb/values-edge.yaml
|
||||
|
||||
Once installed succesfully the MongoDB instance, we should copy the password of the MongoDB instance. Once revealed copy the password, as we will need in the next steps.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ route: /storage/get-started
|
||||
|
||||
# Get Started
|
||||
|
||||
Once you've installed Kerberos Storage, you will have the Storage web application. This web application allows you to administrate Kerberos Storage. You can add storage providers, queues, accounts, and more.
|
||||
Once you've installed Kerberos Storage, you will have the Kerberos Storage web app running. This web app allows you to administrate Kerberos Storage. You can add storage providers, queues, accounts, and more.
|
||||
|
||||
## Login page
|
||||
|
||||
|
||||
+12
-5
@@ -8,12 +8,19 @@ route: /storage/introduction
|
||||
|
||||
Kerberos Open Source and Kerberos Enterprise both store recordings on the local disk. To centralise your data at a single place, additional solutions are available.
|
||||
|
||||
1. One or more Kerberos Enterprise agents, can store their data directly on [Kerberos Cloud](/cloud).
|
||||
2. You have the option to Bring Your Own Storage (BYOS), using Kerberos Storage. Kerberos Storage allows you to configure the storage provider you want. This could be a storage provider in the cloud such as AWS S3, GCP storage or Azure Blob store. Next to that Kerberos Storage can also be installed on premise (at the edge), and use storage providers such as Minio.
|
||||
### Kerberos Cloud
|
||||
|
||||
One or more Kerberos Enterprise agents, can store their data directly on [Kerberos Cloud](/cloud), and benefit from the visualisation layer Kerberos Cloud offers. When doing this your recordings will be uploaded inside the Kerberos datacenter (which is a black box for you).
|
||||
|
||||
### Kerberos Storage
|
||||
|
||||
In addition to that you have the option to Bring Your Own Storage (BYOS), using Kerberos Storage. Kerberos Storage allows you to configure the storage providers you want, and allows you to connect to [Kerberos Cloud](/cloud) in parrallel. These storage provider could live in the cloud such as AWS S3, GCP storage and Azure Blob store, or can be located on premise - at the edge - such as Minio.
|
||||
|
||||
Despite the flexible storage capabilities, Kerberos Storage is also an open platform, which can be used to build extensions (mobile apps, web apps, machine learning services, etc) and integrations. It allows you to leverage a scalable and stable system as a strong backbone for your video analytics solutions, machine learning algorithms, and more.
|
||||
|
||||
## Kerberos Cloud
|
||||
|
||||
Within Kerberos Open Source an Kerberos Enterprise you can choose to send your local recordings to our cloud environment. This means that your data will be hosted and processed (metadata, machine learning) in a Kerberos Cloud datacenter. For more information about how Kerberos Cloud works [can be found here](/cloud).
|
||||
Within Kerberos Open Source an Kerberos Enterprise you can upload your recordings to our [Kerberos Cloud](/cloud) environment. This means that your data will be hosted and processed (metadata) in our Kerberos datacenter. For more information about how Kerberos Cloud works [can be found here](/cloud).
|
||||
|
||||

|
||||
|
||||
@@ -26,11 +33,11 @@ If you are using Kerberos Enterprise you have the possibility to bring your own
|
||||
- [Amazon Web Services S3](https://aws.amazon.com/s3/)
|
||||
- [Minio](https://min.io/)
|
||||
|
||||
Having installed Kerberos Storage in the cloud, following architecture can apply. Having your Kerberos Enterprise agents running at the edge, but uploading to Kerberos Storage in the cloud.
|
||||
When installing Kerberos Storage in the cloud, following architecture can apply. Having your Kerberos Enterprise agents running at the edge, but uploading to Kerberos Storage in the cloud.
|
||||
|
||||

|
||||
|
||||
On the other hand you could also have Kerberos Storage running at the edge, next to your Kubernetes Enterprise agents. This could be useful if you want to do processing, Computer Vision or Machine Learning, at the edge.
|
||||
On the other hand you could also have Kerberos Storage running at the edge, next to your Kubernetes Enterprise agents. This could be useful if you want to do processing or video analytics suchs as computer bision or machine learning at the edge.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -57,6 +57,17 @@ Before installing Kerberos Storage, open the `./storage/yaml/deployment.yaml` co
|
||||
serviceName: kerberos-storage
|
||||
servicePort: 8081
|
||||
|
||||
If you are using Ingress Nginx, do not forgot to comment `Traefik` and uncomment `Ingress Nginx`. Also note the extra argument `proxy-body-size`, this is required for not reaching the default 1MB body size limit. If you do not enable this, you might experience `413` errors in your Kerberos Enterprise agents.
|
||||
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: kerberos-storage
|
||||
annotations:
|
||||
#kubernetes.io/ingress.class: traefik
|
||||
kubernetes.io/ingress.class: nginx
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: 200m
|
||||
|
||||
Next to that modify the MongoDB credentials, and make sure they match the credentials of your MongoDB instance.
|
||||
|
||||
- name: MONGODB_USERNAME
|
||||
|
||||
Reference in New Issue
Block a user