From 938be1d14faa9df5dadcec9f600890749968e6f2 Mon Sep 17 00:00:00 2001 From: casbin-bot Date: Mon, 8 Apr 2024 11:17:42 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20master=20from=20@=20casbin/cas?= =?UTF-8?q?visor-website@fea94d92a6ae9509ff183d4745372a14e4313733=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 ++-- ...1fea5.63daa67d.js => a951fea5.f59928b7.js} | 2 +- ...87bcd.b6cf2d0f.js => acf87bcd.900dd8c9.js} | 2 +- ...554cd.dcd051a4.js => b2f554cd.72d54569.js} | 2 +- assets/js/d4e54de2.ab265d9c.js | 1 + assets/js/d4e54de2.acf19d4b.js | 1 - ...n.f50b0463.js => runtime~main.cd21f086.js} | 2 +- blog/archive/index.html | 4 ++-- blog/atom.xml | 4 ++-- blog/index.html | 6 +++--- blog/rss.xml | 4 ++-- blog/tags/casvisor/index.html | 6 +++--- blog/tags/index.html | 4 ++-- blog/welcome/index.html | 8 ++++---- de/404.html | 4 ++-- ...c70d7.6406d590.js => 291c70d7.c971b548.js} | 2 +- ...1fea5.cdc6085b.js => a951fea5.d4ffa053.js} | 2 +- ...87bcd.83d4a3a5.js => acf87bcd.07678cea.js} | 2 +- de/assets/js/d4e54de2.7d9909ff.js | 1 + de/assets/js/d4e54de2.fad79a7e.js | 1 - de/assets/js/runtime~main.3e0ef574.js | 1 - de/assets/js/runtime~main.7162e967.js | 1 + de/blog/archive/index.html | 4 ++-- de/blog/atom.xml | 4 ++-- de/blog/index.html | 6 +++--- de/blog/rss.xml | 4 ++-- de/blog/tags/casvisor/index.html | 6 +++--- de/blog/tags/index.html | 4 ++-- de/blog/welcome/index.html | 8 ++++---- de/docs/asset/database/index.html | 4 ++-- de/docs/asset/intranet/index.html | 4 ++-- de/docs/asset/overview/index.html | 4 ++-- de/docs/asset/rdp/index.html | 4 ++-- de/docs/asset/vnc/index.html | 4 ++-- de/docs/basic/installation/index.html | 6 +++--- de/docs/basic/try-with-docker/index.html | 4 ++-- de/docs/category/assets/index.html | 4 ++-- de/docs/category/the-basics/index.html | 4 ++-- de/docs/overview/index.html | 4 ++-- de/help/index.html | 4 ++-- de/index.html | 4 ++-- de/pdf/index.html | 4 ++-- de/users/index.html | 4 ++-- docs/asset/database/index.html | 4 ++-- docs/asset/intranet/index.html | 4 ++-- docs/asset/overview/index.html | 4 ++-- docs/asset/rdp/index.html | 4 ++-- docs/asset/vnc/index.html | 4 ++-- docs/basic/installation/index.html | 6 +++--- docs/basic/try-with-docker/index.html | 4 ++-- docs/category/assets/index.html | 4 ++-- docs/category/the-basics/index.html | 4 ++-- docs/overview/index.html | 4 ++-- fr/404.html | 4 ++-- ...1fea5.587da6f5.js => a951fea5.1cc59a16.js} | 2 +- ...87bcd.c8241db0.js => acf87bcd.96b2f257.js} | 2 +- ...3ded0.412a4b59.js => cf23ded0.6d8a93be.js} | 2 +- fr/assets/js/d4e54de2.1dcbb0cf.js | 1 - fr/assets/js/d4e54de2.9880418e.js | 1 + ...n.0626c74a.js => runtime~main.4df82265.js} | 2 +- fr/blog/archive/index.html | 4 ++-- fr/blog/atom.xml | 4 ++-- fr/blog/index.html | 6 +++--- fr/blog/rss.xml | 4 ++-- fr/blog/tags/casvisor/index.html | 6 +++--- fr/blog/tags/index.html | 4 ++-- fr/blog/welcome/index.html | 8 ++++---- fr/docs/asset/database/index.html | 4 ++-- fr/docs/asset/intranet/index.html | 4 ++-- fr/docs/asset/overview/index.html | 4 ++-- fr/docs/asset/rdp/index.html | 4 ++-- fr/docs/asset/vnc/index.html | 4 ++-- fr/docs/basic/installation/index.html | 6 +++--- fr/docs/basic/try-with-docker/index.html | 4 ++-- fr/docs/category/assets/index.html | 4 ++-- fr/docs/category/the-basics/index.html | 4 ++-- fr/docs/overview/index.html | 4 ++-- fr/help/index.html | 4 ++-- fr/index.html | 4 ++-- fr/pdf/index.html | 4 ++-- fr/users/index.html | 4 ++-- help/index.html | 4 ++-- index.html | 4 ++-- ja/404.html | 4 ++-- ...1fea5.3b0bb354.js => a951fea5.bed1d5bd.js} | 2 +- ...87bcd.121f3398.js => acf87bcd.fac2a9c7.js} | 2 +- ...922b4.113f4999.js => cc7922b4.16fe356e.js} | 2 +- ja/assets/js/d4e54de2.6217d291.js | 1 + ja/assets/js/d4e54de2.df483ec9.js | 1 - ja/assets/js/runtime~main.f499996d.js | 1 - ja/assets/js/runtime~main.fefffa8f.js | 1 + ja/blog/archive/index.html | 4 ++-- ja/blog/atom.xml | 4 ++-- ja/blog/index.html | 6 +++--- ja/blog/rss.xml | 4 ++-- ja/blog/tags/casvisor/index.html | 6 +++--- ja/blog/tags/index.html | 4 ++-- ja/blog/welcome/index.html | 8 ++++---- ja/docs/asset/database/index.html | 4 ++-- ja/docs/asset/intranet/index.html | 4 ++-- ja/docs/asset/overview/index.html | 4 ++-- ja/docs/asset/rdp/index.html | 4 ++-- ja/docs/asset/vnc/index.html | 4 ++-- ja/docs/basic/installation/index.html | 6 +++--- ja/docs/basic/try-with-docker/index.html | 4 ++-- ja/docs/category/assets/index.html | 4 ++-- ja/docs/category/the-basics/index.html | 4 ++-- ja/docs/overview/index.html | 4 ++-- ja/help/index.html | 4 ++-- ja/index.html | 4 ++-- ja/pdf/index.html | 4 ++-- ja/users/index.html | 4 ++-- ko/404.html | 4 ++-- ...2ca59.f1c84fe5.js => 52a2ca59.8388094b.js} | 2 +- ...1fea5.fc52f196.js => a951fea5.ec2459c0.js} | 2 +- ...87bcd.64ba062f.js => acf87bcd.fc3fd1af.js} | 2 +- ko/assets/js/d4e54de2.906c93bb.js | 1 + ko/assets/js/d4e54de2.979857fa.js | 1 - ...n.922e899d.js => runtime~main.9bd6a9c1.js} | 2 +- ko/blog/archive/index.html | 4 ++-- ko/blog/atom.xml | 4 ++-- ko/blog/index.html | 6 +++--- ko/blog/rss.xml | 4 ++-- ko/blog/tags/casvisor/index.html | 6 +++--- ko/blog/tags/index.html | 4 ++-- ko/blog/welcome/index.html | 8 ++++---- ko/docs/asset/database/index.html | 4 ++-- ko/docs/asset/intranet/index.html | 4 ++-- ko/docs/asset/overview/index.html | 4 ++-- ko/docs/asset/rdp/index.html | 4 ++-- ko/docs/asset/vnc/index.html | 4 ++-- ko/docs/basic/installation/index.html | 6 +++--- ko/docs/basic/try-with-docker/index.html | 4 ++-- ko/docs/category/assets/index.html | 4 ++-- ko/docs/category/the-basics/index.html | 4 ++-- ko/docs/overview/index.html | 4 ++-- ko/help/index.html | 4 ++-- ko/index.html | 4 ++-- ko/pdf/index.html | 4 ++-- ko/users/index.html | 4 ++-- pdf/Casvisor_Docs.pdf | Bin 1097333 -> 1104097 bytes pdf/Casvisor_Docs_zh.pdf | Bin 2087077 -> 2093751 bytes pdf/index.html | 4 ++-- ru/404.html | 4 ++-- ...b93ca.b6186d3c.js => 696b93ca.bf23502f.js} | 2 +- ...1fea5.f878b450.js => a951fea5.b5a38ada.js} | 2 +- ...87bcd.c6a40ea2.js => acf87bcd.17ba5192.js} | 2 +- ru/assets/js/d4e54de2.79415815.js | 1 - ru/assets/js/d4e54de2.e5108d80.js | 1 + ...n.7fdb1f31.js => runtime~main.60f0b0b2.js} | 2 +- ru/blog/archive/index.html | 4 ++-- ru/blog/atom.xml | 4 ++-- ru/blog/index.html | 6 +++--- ru/blog/rss.xml | 4 ++-- ru/blog/tags/casvisor/index.html | 6 +++--- ru/blog/tags/index.html | 4 ++-- ru/blog/welcome/index.html | 8 ++++---- ru/docs/asset/database/index.html | 4 ++-- ru/docs/asset/intranet/index.html | 4 ++-- ru/docs/asset/overview/index.html | 4 ++-- ru/docs/asset/rdp/index.html | 4 ++-- ru/docs/asset/vnc/index.html | 4 ++-- ru/docs/basic/installation/index.html | 6 +++--- ru/docs/basic/try-with-docker/index.html | 4 ++-- ru/docs/category/assets/index.html | 4 ++-- ru/docs/category/the-basics/index.html | 4 ++-- ru/docs/overview/index.html | 4 ++-- ru/help/index.html | 4 ++-- ru/index.html | 4 ++-- ru/pdf/index.html | 4 ++-- ru/users/index.html | 4 ++-- users/index.html | 4 ++-- zh/404.html | 4 ++-- ...d70e2.837862cf.js => 927d70e2.971560b2.js} | 2 +- ...1fea5.e3ffb6eb.js => a951fea5.2c5e74cd.js} | 2 +- ...87bcd.e057f9a3.js => acf87bcd.09edd8ae.js} | 2 +- zh/assets/js/d4e54de2.0a0eebf8.js | 1 + zh/assets/js/d4e54de2.c105dca3.js | 1 - ...n.5380b673.js => runtime~main.46c5e6eb.js} | 2 +- zh/blog/archive/index.html | 4 ++-- zh/blog/atom.xml | 4 ++-- zh/blog/index.html | 6 +++--- zh/blog/rss.xml | 4 ++-- zh/blog/tags/casvisor/index.html | 6 +++--- zh/blog/tags/index.html | 4 ++-- zh/blog/welcome/index.html | 8 ++++---- zh/docs/asset/database/index.html | 4 ++-- zh/docs/asset/intranet/index.html | 4 ++-- zh/docs/asset/overview/index.html | 4 ++-- zh/docs/asset/rdp/index.html | 4 ++-- zh/docs/asset/vnc/index.html | 4 ++-- zh/docs/basic/installation/index.html | 6 +++--- zh/docs/basic/try-with-docker/index.html | 4 ++-- zh/docs/category/assets/index.html | 4 ++-- zh/docs/category/the-basics/index.html | 4 ++-- zh/docs/overview/index.html | 4 ++-- zh/help/index.html | 4 ++-- zh/index.html | 4 ++-- zh/pdf/index.html | 4 ++-- zh/users/index.html | 4 ++-- 200 files changed, 378 insertions(+), 378 deletions(-) rename assets/js/{a951fea5.63daa67d.js => a951fea5.f59928b7.js} (98%) rename assets/js/{acf87bcd.b6cf2d0f.js => acf87bcd.900dd8c9.js} (98%) rename assets/js/{b2f554cd.dcd051a4.js => b2f554cd.72d54569.js} (93%) create mode 100644 assets/js/d4e54de2.ab265d9c.js delete mode 100644 assets/js/d4e54de2.acf19d4b.js rename assets/js/{runtime~main.f50b0463.js => runtime~main.cd21f086.js} (53%) rename de/assets/js/{291c70d7.6406d590.js => 291c70d7.c971b548.js} (93%) rename de/assets/js/{a951fea5.cdc6085b.js => a951fea5.d4ffa053.js} (98%) rename de/assets/js/{acf87bcd.83d4a3a5.js => acf87bcd.07678cea.js} (98%) create mode 100644 de/assets/js/d4e54de2.7d9909ff.js delete mode 100644 de/assets/js/d4e54de2.fad79a7e.js delete mode 100644 de/assets/js/runtime~main.3e0ef574.js create mode 100644 de/assets/js/runtime~main.7162e967.js rename fr/assets/js/{a951fea5.587da6f5.js => a951fea5.1cc59a16.js} (98%) rename fr/assets/js/{acf87bcd.c8241db0.js => acf87bcd.96b2f257.js} (98%) rename fr/assets/js/{cf23ded0.412a4b59.js => cf23ded0.6d8a93be.js} (93%) delete mode 100644 fr/assets/js/d4e54de2.1dcbb0cf.js create mode 100644 fr/assets/js/d4e54de2.9880418e.js rename fr/assets/js/{runtime~main.0626c74a.js => runtime~main.4df82265.js} (57%) rename ja/assets/js/{a951fea5.3b0bb354.js => a951fea5.bed1d5bd.js} (98%) rename ja/assets/js/{acf87bcd.121f3398.js => acf87bcd.fac2a9c7.js} (98%) rename ja/assets/js/{cc7922b4.113f4999.js => cc7922b4.16fe356e.js} (93%) create mode 100644 ja/assets/js/d4e54de2.6217d291.js delete mode 100644 ja/assets/js/d4e54de2.df483ec9.js delete mode 100644 ja/assets/js/runtime~main.f499996d.js create mode 100644 ja/assets/js/runtime~main.fefffa8f.js rename ko/assets/js/{52a2ca59.f1c84fe5.js => 52a2ca59.8388094b.js} (93%) rename ko/assets/js/{a951fea5.fc52f196.js => a951fea5.ec2459c0.js} (98%) rename ko/assets/js/{acf87bcd.64ba062f.js => acf87bcd.fc3fd1af.js} (98%) create mode 100644 ko/assets/js/d4e54de2.906c93bb.js delete mode 100644 ko/assets/js/d4e54de2.979857fa.js rename ko/assets/js/{runtime~main.922e899d.js => runtime~main.9bd6a9c1.js} (94%) rename ru/assets/js/{696b93ca.b6186d3c.js => 696b93ca.bf23502f.js} (93%) rename ru/assets/js/{a951fea5.f878b450.js => a951fea5.b5a38ada.js} (98%) rename ru/assets/js/{acf87bcd.c6a40ea2.js => acf87bcd.17ba5192.js} (98%) delete mode 100644 ru/assets/js/d4e54de2.79415815.js create mode 100644 ru/assets/js/d4e54de2.e5108d80.js rename ru/assets/js/{runtime~main.7fdb1f31.js => runtime~main.60f0b0b2.js} (60%) rename zh/assets/js/{927d70e2.837862cf.js => 927d70e2.971560b2.js} (93%) rename zh/assets/js/{a951fea5.e3ffb6eb.js => a951fea5.2c5e74cd.js} (98%) rename zh/assets/js/{acf87bcd.e057f9a3.js => acf87bcd.09edd8ae.js} (98%) create mode 100644 zh/assets/js/d4e54de2.0a0eebf8.js delete mode 100644 zh/assets/js/d4e54de2.c105dca3.js rename zh/assets/js/{runtime~main.5380b673.js => runtime~main.46c5e6eb.js} (57%) diff --git a/404.html b/404.html index d395e1e..598901b 100644 --- a/404.html +++ b/404.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/assets/js/a951fea5.63daa67d.js b/assets/js/a951fea5.f59928b7.js similarity index 98% rename from assets/js/a951fea5.63daa67d.js rename to assets/js/a951fea5.f59928b7.js index 6a5f051..8b4a5b4 100644 --- a/assets/js/a951fea5.63daa67d.js +++ b/assets/js/a951fea5.f59928b7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"April 8, 2024",tags:[{label:"casvisor",permalink:"/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"April 8, 2024",tags:[{label:"casvisor",permalink:"/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/acf87bcd.b6cf2d0f.js b/assets/js/acf87bcd.900dd8c9.js similarity index 98% rename from assets/js/acf87bcd.b6cf2d0f.js rename to assets/js/acf87bcd.900dd8c9.js index bb0a4fa..7e81697 100644 --- a/assets/js/acf87bcd.b6cf2d0f.js +++ b/assets/js/acf87bcd.900dd8c9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"April 8, 2024",tags:[{label:"casvisor",permalink:"/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"April 8, 2024",tags:[{label:"casvisor",permalink:"/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.dcd051a4.js b/assets/js/b2f554cd.72d54569.js similarity index 93% rename from assets/js/b2f554cd.dcd051a4.js rename to assets/js/b2f554cd.72d54569.js index 91786e0..cdddc04 100644 --- a/assets/js/b2f554cd.dcd051a4.js +++ b/assets/js/b2f554cd.72d54569.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[301],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"April 8, 2024","tags":[{"label":"casvisor","permalink":"/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[301],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"April 8, 2024","tags":[{"label":"casvisor","permalink":"/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/assets/js/d4e54de2.ab265d9c.js b/assets/js/d4e54de2.ab265d9c.js new file mode 100644 index 0000000..fcd5ec6 --- /dev/null +++ b/assets/js/d4e54de2.ab265d9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},d),{},{components:a})):n.createElement(g,i({ref:t},d))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/assets/js/d4e54de2.acf19d4b.js b/assets/js/d4e54de2.acf19d4b.js deleted file mode 100644 index 0dfe46a..0000000 --- a/assets/js/d4e54de2.acf19d4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.f50b0463.js b/assets/js/runtime~main.cd21f086.js similarity index 53% rename from assets/js/runtime~main.f50b0463.js rename to assets/js/runtime~main.cd21f086.js index e4d7e59..af955a4 100644 --- a/assets/js/runtime~main.f50b0463.js +++ b/assets/js/runtime~main.cd21f086.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,a,r,c,d={},o={};function f(e){var t=o[e];if(void 0!==t)return t.exports;var a=o[e]={exports:{}};return d[e].call(a.exports,a,a.exports,f),a.exports}f.m=d,e=[],f.O=(t,a,r,c)=>{if(!a){var d=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](a[n])))?a.splice(n--,1):(o=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,r,c]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var d={};t=t||[null,a({}),a([]),a(a)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=a(o))Object.getOwnPropertyNames(o).forEach((t=>d[t]=()=>e[t]));return d.default=()=>e,f.d(c,d),c},f.d=(e,t)=>{for(var a in t)f.o(t,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,a)=>(f.f[a](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",167:"3c34cc8d",195:"c4f5d8e4",217:"1dba9094",301:"b2f554cd",310:"ea47aeb2",369:"52be48e5",391:"290cc788",432:"a951fea5",477:"9f958c7d",514:"1be78505",533:"b2b675dd",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",713:"a7023ddc",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",864:"8dd2e619",918:"17896441",933:"39b3f2e7"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"a7b346ad",68:"fcef898b",81:"46eb4fb4",89:"1656bb5b",103:"e5273bec",151:"da92c47e",167:"f69c8db3",195:"5f072758",217:"b7d5aef2",301:"dcd051a4",310:"5e8db163",316:"81ede736",369:"68628eb6",391:"0946f115",432:"63daa67d",477:"35229af6",487:"c64f1a92",514:"bc0c2ac7",533:"124ddf38",535:"17c47168",562:"ab71eabd",583:"acf19d4b",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"b6cf2d0f",713:"3b3f3e4a",724:"1f48a7fd",740:"70ede3d4",776:"6100ff5e",778:"5e624e7e",780:"de6153af",817:"59925caf",864:"5528c9b9",918:"d7957afb",933:"0098bc9a",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},c="casvisor-website:",f.l=(e,t,a,d)=>{if(r[e])r[e].push(t);else{var o,n;if(void 0!==a)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach((e=>e(a))),t)return t(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),n&&document.head.appendChild(o)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151","3c34cc8d":"167",c4f5d8e4:"195","1dba9094":"217",b2f554cd:"301",ea47aeb2:"310","52be48e5":"369","290cc788":"391",a951fea5:"432","9f958c7d":"477","1be78505":"514",b2b675dd:"533","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646",a7023ddc:"713","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","8dd2e619":"864","39b3f2e7":"933"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,a)=>{var r=f.o(e,t)?e[t]:void 0;if(0!==r)if(r)a.push(r[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((a,c)=>r=e[t]=[a,c]));a.push(r[2]=c);var d=f.p+f.u(t),o=new Error;f.l(d,(a=>{if(f.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var c=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;o.message="Loading chunk "+t+" failed.\n("+c+": "+d+")",o.name="ChunkLoadError",o.type=c,o.request=d,r[1](o)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,a)=>{var r,c,d=a[0],o=a[1],n=a[2],b=0;if(d.some((t=>0!==e[t]))){for(r in o)f.o(o,r)&&(f.m[r]=o[r]);if(n)var i=n(f)}for(t&&t(a);b{"use strict";var e,t,a,r,c,d={},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var a=o[e]={exports:{}};return d[e].call(a.exports,a,a.exports,n),a.exports}n.m=d,e=[],n.O=(t,a,r,c)=>{if(!a){var d=1/0;for(i=0;i=c)&&Object.keys(n.O).every((e=>n.O[e](a[f])))?a.splice(f--,1):(o=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,r,c]},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,n.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);n.r(c);var d={};t=t||[null,a({}),a([]),a(a)];for(var o=2&r&&e;"object"==typeof o&&!~t.indexOf(o);o=a(o))Object.getOwnPropertyNames(o).forEach((t=>d[t]=()=>e[t]));return d.default=()=>e,n.d(c,d),c},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,a)=>(n.f[a](e,t),t)),[])),n.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",167:"3c34cc8d",195:"c4f5d8e4",217:"1dba9094",301:"b2f554cd",310:"ea47aeb2",369:"52be48e5",391:"290cc788",432:"a951fea5",477:"9f958c7d",514:"1be78505",533:"b2b675dd",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",713:"a7023ddc",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",864:"8dd2e619",918:"17896441",933:"39b3f2e7"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"a7b346ad",68:"fcef898b",81:"46eb4fb4",89:"1656bb5b",103:"e5273bec",151:"da92c47e",167:"f69c8db3",195:"5f072758",217:"b7d5aef2",301:"72d54569",310:"5e8db163",316:"81ede736",369:"68628eb6",391:"0946f115",432:"f59928b7",477:"35229af6",487:"c64f1a92",514:"bc0c2ac7",533:"124ddf38",535:"17c47168",562:"ab71eabd",583:"ab265d9c",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"900dd8c9",713:"3b3f3e4a",724:"1f48a7fd",740:"70ede3d4",776:"6100ff5e",778:"5e624e7e",780:"de6153af",817:"59925caf",864:"5528c9b9",918:"d7957afb",933:"0098bc9a",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",n.miniCssF=e=>{},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},c="casvisor-website:",n.l=(e,t,a,d)=>{if(r[e])r[e].push(t);else{var o,f;if(void 0!==a)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach((e=>e(a))),t)return t(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),f&&document.head.appendChild(o)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/",n.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151","3c34cc8d":"167",c4f5d8e4:"195","1dba9094":"217",b2f554cd:"301",ea47aeb2:"310","52be48e5":"369","290cc788":"391",a951fea5:"432","9f958c7d":"477","1be78505":"514",b2b675dd:"533","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646",a7023ddc:"713","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","8dd2e619":"864","39b3f2e7":"933"}[e]||e,n.p+n.u(e)},(()=>{var e={303:0,532:0};n.f.j=(t,a)=>{var r=n.o(e,t)?e[t]:void 0;if(0!==r)if(r)a.push(r[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((a,c)=>r=e[t]=[a,c]));a.push(r[2]=c);var d=n.p+n.u(t),o=new Error;n.l(d,(a=>{if(n.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var c=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;o.message="Loading chunk "+t+" failed.\n("+c+": "+d+")",o.name="ChunkLoadError",o.type=c,o.request=d,r[1](o)}}),"chunk-"+t,t)}},n.O.j=t=>0===e[t];var t=(t,a)=>{var r,c,d=a[0],o=a[1],f=a[2],b=0;if(d.some((t=>0!==e[t]))){for(r in o)n.o(o,r)&&(n.m[r]=o[r]);if(f)var i=f(n)}for(t&&t(a);b!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index 302e22d..4fb66ab 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/blog/index.html b/blog/index.html index 561ea57..21e7629 100644 --- a/blog/index.html +++ b/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index 7a27622..8f7e32a 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/de/assets/js/291c70d7.6406d590.js b/de/assets/js/291c70d7.c971b548.js similarity index 93% rename from de/assets/js/291c70d7.6406d590.js rename to de/assets/js/291c70d7.c971b548.js index c7e3a19..4b4f268 100644 --- a/de/assets/js/291c70d7.6406d590.js +++ b/de/assets/js/291c70d7.c971b548.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[725],{9574:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/de/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"8. April 2024","tags":[{"label":"casvisor","permalink":"/de/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[725],{9574:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/de/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"8. April 2024","tags":[{"label":"casvisor","permalink":"/de/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/de/assets/js/a951fea5.cdc6085b.js b/de/assets/js/a951fea5.d4ffa053.js similarity index 98% rename from de/assets/js/a951fea5.cdc6085b.js rename to de/assets/js/a951fea5.d4ffa053.js index d737754..0d9a9be 100644 --- a/de/assets/js/a951fea5.cdc6085b.js +++ b/de/assets/js/a951fea5.d4ffa053.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/de/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"8. April 2024",tags:[{label:"casvisor",permalink:"/de/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/de/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"8. April 2024",tags:[{label:"casvisor",permalink:"/de/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/de/assets/js/acf87bcd.83d4a3a5.js b/de/assets/js/acf87bcd.07678cea.js similarity index 98% rename from de/assets/js/acf87bcd.83d4a3a5.js rename to de/assets/js/acf87bcd.07678cea.js index 420591a..8b54093 100644 --- a/de/assets/js/acf87bcd.83d4a3a5.js +++ b/de/assets/js/acf87bcd.07678cea.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/de/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"8. April 2024",tags:[{label:"casvisor",permalink:"/de/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/de/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"8. April 2024",tags:[{label:"casvisor",permalink:"/de/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/de/assets/js/d4e54de2.7d9909ff.js b/de/assets/js/d4e54de2.7d9909ff.js new file mode 100644 index 0000000..9602ea0 --- /dev/null +++ b/de/assets/js/d4e54de2.7d9909ff.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},d),{},{components:a})):n.createElement(g,i({ref:t},d))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/de/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/de/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/de/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/de/assets/js/d4e54de2.fad79a7e.js b/de/assets/js/d4e54de2.fad79a7e.js deleted file mode 100644 index 9040043..0000000 --- a/de/assets/js/d4e54de2.fad79a7e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/de/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/de/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/de/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/de/assets/js/runtime~main.3e0ef574.js b/de/assets/js/runtime~main.3e0ef574.js deleted file mode 100644 index c0f51c7..0000000 --- a/de/assets/js/runtime~main.3e0ef574.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,t,r,a,c,o={},d={};function f(e){var t=d[e];if(void 0!==t)return t.exports;var r=d[e]={exports:{}};return o[e].call(r.exports,r,r.exports,f),r.exports}f.m=o,e=[],f.O=(t,r,a,c)=>{if(!r){var o=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](r[n])))?r.splice(n--,1):(d=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[r,a,c]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var o={};t=t||[null,r({}),r([]),r(r)];for(var d=2&a&&e;"object"==typeof d&&!~t.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,f.d(c,o),c},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",45:"5a84578f",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",307:"efa2691c",310:"ea47aeb2",391:"290cc788",432:"a951fea5",495:"41944db3",512:"756b6fdd",514:"1be78505",534:"5c56caec",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",725:"291c70d7",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",864:"8dd2e619",917:"06459453",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",45:"605ae6e1",48:"63c544ab",53:"062cb9f6",68:"02ae9043",81:"c3f39f16",89:"1656bb5b",103:"e5273bec",151:"f180b9d5",195:"5f072758",217:"b7d5aef2",307:"070b54c6",310:"cc288558",316:"81ede736",391:"0946f115",432:"cdc6085b",487:"c64f1a92",495:"a76584eb",512:"1ed9e966",514:"bc0c2ac7",534:"b9b80df1",535:"21bb2956",562:"3d64ac69",583:"fad79a7e",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"83d4a3a5",724:"1f48a7fd",725:"6406d590",740:"70ede3d4",776:"afd3c150",778:"0208f995",780:"de6153af",817:"59925caf",864:"5528c9b9",917:"12299bd9",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},c="casvisor-website:",f.l=(e,t,r,o)=>{if(a[e])a[e].push(t);else{var d,n;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(l);var c=a[e];if(delete a[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(r))),t)return t(r)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=s.bind(null,d.onerror),d.onload=s.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/de/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","5a84578f":"45","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217",efa2691c:"307",ea47aeb2:"310","290cc788":"391",a951fea5:"432","41944db3":"495","756b6fdd":"512","1be78505":"514","5c56caec":"534","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646","291c70d7":"725","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","8dd2e619":"864","06459453":"917"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((r,c)=>a=e[t]=[r,c]));r.push(a[2]=c);var o=f.p+f.u(t),d=new Error;f.l(o,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var c=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;d.message="Loading chunk "+t+" failed.\n("+c+": "+o+")",d.name="ChunkLoadError",d.type=c,d.request=o,a[1](d)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,c,o=r[0],d=r[1],n=r[2],b=0;if(o.some((t=>0!==e[t]))){for(a in d)f.o(d,a)&&(f.m[a]=d[a]);if(n)var i=n(f)}for(t&&t(r);b{"use strict";var e,t,a,r,c,o={},f={};function d(e){var t=f[e];if(void 0!==t)return t.exports;var a=f[e]={exports:{}};return o[e].call(a.exports,a,a.exports,d),a.exports}d.m=o,e=[],d.O=(t,a,r,c)=>{if(!a){var o=1/0;for(i=0;i=c)&&Object.keys(d.O).every((e=>d.O[e](a[n])))?a.splice(n--,1):(f=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,r,c]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var o={};t=t||[null,a({}),a([]),a(a)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=a(f))Object.getOwnPropertyNames(f).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,d.d(c,o),c},d.d=(e,t)=>{for(var a in t)d.o(t,a)&&!d.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,a)=>(d.f[a](e,t),t)),[])),d.u=e=>"assets/js/"+({13:"01a85c17",45:"5a84578f",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",307:"efa2691c",310:"ea47aeb2",391:"290cc788",432:"a951fea5",495:"41944db3",512:"756b6fdd",514:"1be78505",534:"5c56caec",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",725:"291c70d7",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",864:"8dd2e619",917:"06459453",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",45:"605ae6e1",48:"63c544ab",53:"062cb9f6",68:"02ae9043",81:"c3f39f16",89:"1656bb5b",103:"e5273bec",151:"f180b9d5",195:"5f072758",217:"b7d5aef2",307:"070b54c6",310:"cc288558",316:"81ede736",391:"0946f115",432:"d4ffa053",487:"c64f1a92",495:"a76584eb",512:"1ed9e966",514:"bc0c2ac7",534:"b9b80df1",535:"21bb2956",562:"3d64ac69",583:"7d9909ff",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"07678cea",724:"1f48a7fd",725:"c971b548",740:"70ede3d4",776:"afd3c150",778:"0208f995",780:"de6153af",817:"59925caf",864:"5528c9b9",917:"12299bd9",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},c="casvisor-website:",d.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var f,n;if(void 0!==a)for(var b=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach((e=>e(a))),t)return t(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),n&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/de/",d.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","5a84578f":"45","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217",efa2691c:"307",ea47aeb2:"310","290cc788":"391",a951fea5:"432","41944db3":"495","756b6fdd":"512","1be78505":"514","5c56caec":"534","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646","291c70d7":"725","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","8dd2e619":"864","06459453":"917"}[e]||e,d.p+d.u(e)},(()=>{var e={303:0,532:0};d.f.j=(t,a)=>{var r=d.o(e,t)?e[t]:void 0;if(0!==r)if(r)a.push(r[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((a,c)=>r=e[t]=[a,c]));a.push(r[2]=c);var o=d.p+d.u(t),f=new Error;d.l(o,(a=>{if(d.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var c=a&&("load"===a.type?"missing":a.type),o=a&&a.target&&a.target.src;f.message="Loading chunk "+t+" failed.\n("+c+": "+o+")",f.name="ChunkLoadError",f.type=c,f.request=o,r[1](f)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,a)=>{var r,c,o=a[0],f=a[1],n=a[2],b=0;if(o.some((t=>0!==e[t]))){for(r in f)d.o(f,r)&&(d.m[r]=f[r]);if(n)var i=n(d)}for(t&&t(a);b!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/blog/atom.xml b/de/blog/atom.xml index e7b4408..aa84a36 100644 --- a/de/blog/atom.xml +++ b/de/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/de/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/de/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/de/blog/index.html b/de/blog/index.html index 2e6a492..6d02ed3 100644 --- a/de/blog/index.html +++ b/de/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/de/blog/welcome/index.html b/de/blog/welcome/index.html index 776f325..f4f53b2 100644 --- a/de/blog/welcome/index.html +++ b/de/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/de/docs/asset/intranet/index.html b/de/docs/asset/intranet/index.html index 8ddaba4..2f3c626 100644 --- a/de/docs/asset/intranet/index.html +++ b/de/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/de/docs/asset/overview/index.html b/de/docs/asset/overview/index.html index fe3c5a0..4c3288f 100644 --- a/de/docs/asset/overview/index.html +++ b/de/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/docs/asset/rdp/index.html b/de/docs/asset/rdp/index.html index c3188be..dd1517f 100644 --- a/de/docs/asset/rdp/index.html +++ b/de/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/de/docs/asset/vnc/index.html b/de/docs/asset/vnc/index.html index ef5d1df..7c3e3a7 100644 --- a/de/docs/asset/vnc/index.html +++ b/de/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/de/docs/basic/installation/index.html b/de/docs/basic/installation/index.html index 6d67022..7286c07 100644 --- a/de/docs/basic/installation/index.html +++ b/de/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/de/docs/basic/try-with-docker/index.html b/de/docs/basic/try-with-docker/index.html index 129a2d2..946a98a 100644 --- a/de/docs/basic/try-with-docker/index.html +++ b/de/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/de/docs/category/assets/index.html b/de/docs/category/assets/index.html index eede317..cbb43f7 100644 --- a/de/docs/category/assets/index.html +++ b/de/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/docs/category/the-basics/index.html b/de/docs/category/the-basics/index.html index 5a72e6b..db87663 100644 --- a/de/docs/category/the-basics/index.html +++ b/de/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/docs/overview/index.html b/de/docs/overview/index.html index 80a97c4..0e32e2e 100644 --- a/de/docs/overview/index.html +++ b/de/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/help/index.html b/de/help/index.html index 794eb74..1e5761d 100644 --- a/de/help/index.html +++ b/de/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/index.html b/de/index.html index e2ed184..497e4d5 100644 --- a/de/index.html +++ b/de/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/pdf/index.html b/de/pdf/index.html index 6668a70..391a85a 100644 --- a/de/pdf/index.html +++ b/de/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/de/users/index.html b/de/users/index.html index 9bad6f2..73bafa9 100644 --- a/de/users/index.html +++ b/de/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/docs/asset/database/index.html b/docs/asset/database/index.html index 098e3e0..a071a7b 100644 --- a/docs/asset/database/index.html +++ b/docs/asset/database/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/docs/asset/intranet/index.html b/docs/asset/intranet/index.html index 33edda2..a09a52b 100644 --- a/docs/asset/intranet/index.html +++ b/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/docs/asset/overview/index.html b/docs/asset/overview/index.html index 947a226..451db4e 100644 --- a/docs/asset/overview/index.html +++ b/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/docs/asset/rdp/index.html b/docs/asset/rdp/index.html index fc65643..7f04e4b 100644 --- a/docs/asset/rdp/index.html +++ b/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/docs/asset/vnc/index.html b/docs/asset/vnc/index.html index ec34716..a0bb7cd 100644 --- a/docs/asset/vnc/index.html +++ b/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/docs/basic/installation/index.html b/docs/basic/installation/index.html index d430f79..f584baa 100644 --- a/docs/basic/installation/index.html +++ b/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/docs/basic/try-with-docker/index.html b/docs/basic/try-with-docker/index.html index 6f1b40f..00f0c44 100644 --- a/docs/basic/try-with-docker/index.html +++ b/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/docs/category/assets/index.html b/docs/category/assets/index.html index b1c42fc..ffbed0c 100644 --- a/docs/category/assets/index.html +++ b/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/docs/category/the-basics/index.html b/docs/category/the-basics/index.html index 2026ad2..30425b5 100644 --- a/docs/category/the-basics/index.html +++ b/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/docs/overview/index.html b/docs/overview/index.html index 7dbc915..b5cc87f 100644 --- a/docs/overview/index.html +++ b/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/404.html b/fr/404.html index 0f4dc91..7776f23 100644 --- a/fr/404.html +++ b/fr/404.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/assets/js/a951fea5.587da6f5.js b/fr/assets/js/a951fea5.1cc59a16.js similarity index 98% rename from fr/assets/js/a951fea5.587da6f5.js rename to fr/assets/js/a951fea5.1cc59a16.js index ce09e17..fe8bdec 100644 --- a/fr/assets/js/a951fea5.587da6f5.js +++ b/fr/assets/js/a951fea5.1cc59a16.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/fr/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"8 avril 2024",tags:[{label:"casvisor",permalink:"/fr/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/fr/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"8 avril 2024",tags:[{label:"casvisor",permalink:"/fr/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/fr/assets/js/acf87bcd.c8241db0.js b/fr/assets/js/acf87bcd.96b2f257.js similarity index 98% rename from fr/assets/js/acf87bcd.c8241db0.js rename to fr/assets/js/acf87bcd.96b2f257.js index a68ee1c..4e15c9a 100644 --- a/fr/assets/js/acf87bcd.c8241db0.js +++ b/fr/assets/js/acf87bcd.96b2f257.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/fr/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"8 avril 2024",tags:[{label:"casvisor",permalink:"/fr/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/fr/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"8 avril 2024",tags:[{label:"casvisor",permalink:"/fr/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/fr/assets/js/cf23ded0.412a4b59.js b/fr/assets/js/cf23ded0.6d8a93be.js similarity index 93% rename from fr/assets/js/cf23ded0.412a4b59.js rename to fr/assets/js/cf23ded0.6d8a93be.js index b933331..7f43101 100644 --- a/fr/assets/js/cf23ded0.412a4b59.js +++ b/fr/assets/js/cf23ded0.6d8a93be.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[375],{441:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/fr/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"8 avril 2024","tags":[{"label":"casvisor","permalink":"/fr/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[375],{441:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/fr/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"8 avril 2024","tags":[{"label":"casvisor","permalink":"/fr/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/fr/assets/js/d4e54de2.1dcbb0cf.js b/fr/assets/js/d4e54de2.1dcbb0cf.js deleted file mode 100644 index 787cd86..0000000 --- a/fr/assets/js/d4e54de2.1dcbb0cf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/fr/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/fr/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/fr/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/fr/assets/js/d4e54de2.9880418e.js b/fr/assets/js/d4e54de2.9880418e.js new file mode 100644 index 0000000..cddcfd5 --- /dev/null +++ b/fr/assets/js/d4e54de2.9880418e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},d),{},{components:a})):n.createElement(g,i({ref:t},d))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/fr/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/fr/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/fr/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/fr/assets/js/runtime~main.0626c74a.js b/fr/assets/js/runtime~main.4df82265.js similarity index 57% rename from fr/assets/js/runtime~main.0626c74a.js rename to fr/assets/js/runtime~main.4df82265.js index 2624e04..e04b112 100644 --- a/fr/assets/js/runtime~main.0626c74a.js +++ b/fr/assets/js/runtime~main.4df82265.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,c,d={},o={};function f(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return d[e].call(r.exports,r,r.exports,f),r.exports}f.m=d,e=[],f.O=(t,r,a,c)=>{if(!r){var d=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](r[n])))?r.splice(n--,1):(o=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[r,a,c]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var d={};t=t||[null,r({}),r([]),r(r)];for(var o=2&a&&e;"object"==typeof o&&!~t.indexOf(o);o=r(o))Object.getOwnPropertyNames(o).forEach((t=>d[t]=()=>e[t]));return d.default=()=>e,f.d(c,d),c},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",64:"ad0f6f13",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",136:"92293c9c",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",310:"ea47aeb2",375:"cf23ded0",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",573:"5282d824",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",740:"7e37206e",764:"8064e645",776:"81130aff",778:"49d2d5a5",780:"596abbce",800:"d58f2f6c",817:"14eb3368",864:"8dd2e619",918:"17896441",949:"233e9358"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"4fc17c51",64:"05c3963a",68:"ee671812",81:"8a76354a",89:"1656bb5b",103:"e5273bec",136:"e808ffaa",151:"560c292b",195:"5f072758",217:"b7d5aef2",310:"2336406c",316:"81ede736",375:"412a4b59",391:"0946f115",432:"587da6f5",487:"c64f1a92",514:"bc0c2ac7",535:"034c15f0",562:"6a4697c1",573:"32af3821",583:"1dcbb0cf",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"c8241db0",724:"1f48a7fd",740:"70ede3d4",764:"742def1d",776:"b5ade577",778:"dcaa336f",780:"de6153af",800:"fe15ecd1",817:"59925caf",864:"5528c9b9",918:"d7957afb",949:"0f133c05",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},c="casvisor-website:",f.l=(e,t,r,d)=>{if(a[e])a[e].push(t);else{var o,n;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(l);var c=a[e];if(delete a[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach((e=>e(r))),t)return t(r)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),n&&document.head.appendChild(o)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/fr/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53",ad0f6f13:"64","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","92293c9c":"136","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217",ea47aeb2:"310",cf23ded0:"375","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562","5282d824":"573",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646","7e37206e":"740","8064e645":"764","81130aff":"776","49d2d5a5":"778","596abbce":"780",d58f2f6c:"800","14eb3368":"817","8dd2e619":"864","233e9358":"949"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((r,c)=>a=e[t]=[r,c]));r.push(a[2]=c);var d=f.p+f.u(t),o=new Error;f.l(d,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var c=r&&("load"===r.type?"missing":r.type),d=r&&r.target&&r.target.src;o.message="Loading chunk "+t+" failed.\n("+c+": "+d+")",o.name="ChunkLoadError",o.type=c,o.request=d,a[1](o)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,c,d=r[0],o=r[1],n=r[2],b=0;if(d.some((t=>0!==e[t]))){for(a in o)f.o(o,a)&&(f.m[a]=o[a]);if(n)var i=n(f)}for(t&&t(r);b{"use strict";var e,t,r,a,d,c={},o={};function f(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return c[e].call(r.exports,r,r.exports,f),r.exports}f.m=c,e=[],f.O=(t,r,a,d)=>{if(!r){var c=1/0;for(b=0;b=d)&&Object.keys(f.O).every((e=>f.O[e](r[n])))?r.splice(n--,1):(o=!1,d0&&e[b-1][2]>d;b--)e[b]=e[b-1];e[b]=[r,a,d]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var d=Object.create(null);f.r(d);var c={};t=t||[null,r({}),r([]),r(r)];for(var o=2&a&&e;"object"==typeof o&&!~t.indexOf(o);o=r(o))Object.getOwnPropertyNames(o).forEach((t=>c[t]=()=>e[t]));return c.default=()=>e,f.d(d,c),d},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",64:"ad0f6f13",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",136:"92293c9c",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",310:"ea47aeb2",375:"cf23ded0",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",573:"5282d824",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",740:"7e37206e",764:"8064e645",776:"81130aff",778:"49d2d5a5",780:"596abbce",800:"d58f2f6c",817:"14eb3368",864:"8dd2e619",918:"17896441",949:"233e9358"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"4fc17c51",64:"05c3963a",68:"ee671812",81:"8a76354a",89:"1656bb5b",103:"e5273bec",136:"e808ffaa",151:"560c292b",195:"5f072758",217:"b7d5aef2",310:"2336406c",316:"81ede736",375:"6d8a93be",391:"0946f115",432:"1cc59a16",487:"c64f1a92",514:"bc0c2ac7",535:"034c15f0",562:"6a4697c1",573:"32af3821",583:"9880418e",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"96b2f257",724:"1f48a7fd",740:"70ede3d4",764:"742def1d",776:"b5ade577",778:"dcaa336f",780:"de6153af",800:"fe15ecd1",817:"59925caf",864:"5528c9b9",918:"d7957afb",949:"0f133c05",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},d="casvisor-website:",f.l=(e,t,r,c)=>{if(a[e])a[e].push(t);else{var o,n;if(void 0!==r)for(var i=document.getElementsByTagName("script"),b=0;b{o.onerror=o.onload=null,clearTimeout(l);var d=a[e];if(delete a[e],o.parentNode&&o.parentNode.removeChild(o),d&&d.forEach((e=>e(r))),t)return t(r)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),n&&document.head.appendChild(o)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/fr/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53",ad0f6f13:"64","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","92293c9c":"136","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217",ea47aeb2:"310",cf23ded0:"375","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562","5282d824":"573",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646","7e37206e":"740","8064e645":"764","81130aff":"776","49d2d5a5":"778","596abbce":"780",d58f2f6c:"800","14eb3368":"817","8dd2e619":"864","233e9358":"949"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var d=new Promise(((r,d)=>a=e[t]=[r,d]));r.push(a[2]=d);var c=f.p+f.u(t),o=new Error;f.l(c,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var d=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;o.message="Loading chunk "+t+" failed.\n("+d+": "+c+")",o.name="ChunkLoadError",o.type=d,o.request=c,a[1](o)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,d,c=r[0],o=r[1],n=r[2],i=0;if(c.some((t=>0!==e[t]))){for(a in o)f.o(o,a)&&(f.m[a]=o[a]);if(n)var b=n(f)}for(t&&t(r);i!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/blog/atom.xml b/fr/blog/atom.xml index 0be2659..7df6704 100644 --- a/fr/blog/atom.xml +++ b/fr/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/fr/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/fr/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/fr/blog/index.html b/fr/blog/index.html index 5f71696..0eb61dd 100644 --- a/fr/blog/index.html +++ b/fr/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/fr/blog/welcome/index.html b/fr/blog/welcome/index.html index 85e0531..1f11e73 100644 --- a/fr/blog/welcome/index.html +++ b/fr/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/fr/docs/asset/intranet/index.html b/fr/docs/asset/intranet/index.html index f3c6204..94daa2b 100644 --- a/fr/docs/asset/intranet/index.html +++ b/fr/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/fr/docs/asset/overview/index.html b/fr/docs/asset/overview/index.html index b2a0e3f..c90c36b 100644 --- a/fr/docs/asset/overview/index.html +++ b/fr/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/docs/asset/rdp/index.html b/fr/docs/asset/rdp/index.html index 63abed2..59cdaf2 100644 --- a/fr/docs/asset/rdp/index.html +++ b/fr/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/fr/docs/asset/vnc/index.html b/fr/docs/asset/vnc/index.html index 6d5e52d..721eccd 100644 --- a/fr/docs/asset/vnc/index.html +++ b/fr/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/fr/docs/basic/installation/index.html b/fr/docs/basic/installation/index.html index fccd56f..3f8d6f9 100644 --- a/fr/docs/basic/installation/index.html +++ b/fr/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/fr/docs/basic/try-with-docker/index.html b/fr/docs/basic/try-with-docker/index.html index fee735c..8c36233 100644 --- a/fr/docs/basic/try-with-docker/index.html +++ b/fr/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/fr/docs/category/assets/index.html b/fr/docs/category/assets/index.html index bd29c45..9e821db 100644 --- a/fr/docs/category/assets/index.html +++ b/fr/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/docs/category/the-basics/index.html b/fr/docs/category/the-basics/index.html index 0af320b..a2720b1 100644 --- a/fr/docs/category/the-basics/index.html +++ b/fr/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/docs/overview/index.html b/fr/docs/overview/index.html index 6b6b7af..8301daf 100644 --- a/fr/docs/overview/index.html +++ b/fr/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/help/index.html b/fr/help/index.html index 7d59978..7eff920 100644 --- a/fr/help/index.html +++ b/fr/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/index.html b/fr/index.html index e21ee6b..6a11c5b 100644 --- a/fr/index.html +++ b/fr/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/pdf/index.html b/fr/pdf/index.html index c10c4a6..750df1e 100644 --- a/fr/pdf/index.html +++ b/fr/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/fr/users/index.html b/fr/users/index.html index a041541..c28c6a3 100644 --- a/fr/users/index.html +++ b/fr/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/help/index.html b/help/index.html index 64cb4f1..4e0a9d3 100644 --- a/help/index.html +++ b/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/index.html b/index.html index ac6a52a..134616a 100644 --- a/index.html +++ b/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/404.html b/ja/404.html index 7ea801a..1aafc3d 100644 --- a/ja/404.html +++ b/ja/404.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/assets/js/a951fea5.3b0bb354.js b/ja/assets/js/a951fea5.bed1d5bd.js similarity index 98% rename from ja/assets/js/a951fea5.3b0bb354.js rename to ja/assets/js/a951fea5.bed1d5bd.js index 7fb8707..b2614ae 100644 --- a/ja/assets/js/a951fea5.3b0bb354.js +++ b/ja/assets/js/a951fea5.bed1d5bd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=a,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||o;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,c=new Array(o);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ja/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/ja/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=a,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||o;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,c=new Array(o);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ja/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/ja/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ja/assets/js/acf87bcd.121f3398.js b/ja/assets/js/acf87bcd.fac2a9c7.js similarity index 98% rename from ja/assets/js/acf87bcd.121f3398.js rename to ja/assets/js/acf87bcd.fac2a9c7.js index 62256a6..9b11052 100644 --- a/ja/assets/js/acf87bcd.121f3398.js +++ b/ja/assets/js/acf87bcd.fac2a9c7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=a,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||o;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,c=new Array(o);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ja/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/ja/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=a,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||o;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,c=new Array(o);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:a,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ja/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/ja/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ja/assets/js/cc7922b4.113f4999.js b/ja/assets/js/cc7922b4.16fe356e.js similarity index 93% rename from ja/assets/js/cc7922b4.113f4999.js rename to ja/assets/js/cc7922b4.16fe356e.js index 41477ba..1b704bd 100644 --- a/ja/assets/js/cc7922b4.113f4999.js +++ b/ja/assets/js/cc7922b4.16fe356e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[683],{6241:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/ja/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"2024\u5e744\u67088\u65e5","tags":[{"label":"casvisor","permalink":"/ja/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[683],{6241:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/ja/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"2024\u5e744\u67088\u65e5","tags":[{"label":"casvisor","permalink":"/ja/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/ja/assets/js/d4e54de2.6217d291.js b/ja/assets/js/d4e54de2.6217d291.js new file mode 100644 index 0000000..272a1c2 --- /dev/null +++ b/ja/assets/js/d4e54de2.6217d291.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},d),{},{components:a})):n.createElement(g,i({ref:t},d))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/ja/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/ja/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/ja/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/ja/assets/js/d4e54de2.df483ec9.js b/ja/assets/js/d4e54de2.df483ec9.js deleted file mode 100644 index a43aabb..0000000 --- a/ja/assets/js/d4e54de2.df483ec9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/ja/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/ja/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/ja/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/ja/assets/js/runtime~main.f499996d.js b/ja/assets/js/runtime~main.f499996d.js deleted file mode 100644 index 28817d6..0000000 --- a/ja/assets/js/runtime~main.f499996d.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,t,a,r,c,o={},f={};function d(e){var t=f[e];if(void 0!==t)return t.exports;var a=f[e]={exports:{}};return o[e].call(a.exports,a,a.exports,d),a.exports}d.m=o,e=[],d.O=(t,a,r,c)=>{if(!a){var o=1/0;for(i=0;i=c)&&Object.keys(d.O).every((e=>d.O[e](a[n])))?a.splice(n--,1):(f=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,r,c]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);d.r(c);var o={};t=t||[null,a({}),a([]),a(a)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=a(f))Object.getOwnPropertyNames(f).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,d.d(c,o),c},d.d=(e,t)=>{for(var a in t)d.o(t,a)&&!d.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,a)=>(d.f[a](e,t),t)),[])),d.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",116:"cd73f118",140:"df343330",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",260:"8485318f",310:"ea47aeb2",359:"8ac5017a",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",683:"cc7922b4",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",819:"1ae33c86",864:"8dd2e619",876:"9d1be773",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"687c9a32",68:"adaaed4a",81:"7d502725",89:"1656bb5b",103:"e5273bec",116:"7a8658de",140:"3d46ca05",151:"6ca14b87",195:"5f072758",217:"b7d5aef2",260:"21403fc1",310:"ab1b245f",316:"81ede736",359:"59c90504",391:"0946f115",432:"3b0bb354",487:"c64f1a92",514:"bc0c2ac7",535:"b6611bdf",562:"9889cb0d",583:"df483ec9",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"121f3398",683:"113f4999",724:"1f48a7fd",740:"70ede3d4",776:"b6e04f19",778:"13abd663",780:"de6153af",817:"59925caf",819:"7b90ced9",864:"5528c9b9",876:"3291d69b",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},c="casvisor-website:",d.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var f,n;if(void 0!==a)for(var b=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach((e=>e(a))),t)return t(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),n&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/ja/",d.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103",cd73f118:"116",df343330:"140","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217","8485318f":"260",ea47aeb2:"310","8ac5017a":"359","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646",cc7922b4:"683","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","1ae33c86":"819","8dd2e619":"864","9d1be773":"876"}[e]||e,d.p+d.u(e)},(()=>{var e={303:0,532:0};d.f.j=(t,a)=>{var r=d.o(e,t)?e[t]:void 0;if(0!==r)if(r)a.push(r[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((a,c)=>r=e[t]=[a,c]));a.push(r[2]=c);var o=d.p+d.u(t),f=new Error;d.l(o,(a=>{if(d.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var c=a&&("load"===a.type?"missing":a.type),o=a&&a.target&&a.target.src;f.message="Loading chunk "+t+" failed.\n("+c+": "+o+")",f.name="ChunkLoadError",f.type=c,f.request=o,r[1](f)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,a)=>{var r,c,o=a[0],f=a[1],n=a[2],b=0;if(o.some((t=>0!==e[t]))){for(r in f)d.o(f,r)&&(d.m[r]=f[r]);if(n)var i=n(d)}for(t&&t(a);b{"use strict";var e,t,a,r,c,o={},d={};function f(e){var t=d[e];if(void 0!==t)return t.exports;var a=d[e]={exports:{}};return o[e].call(a.exports,a,a.exports,f),a.exports}f.m=o,e=[],f.O=(t,a,r,c)=>{if(!a){var o=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](a[n])))?a.splice(n--,1):(d=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[a,r,c]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var o={};t=t||[null,a({}),a([]),a(a)];for(var d=2&r&&e;"object"==typeof d&&!~t.indexOf(d);d=a(d))Object.getOwnPropertyNames(d).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,f.d(c,o),c},f.d=(e,t)=>{for(var a in t)f.o(t,a)&&!f.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,a)=>(f.f[a](e,t),t)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",116:"cd73f118",140:"df343330",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",260:"8485318f",310:"ea47aeb2",359:"8ac5017a",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",683:"cc7922b4",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",819:"1ae33c86",864:"8dd2e619",876:"9d1be773",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"687c9a32",68:"adaaed4a",81:"7d502725",89:"1656bb5b",103:"e5273bec",116:"7a8658de",140:"3d46ca05",151:"6ca14b87",195:"5f072758",217:"b7d5aef2",260:"21403fc1",310:"ab1b245f",316:"81ede736",359:"59c90504",391:"0946f115",432:"bed1d5bd",487:"c64f1a92",514:"bc0c2ac7",535:"b6611bdf",562:"9889cb0d",583:"6217d291",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"fac2a9c7",683:"16fe356e",724:"1f48a7fd",740:"70ede3d4",776:"b6e04f19",778:"13abd663",780:"de6153af",817:"59925caf",819:"7b90ced9",864:"5528c9b9",876:"3291d69b",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},c="casvisor-website:",f.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var d,n;if(void 0!==a)for(var b=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(a))),t)return t(a)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=s.bind(null,d.onerror),d.onload=s.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/ja/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103",cd73f118:"116",df343330:"140","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217","8485318f":"260",ea47aeb2:"310","8ac5017a":"359","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646",cc7922b4:"683","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","1ae33c86":"819","8dd2e619":"864","9d1be773":"876"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,a)=>{var r=f.o(e,t)?e[t]:void 0;if(0!==r)if(r)a.push(r[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var c=new Promise(((a,c)=>r=e[t]=[a,c]));a.push(r[2]=c);var o=f.p+f.u(t),d=new Error;f.l(o,(a=>{if(f.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var c=a&&("load"===a.type?"missing":a.type),o=a&&a.target&&a.target.src;d.message="Loading chunk "+t+" failed.\n("+c+": "+o+")",d.name="ChunkLoadError",d.type=c,d.request=o,r[1](d)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,a)=>{var r,c,o=a[0],d=a[1],n=a[2],b=0;if(o.some((t=>0!==e[t]))){for(r in d)f.o(d,r)&&(f.m[r]=d[r]);if(n)var i=n(f)}for(t&&t(a);b!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/blog/atom.xml b/ja/blog/atom.xml index fa6bc19..0f6b60a 100644 --- a/ja/blog/atom.xml +++ b/ja/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/ja/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/ja/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/ja/blog/index.html b/ja/blog/index.html index 4809772..620ea2d 100644 --- a/ja/blog/index.html +++ b/ja/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/ja/blog/welcome/index.html b/ja/blog/welcome/index.html index 54f2b31..a45605f 100644 --- a/ja/blog/welcome/index.html +++ b/ja/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/ja/docs/asset/intranet/index.html b/ja/docs/asset/intranet/index.html index ad34bb5..6dfe775 100644 --- a/ja/docs/asset/intranet/index.html +++ b/ja/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/ja/docs/asset/overview/index.html b/ja/docs/asset/overview/index.html index 4752023..de5364d 100644 --- a/ja/docs/asset/overview/index.html +++ b/ja/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/docs/asset/rdp/index.html b/ja/docs/asset/rdp/index.html index bbbb7dd..763a0b2 100644 --- a/ja/docs/asset/rdp/index.html +++ b/ja/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/ja/docs/asset/vnc/index.html b/ja/docs/asset/vnc/index.html index 4df7389..54794c5 100644 --- a/ja/docs/asset/vnc/index.html +++ b/ja/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/ja/docs/basic/installation/index.html b/ja/docs/basic/installation/index.html index 9e5128a..42346c9 100644 --- a/ja/docs/basic/installation/index.html +++ b/ja/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/ja/docs/basic/try-with-docker/index.html b/ja/docs/basic/try-with-docker/index.html index 3d54873..cef3103 100644 --- a/ja/docs/basic/try-with-docker/index.html +++ b/ja/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/ja/docs/category/assets/index.html b/ja/docs/category/assets/index.html index 2bf68cb..a8c31a5 100644 --- a/ja/docs/category/assets/index.html +++ b/ja/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/docs/category/the-basics/index.html b/ja/docs/category/the-basics/index.html index bf533f3..857b80d 100644 --- a/ja/docs/category/the-basics/index.html +++ b/ja/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/docs/overview/index.html b/ja/docs/overview/index.html index 36bc304..66c458f 100644 --- a/ja/docs/overview/index.html +++ b/ja/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/help/index.html b/ja/help/index.html index b044730..ef16be5 100644 --- a/ja/help/index.html +++ b/ja/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/index.html b/ja/index.html index 462655c..0662ea6 100644 --- a/ja/index.html +++ b/ja/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/pdf/index.html b/ja/pdf/index.html index 7e3aac5..cefc039 100644 --- a/ja/pdf/index.html +++ b/ja/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ja/users/index.html b/ja/users/index.html index 4c16551..2bfc7b6 100644 --- a/ja/users/index.html +++ b/ja/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/404.html b/ko/404.html index 5cb4697..3535a0f 100644 --- a/ko/404.html +++ b/ko/404.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/assets/js/52a2ca59.f1c84fe5.js b/ko/assets/js/52a2ca59.8388094b.js similarity index 93% rename from ko/assets/js/52a2ca59.f1c84fe5.js rename to ko/assets/js/52a2ca59.8388094b.js index 88fef6a..f5cf464 100644 --- a/ko/assets/js/52a2ca59.f1c84fe5.js +++ b/ko/assets/js/52a2ca59.8388094b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[122],{2348:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/ko/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"2024\ub144 4\uc6d4 8\uc77c","tags":[{"label":"casvisor","permalink":"/ko/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[122],{2348:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/ko/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"2024\ub144 4\uc6d4 8\uc77c","tags":[{"label":"casvisor","permalink":"/ko/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/ko/assets/js/a951fea5.fc52f196.js b/ko/assets/js/a951fea5.ec2459c0.js similarity index 98% rename from ko/assets/js/a951fea5.fc52f196.js rename to ko/assets/js/a951fea5.ec2459c0.js index c6bc9d7..6648dab 100644 --- a/ko/assets/js/a951fea5.fc52f196.js +++ b/ko/assets/js/a951fea5.ec2459c0.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ko/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"2024\ub144 4\uc6d4 8\uc77c",tags:[{label:"casvisor",permalink:"/ko/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ko/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"2024\ub144 4\uc6d4 8\uc77c",tags:[{label:"casvisor",permalink:"/ko/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ko/assets/js/acf87bcd.64ba062f.js b/ko/assets/js/acf87bcd.fc3fd1af.js similarity index 98% rename from ko/assets/js/acf87bcd.64ba062f.js rename to ko/assets/js/acf87bcd.fc3fd1af.js index e795a56..76389d9 100644 --- a/ko/assets/js/acf87bcd.64ba062f.js +++ b/ko/assets/js/acf87bcd.fc3fd1af.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ko/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"2024\ub144 4\uc6d4 8\uc77c",tags:[{label:"casvisor",permalink:"/ko/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ko/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"2024\ub144 4\uc6d4 8\uc77c",tags:[{label:"casvisor",permalink:"/ko/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ko/assets/js/d4e54de2.906c93bb.js b/ko/assets/js/d4e54de2.906c93bb.js new file mode 100644 index 0000000..faa0fd6 --- /dev/null +++ b/ko/assets/js/d4e54de2.906c93bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/ko/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/ko/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/ko/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/ko/assets/js/d4e54de2.979857fa.js b/ko/assets/js/d4e54de2.979857fa.js deleted file mode 100644 index c433df3..0000000 --- a/ko/assets/js/d4e54de2.979857fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>m});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),k=o,m=p["".concat(s,".").concat(k)]||p[k]||u[k]||r;return a?n.createElement(m,i(i({ref:t},d),{},{components:a})):n.createElement(m,i({ref:t},d))}));function m(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=k;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/ko/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/ko/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/ko/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/ko/assets/js/runtime~main.922e899d.js b/ko/assets/js/runtime~main.9bd6a9c1.js similarity index 94% rename from ko/assets/js/runtime~main.922e899d.js rename to ko/assets/js/runtime~main.9bd6a9c1.js index 29d773e..b3c47e4 100644 --- a/ko/assets/js/runtime~main.922e899d.js +++ b/ko/assets/js/runtime~main.9bd6a9c1.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,t,r,c,o={},d={};function f(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return o[e].call(t.exports,t,t.exports,f),t.exports}f.m=o,e=[],f.O=(a,t,r,c)=>{if(!t){var o=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](t[n])))?t.splice(n--,1):(d=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[t,r,c]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var o={};a=a||[null,t({}),t([]),t(t)];for(var d=2&r&&e;"object"==typeof d&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,f.d(c,o),c},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((a,t)=>(f.f[t](e,a),a)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",122:"52a2ca59",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",310:"ea47aeb2",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",615:"442606ca",622:"8274c49f",646:"acf87bcd",658:"6afd1ed1",678:"94cf8a2d",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",846:"ba7e1b45",864:"8dd2e619",911:"9acd1815",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"143ba575",68:"06175a1b",81:"db3e86ac",89:"1656bb5b",103:"e5273bec",122:"f1c84fe5",151:"6b43a244",195:"5f072758",217:"b7d5aef2",310:"ba710e0d",316:"81ede736",391:"0946f115",432:"fc52f196",487:"c64f1a92",514:"bc0c2ac7",535:"24a3f332",562:"fb61ab22",583:"979857fa",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",615:"11197fd1",622:"a259d877",628:"2fe50af1",646:"64ba062f",658:"f66f077e",678:"7d809825",724:"1f48a7fd",740:"70ede3d4",776:"8cf9d808",778:"d8c8ea61",780:"de6153af",817:"59925caf",846:"26ca965b",864:"5528c9b9",911:"977cf161",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},c="casvisor-website:",f.l=(e,a,t,o)=>{if(r[e])r[e].push(a);else{var d,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(t))),a)return a(t)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=s.bind(null,d.onerror),d.onload=s.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/ko/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","52a2ca59":"122","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217",ea47aeb2:"310","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610","442606ca":"615","8274c49f":"622",acf87bcd:"646","6afd1ed1":"658","94cf8a2d":"678","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817",ba7e1b45:"846","8dd2e619":"864","9acd1815":"911"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(303|532)$/.test(a))e[a]=0;else{var c=new Promise(((t,c)=>r=e[a]=[t,c]));t.push(r[2]=c);var o=f.p+f.u(a),d=new Error;f.l(o,(t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var c=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+c+": "+o+")",d.name="ChunkLoadError",d.type=c,d.request=o,r[1](d)}}),"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,c,o=t[0],d=t[1],n=t[2],b=0;if(o.some((a=>0!==e[a]))){for(r in d)f.o(d,r)&&(f.m[r]=d[r]);if(n)var i=n(f)}for(a&&a(t);b{"use strict";var e,a,t,r,c,o={},d={};function f(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return o[e].call(t.exports,t,t.exports,f),t.exports}f.m=o,e=[],f.O=(a,t,r,c)=>{if(!t){var o=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](t[n])))?t.splice(n--,1):(d=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[t,r,c]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var o={};a=a||[null,t({}),t([]),t(t)];for(var d=2&r&&e;"object"==typeof d&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,f.d(c,o),c},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((a,t)=>(f.f[t](e,a),a)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",122:"52a2ca59",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",310:"ea47aeb2",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",615:"442606ca",622:"8274c49f",646:"acf87bcd",658:"6afd1ed1",678:"94cf8a2d",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",846:"ba7e1b45",864:"8dd2e619",911:"9acd1815",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"143ba575",68:"06175a1b",81:"db3e86ac",89:"1656bb5b",103:"e5273bec",122:"8388094b",151:"6b43a244",195:"5f072758",217:"b7d5aef2",310:"ba710e0d",316:"81ede736",391:"0946f115",432:"ec2459c0",487:"c64f1a92",514:"bc0c2ac7",535:"24a3f332",562:"fb61ab22",583:"906c93bb",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",615:"11197fd1",622:"a259d877",628:"2fe50af1",646:"fc3fd1af",658:"f66f077e",678:"7d809825",724:"1f48a7fd",740:"70ede3d4",776:"8cf9d808",778:"d8c8ea61",780:"de6153af",817:"59925caf",846:"26ca965b",864:"5528c9b9",911:"977cf161",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},c="casvisor-website:",f.l=(e,a,t,o)=>{if(r[e])r[e].push(a);else{var d,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(t))),a)return a(t)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=s.bind(null,d.onerror),d.onload=s.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/ko/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","52a2ca59":"122","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217",ea47aeb2:"310","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610","442606ca":"615","8274c49f":"622",acf87bcd:"646","6afd1ed1":"658","94cf8a2d":"678","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817",ba7e1b45:"846","8dd2e619":"864","9acd1815":"911"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(303|532)$/.test(a))e[a]=0;else{var c=new Promise(((t,c)=>r=e[a]=[t,c]));t.push(r[2]=c);var o=f.p+f.u(a),d=new Error;f.l(o,(t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var c=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+c+": "+o+")",d.name="ChunkLoadError",d.type=c,d.request=o,r[1](d)}}),"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,c,o=t[0],d=t[1],n=t[2],b=0;if(o.some((a=>0!==e[a]))){for(r in d)f.o(d,r)&&(f.m[r]=d[r]);if(n)var i=n(f)}for(a&&a(t);b!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/blog/atom.xml b/ko/blog/atom.xml index 9918f26..2110f3a 100644 --- a/ko/blog/atom.xml +++ b/ko/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/ko/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/ko/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/ko/blog/index.html b/ko/blog/index.html index 68153c2..d57cd6e 100644 --- a/ko/blog/index.html +++ b/ko/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/ko/blog/welcome/index.html b/ko/blog/welcome/index.html index 2eb3278..948184e 100644 --- a/ko/blog/welcome/index.html +++ b/ko/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/ko/docs/asset/intranet/index.html b/ko/docs/asset/intranet/index.html index 973ace7..cd3112f 100644 --- a/ko/docs/asset/intranet/index.html +++ b/ko/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/ko/docs/asset/overview/index.html b/ko/docs/asset/overview/index.html index 1facd24..3cde3f7 100644 --- a/ko/docs/asset/overview/index.html +++ b/ko/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/docs/asset/rdp/index.html b/ko/docs/asset/rdp/index.html index 4ad3d41..204f457 100644 --- a/ko/docs/asset/rdp/index.html +++ b/ko/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/ko/docs/asset/vnc/index.html b/ko/docs/asset/vnc/index.html index 06bc4ee..2eb7480 100644 --- a/ko/docs/asset/vnc/index.html +++ b/ko/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/ko/docs/basic/installation/index.html b/ko/docs/basic/installation/index.html index f60684d..353cf4c 100644 --- a/ko/docs/basic/installation/index.html +++ b/ko/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/ko/docs/basic/try-with-docker/index.html b/ko/docs/basic/try-with-docker/index.html index 350ef1d..9adc75e 100644 --- a/ko/docs/basic/try-with-docker/index.html +++ b/ko/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/ko/docs/category/assets/index.html b/ko/docs/category/assets/index.html index c7aa2c0..479bcb6 100644 --- a/ko/docs/category/assets/index.html +++ b/ko/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/docs/category/the-basics/index.html b/ko/docs/category/the-basics/index.html index 56743f1..8f54acd 100644 --- a/ko/docs/category/the-basics/index.html +++ b/ko/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/docs/overview/index.html b/ko/docs/overview/index.html index 7390fb4..21c1d03 100644 --- a/ko/docs/overview/index.html +++ b/ko/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/help/index.html b/ko/help/index.html index fa00caa..d377ff2 100644 --- a/ko/help/index.html +++ b/ko/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/index.html b/ko/index.html index efa589d..ccd60a6 100644 --- a/ko/index.html +++ b/ko/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/pdf/index.html b/ko/pdf/index.html index 80e243e..ea7d0f2 100644 --- a/ko/pdf/index.html +++ b/ko/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ko/users/index.html b/ko/users/index.html index b780273..9ba971b 100644 --- a/ko/users/index.html +++ b/ko/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/pdf/Casvisor_Docs.pdf b/pdf/Casvisor_Docs.pdf index b19851a0783848eda38cd09187afd01fbf9cd3db..49574077b151d670e89af6e3141a6bc135d11985 100644 GIT binary patch delta 46000 zcmafb2Rv2(|G#tXnZ2`TGVZqbj;!nv*;$bh;YNj!aI0g4B+{_c4GmIB$|ze&A!Q^= zR`Ngh8tGe~-@nJhXgP22*#g`_+KrPbBx zJOe#~4jrbWL!$6PG<)%txionBJ~~FUBAvXxZ^+S5Arx96a?` zsr7vfnWPRoJl^Wrjh+$IBnz7&Tb?27CB2_l8|(4|$=gLcs49T*2hou~swO{*M=$<* z;6HnF{(ZJ$gWO>CmrmyNBcknc&poMeS-+^-W7lRPetyU>TfU~)u;*b|>5=tMJu)KG z3nBL5U)?RZ2;;k-57O6;YU8?uL{J{u8s}eIJBFS6T3&a$@1}i^^}>u%rYXX&wJ#v@ zTy)^@P~&5Uk5@h=cRZ>7`EYW|Wn41dY3`fOT9f2cdJd}_92ah)$qwu8VAas!TQ`;&9(dR+2j4_t+VAHEc=f!zkX93l1HjGcYN6*(LdW ze*YZ0Ev_nBAy_tQmxitUh&R7jL&cJ>fZIhhrX%OUhjQ@h(Np&_{o&u~m-^Llk92xs zP7mbVop}8*u!}z~SVw^m<}1t)Dg1M8uGwt%M+kYYBL|J<_q^47XUy=WgtP%4 z<7-RlW^?zKPSQ?kVgyBf;&?m5_uUytS8Gnn3I8TLb^kcLY>LN=^FYL1WGZ4-NrDFn z;}an-b9?{HXI-t_UhNk!trh+4E$(G!dy7P-rlYZ|>=R_anWJ{{@-^?(uPQGbUHXn) zoO`67=bL4$LW$+TR6Qyw-7hZ*;#>7lTwD_q;UUtJmWQQ_pZI;Xj7qejRw%odPR_jXe4_1wjC_}vA7Xt^}1$UbZ zElYazRYuP$??>Igk5y~AcD?X(EE|WlsAKrk?oZB9brz!j)}Lnk0`EZIToOGz7T_CG zTE)*eixL=)OTf-b-3~I)Y0j~{d4J5zxlspUo|qYtbq+_+y%>pL(l=!;95PLJbwGIM7U6{*?PqEL16Y<~{n@l4^s z({}>-)I64tNG%LO7`2ay#EOgL)dA7$kjMx!lpa+#uo* zuZGI#P=WBJ;-=S0F5%V@0T%94>Y*(xUHY#kb;(s2`3ujdC^20!!;Bm;KQ~(Ws&H@X zV}NZqFicR*y7Y{PEaDObD(zhmtHo0Xzu(^X2H)k$ zh8JR_BgdeW@B-A62q7eb=(L>aE9Q2(6*fa*H(I_cFdswQg zwj3>9I}?$9zxk@f%fh z_BWc_IPB!~SR)2gD3OStd%63yV?~$|CtoOQhY!^K!eOq-1a-iDhk9>LKJux*=xsJM zU+5j2t{fAc7sqR!W&|@zEMNDjB&=8>^l$Qh$~j-8Huxw{ z!B9>6egE0)BPZ2H4BI(ACS45gJjr?2?!b*JgQJWxj?OpWs=`**)eGIq9|%A5J-&wQ z`YPb7$d@Z6K>N#he!XrXp&z`VQqw#^w``Hoq?MQ3-jC%L$>@PZf?Y;oipiPnKCaxhjH91aH81CljQ#2&$55Yx{{Is!_6ZwD6A!Z?_P;BYu`4?1}x=nyzj z672EmQc_!opg?m;7(Evp{qJNVQd>^%o4FMe1SYL~XVe$8Md2m&Md~k+@#p85opUsm+p5PBqP`)bDlpy4#GEAhn3LbvP z6A^OqL5z5xPyOv@%oM$s3$7SWl1sPIb=&c2>SWMNA9Bxbw72b!U-{roRna5Q>`d!T z-J6M-$}y~r&x!2KTy~t%TfP!vVY^URcOQKaC%~4~5PT`b-R62n<;OcXJwfXxt45(h zN=c@oFhG^w*zc{5ySnK&_Z&Cpf-51vLI%fDv)6 z@LTY*>x&=V3vb;9C8yJzAMR6p>G(}?Vf>I^LU8NbSdG-7#g5>H=>CVRcD)*3_0;J0 zQFtcq?T&XiS0+h$;e^XLdJdO(PbHwTfT?8mqF^)PB`$ScD@uP4{dxZS=XPF+cVuO4 z_!L|yi*Bd7JU%I^EqGY8ZAm))Jnp*GcbjyH4(V(i!Wb&|+U-b|+Z2zEB}km}T!OK3 zEIcnfZ81K(KjoWY-@@+4Hbt7s$=rv`nSVSBVpyhkvJ3q|Wctz25KlM!peH>HiN?F? zbFg7Hh2poZhJ%H+)Y^F0ETbAWgJ6JbOG=SwcFN*Bs!k$uM>SU?>Ir z+&&J-V7r>iLf^RkV|OLu?w1+is4by}LuyjxAc)V<} zpm2CAP=;gv0R=Gl_q-zbBcbvz47{c=GzvyfbTu0$5Q9&P;KVy-7;ITiPRtf%b}$nI z-AdIQ2E9JfjB*@#Au~!k9{Pr4MllNi zU@aFMvt|ExzM>MI#mf{QgcF5$%u};FW)R@oA`uGx8)3mQSp1z6ZqUMi@E4=FllHtY ztOAMnjtR63JC4GV=-Fu~gHJoPAyJlbPhebIM8zoW&@l`Ke>6cB;x-C@?$kd{#KN~E zY6`EF!1r5IF^Jzx#iIT;7+6UAio|g<_WOd~=(9ffX3N|pa0n=@zxmEiSo8bik9R6L zkJE4_ATN4Si?&|$^f)WD9`kULt3iq19{xj$L5wM-$GYdBTJF(fbCzj+1qtU)vf){@ zQ*Ay=Q?M3=hp?J-(b>vBUA@_4Az~lheadjW_ zxP1x0=$l@QOzyeRN#^9s*m%Ll?MAh?G5j)MXN08$UK3=`iau}SaTV_o%f2~iE{$xw zfFgG?@@%&LZt`s9p}~@)X^F8Ngzlu(s1D!F8oCwe{;scXt%quxG|Lz zbwy(zht5wcx~~Sb_X`JP>vqc`rPIBdPAjNfN$1sgakcvF-ebd`SW{_+uNdig}*f*$yC!xykHLm)y#CVrs`_C&Q|zB`=&*P|Vs)PJ9=`G` z-rBwIY|h3XI*8_eZ5Zel(XeKzR(nug<>U3Vfg$;m&yHQtKKD5M60IrW{H?aDQI>|C zUX(&oVVZ;Y%Ez3=QF?W+a;`Y}*50-u9@)u0K9ZSVB0-*e0G~X4IizO~75gJ6TrQnw zdCO_bI}TTSS8pv%IcK))=|Z)}hY8NCRP0ae_|iYYq`N#Pe&oE!F*2#*n&?92;9Dof zbftn8jxBpBs)9u?zPAyYGsKid6^#Vi3dU$Z3%0bq6H5O+ZGFqZTZfu{zj+I_Tx7l3 zv!7q5GZ`zWuI#6p2>Vd28yf%cb+Iyz|LZ+M1MAt#Y|$!dPSLtm<*)Zm%$>=*ZL`ns zT;Z7H;j{5?X&yT~nyS=#WTNjo;J7by{~Ya#oqLX?j!Qn|vfsLMU0bo^3A=*ADT`0Z zS}+q;iH`*5wwdWndv9TnNU>a)l*#h}^VI_aqK67zi5OZW=d#DRXA73_+RNmgh;vD)ZBG=R(3eVX zQ%KqKdFbQUHWs=i9)~s_ESHnB^yMm?`=zfq(OCXi&D}@Fo{D}iSWg8tnv1=P&BmEd zCCe4O$*KO3u9EwKwJ3)0W@0>l==e9X#KwD7KcALImaN?i@JOn;ujkvhKmUDm8G1oq z{lS$Z3zt&kR0HlFV-498>XeBUeyvWc$M?nM6Y>oPul8)0V7=^(B;~S5+v8^q`*?7b zY=$B8{BNdf+`mjNeTh8W+8g;I?D^!lz`WJtO7pyk*w&{JZOQdOthcx=04t^~M+b{6#gR*K9 zGC!(A^ZB%rkRap16_BxV$+c4?SzjU+mq_LQ^Uyu_++#=fJ<#W=UJErOOLrSB+@BwA z^|H^)uCze4q%)`WL90jJw|yqhe^j{$vP{HP%hVAXq%<_)tTFWfTz3!atN9V5YsY&l zsu!C1q`y<%uTXemw0hgF{o8}+ke*K{?Das|J#Js$)iQMMG{$1^=n3{%Z<(9>CS>2c)>}nb9zLo&l=}UV-X+!n zJp*`a6G8b*QLyXap0LtO=jj;E@t4r0SgLm4RWqES`{X88OErpbcU|2-(($nE=jnHz zud*}P$&*-l`}iKFcGJ-A<4ioD#?Sr%|`|H!*xHPz^23z4SJ_o(i9TJ2!C zyqfd=8RwB_Y6%5z-VVD292?EE;kR{{aWA4|+E*D@YaHvAc6Zhz7JT{Zi*$I=bE(9x z2l&nbXZ~|F)R`vYX&Sck8Tpy#I)Y>!ub;cGTN{1P%XsV}s6@a7DJQy(=pFdJ_u;{{ zLF)51)fr#PCa>b-w3Or@-g^*ql0{T%*HFE86mIqN`-SiZR?fMJ+;yOOejcoP1F$ne z!S^Q0K)@A{`1Rx@E)+%%1K~R%G!iAJ0R0ofVBvBIG`><*8$Xglk9$6uc=akr+ zIm2Km+)C*4T3qK9Lq{eUyE9i!`a)~8Siz?=ojg;Vg?%QguS5bXI^qsdr@{kYFc{8% zRjgsEiWrs>7s{k5r=9=BDSk?I7#>1@e)aTQ@(UDkrRHG5A;J>2fOjvF~z?tZ3twrE8} z^6_Yet4WiSx@nY{YrOKxu~Xd(#g{^3PTh%bh&z0oK9c&Ah}I97&eW+p-YUD(xvCsT z{G!NtEOqNR8Qb)#tR43b^X-vHFVg3Q`&xaEK`2Z9MB}%%XQwOXSAUK>4(6|?wn~q4^Bknwi|7y+A7rNQ zPIW(GsCs>cGJXGi%c$}bhtC67*AF?V0q8u()~LE{gHKZ&Z<>pf-sa_p3#tDA_MQ^9 z&OJCe`m0pF&$%M@KHwhUPe;sg;YZHWLy4v7v(8(A0^TJp6x>G+(6J+ta!3>wD};t) zpn@D$P6_$|y2S#TIITcuVFta4TOZDf_E7qhyJ)poQ#&`><}&@NI3K!hN#;I$QtC!` z@CD#K8P{sayG5Zh^Y67n#xU$=EmJk3w3@@KC%J{q+gnDTb60z)8Zu{1(SBff6`moM zRPUXhJIag+uV5(beknPc-Y7rGg*fcv@U&8@;UEvW5pB!$G#Xs#q|M2UTopfbc!amX z)An-HHSOe{g|@Zm5CJ;;0j_<UMdPLm9zpQHS zu5!>;=AllwTYB)>6S%uAv?86k2X1WulfUVHa&H=ANt*BGzP(HLLyfA6U#0aK-+k*g zI<;$YtrfRcZgG}nh+5G7%Si)Yi8KYbpSt=Ljj%bBiF(|7$**Cq_ zyi>P3lKL3lbtwI?h6%>(&Y+va<3PEYKEBeYk;W~Z$))`_^i(wXwAqqe%!p!g>6 zk9X6Zjim$Z20D)GwFwsAzMsDs*<-c4q2I>Z$-Bm1*fH-(C$%fazwaUWw_m(Ui?zRE ze$C7Bci^Hzm^+@mDAalUBZESHlERp#JHA;!c#4Y|-744;mc()1=N0bUR3rcwdv!NZ z{@ami^`^H0dZ-97lzGf~rfI|YblHb{*VgPVPP8{13~G5As6vzy2F0x)2&II?>t*~F z7D7f0FB~!>a5Pa+w(JQUttf|u{z8%#e9$o(+@ZtdZiW`;AG2L$vK%AR|G?e=OurGV z)aMV0<)n)5ZsK%^VHIqZ{37Bb8=%#B(bHM^;`od>?H+brCqwQ74vt?8YzhyJ>LqD< z=%$DIOvx6)2EO=@DH-+BH;B8%yWAEKsUyqpiKy;TxE&vi4OgkAOU=9J9K+vr;2iHI zhB91f&p>B#nh2tvX(2DPV#;=9`8;zy`);`(4z^~;JJw(Rlti9BLgBy5-XD-SjqvixhKER3S-ac3M-u* zQ;n^#vYat2EPMZ0=wfp(LGbgc)ry)v+S>((`>I5!6Pi-KQ8B7J`BNs#s#3N9Q!mM# zKQ_>!mN8gta%b2|<7Dp1kH>dKl7(b2KQu4A$^On(Bd;?5alY04l8E%U%5Kls&;9#v zdY(I%&`*hQxXK2GKk3K&EfGF-Hrdq31Ts3W2%`PbiPy$&3r3ZUo>}XD9Kgl6?8|PY z?nBm9c@0OFflGB-QC2T_7+o|z-f@ZlV~oe4?DT!)5}BuuFiYQNN@Fm~G4;M<^y`=t zwyHhHc}4yyn)N)Lp1+g4{86*0*m%c!_Nw}#+wt#<_KygUR$N*BncTj}rluCru(AL# zHb9anEigqi2+#s-`0M8nY+Du93x=SZ`9HI-_<{?f)CNWAEsalMWqMGEYC78ERE;qNiA$@%M=L+wRT6#O`kGL|>zoDC-H z%_uQ_Yql$ey(}2(sm^r|+u@S6=q2)8{8W!<2faSi*bR9K?CT3#Llp#-l~rEv4V;La6l@JE7K}(7r{HsBYN*1s zzp1G&+&^1cb)D(mlNcLn;9%_<`Ny$x0X$0)2mMyE5rt90H(nIP3uY0MU1I-{0##D@ zBdLOC&Y{I$JHd$e%caFjs zfBWmH_=x7}+r2b5s;sSR1{#2KS!+QrxY{`01l47&+jiOo=HsT{$77hEdP@Cef0%;Ke&QPP4?R8LaBZa5YugU-{()-V0yv4lPd{PF-zeVAnLUUZaGCxMV_(gwS6wPMDZRg*as+q6O&%EWO|^ z8HeHFU*xi~Wx``s?}tT?ovjIcd}z)sb)3%Y4!`?cz}|v8tIfz4la=q(Wgp()yZN?l zd1klQkMP)mvZoKneq5Vc18N!`7W^pak|kUl8r?-9(DypLj(cii@$)qZZeUv!_3h1%&rB*BIzFnFc?jf)5}MqBB^d6<+c)1|M|?eQQt&cB zK1USke8=6teX#)2pwZaD)GBqCm`_Qn_PR(x|o(9 zTob?i1veRl=PqK}E@{CP5Ia(jVACraHvF3cvrRhg{X6@sv{5gB(Hz9jP5RcH82b!R z9AmVzBJl{{R!Ap;f$vCIld86VmJ$#Of0h!wE_(uae= z$*U>Nq4yJ)zld~np#5@z!}R-)<;ag`TXLHjhhEEndo30cm*n65$(W@&r{6-aThy!i z+(DB}AlW`IK5$n4@>uD4AG|WtRkCFKbEB^DI5^CJE&53HqxQzkHo7<-dSkQO^0;(3 z;PcYX++ffB-uS9-dfjr9bPLZNLbB3}vaRwi*JQV4U#=T5iUOW~JNNPCa;Rr)W6yxD z10@F-<>&SKwa?4@1N?zk?|2+tY7Ad=RX>y=bJ;b*i1qNZXP@R!M-Q&fSH#pcAWW$> zvW*imUP$)}6)zqg%#>0pC>s3I>;JwbId<(GzAsiCeecWR4@XU%E}su`)noCU8+w2DK1%JK!LarmgES zHbTC0L7k<2s1j@a>e+{yPHV4~b5e9I=;c1^awn289c`Mq@NA0ilxL##ZHw=g@g9MW zktxrf)m_NLs4tb--l|j{TgF7`w}?u3h9zC}o!U40U0Hu!MPK9ruhiYo=ydrW0}l=V zGhLC-RZ}zUo~m`ar4C;bn4Wm|uALCnl0PE-ZLOwn_lo!IF5z7k!Fa739NVQ5)Q<8j zqXeMNi6B+mEqD5Q=uhC{6d)j?q#&n+z(Bqpj@|V2a42%cK*d)K68@*J zXOhM!D8S{RF2fz50im!}GT0&Lqze1*(i~Br7@-h(^QsWEz^~sDfUc!=$`l-71pdSJ zLR%BvV4)1D1W#1iKQs*f4-JEFY8XRJc+op5#_g&+91ES9MzA0j$N#&dLmDcl6Y03~ zdhovsCkVJwMz9RN{iZn1%1bH$&WB&{`arv&`(s4ACX>?ma@NwU?3KBzXA<+8qw~V& z=U1{AuErYyQ%U^KI5T(=ZC4y-t)$#y`b%vE9tTPm3>#2~XfUYL*w-s-TKkx|12y`7 zWmL~mmKpF$kpsGuLSuOayjZOZ`o*aBb8YZwW3}7O_RrLQ`t%k0FX+4>TXq^wscq`< zqZy4B^&FkzaaU=e^?TQbr*FkPpBl1zXm|C|mBM>Tz1$0v76bgXT@+Ut=JnJtUtWgA z{`7kFLtYZw7W-LSCGpt)w0%QpTx{dli*Od4=PlWf{v6D?^xi);)&(t|+z5vRn|%*_ zi`xkF?~)AyvBlaQG5`X*VUjhvWomQ~>o+-%fUqN8zQ+PUfEKc_|7jQ4?BC$W>)o~4 z!l`N;2m}eI?qms6ul?ACCba~})$!oe{F)V*6C&1<`G%UVy>1z>q&*!f6B;rk?UA%w z$HY>)-?(u7L8jHG{xaQWwKvrA9YSS(LWQ+d?nnk7PlPOY1(N5k#UZO76td?}%FOJl zJ0fEvv-~4WK(kyY$>>@5CpP~}j}p!_MrntaQ+YD19EiIlxil_R0aqh5G$2J0t;#heud$MkefFEG?i9L;S0`hFGq~B1kp(&6*|x zMbu}~2c!@JwWCi2f!t}`pzeb>9dFPq9?;&F5@`gIi0uAQ+<%nn5h(PA;&S88shJU_ zX7Oh-pIefKd&~7bSF45L99er#Ikg1bQVzeMn7lF@JXpwPa-{kGqT9o$v^hG%CPhk# z8imVYc^AmJs{3V+!W`{5vEwPRoKxu7hnHkWOlja8$NWs=onH&-agaB0uv#j(-qJSC z;5{{xG&Wh&*b(eAL#C3Mckvf4VDQ?_o}2X7U_m2a0y0yCACmp7ijlrZvCG+bg5#+= z?@WVY2}b~p@Y0-g%Pza~#=2r`=GJu5`n;~mLc`tY1DT>Ob1Ol2pEC5?lQCotCMC_0#)K>9+hd82$U|6$;dB6(BKx#$Us->Tp5`@~7h$vj) z-v}Im!qo7;0RS1)mL*0Yez%h#P+JCR$6@FVI9HjA1a0|&je2v}+j`2qr1l7sBSE2l zHv?`+-v2;CG|4$ZkIVmsIH5C%eu=Nfb*zw_lhkEFd{}8G4M?pN;3N#d)VO|X02t6) zEdods0?#tZ1{x^=^e{9rkTdzeT;N9gL?JhND{}e61)|ZQG!-CA>Tq~EwZaLm(*U&0 zXhqELrZ5Bs2^Q`G3^q&w21S50_%Mtcv&FeTaL0~j1jrVEOUwWVIKT#=HXp_kdl?8< zsQ^b9=+6Prf;6-MBMj;e*y><_zzXPv01RMgQhy%Lrbch{=WS@WKBU|jB~rTz7J((& zkS+bkZnmo!7(q+0n~xHER}fpR55xus=sy3_e++5;PA`GoqWBKMz@i}i2UBtYF5D9< z)0^E2>~9xs-xSN`%$A%{JtY}PVOtdc;JvVKPWD9*Q*65X&cHeTj%!I^9iry9-q0}U(lDagzCgBhtatI8cvvAF+|^# z(XUs1+!r+WQ@>gv;Yi@PX*GL-kCpAZ=KSZ-L3V6;uzE@D{ZGTuoeGu(`rT>?b(e6> zRR`yzOS;A@Jtpt%g1_iLUq|nmyWicUT=q5Kw;qqX+FZDJKgCnyuDjhAo{z>X5**YP z?x<=@?i*sSeDr9u0}jrnvviA0ILq0F{{ksWkFR}> z=5>I9l<^{JDiTs)S0O+UY83kas2`TpSyV_5Wneejf8YqPQU(x&VTrvn#1sq@!HEU1 zgh77*E7<^c01Ij<0c>E04Ajrrd6<#70#r=~{_a{rU=_jGw*Vh_F&X#_rpp0zOo*KU zB-B>}Z3Hz05j&Bf&Y5jfMiAlz9#Fy*5#R_PzyUSffGqNW0dyD-amhc-l_IHOX2V=D zC~m0*WUfF(RX_krDH7Xa2*pCcIvtPVmR&$#m3Bn4P(n&uY0HQx!AW*NaW7yG1NW)| zv`i?a9R^1UZ=OMd0N@-Kj2*%+D(ZmjCW3&vxrrtuRUUAHft4lzEjiSW3d*Yke>7Bq zJm!D_p!i=&%{>UE9lcNpQUf?C_JK?Vse_#K0WuZPTkmXhQ)5FY61~MAFagw>hmti= zZ};KG$nlL#CH4eC_Z&$!!iShCQwS^>1B%3{KuNtiTVt}{U$#SD2TiUoe= zcU+q&h?dZG^^B(;)idt&l;&+*xol&V=SKVb$+-lhzQgL*5-SQR9lpmrPrev{cjFMH z+RbpDU!h<6wIV~@KB=>MQ?-sV_4`-*!gtAB6vJKowpQ5QQrb|yZhrfORX79%_fdC_ z&fA#sIr)bOcSECFVmDWnVx3A4)_>W>P8Uj>>bOI!`s z`G6Wh37;<>=9M)q!C2Sg%#@i_f*(^4Rg9l&xxg-DCyp}A(;=_6@PFt7sMygd#a6wf z(kSPGy-8qZYu-ITaa`I@ZZd??(|Z0wFU(l>SdSFtxN)%X>6JrEtce$?`X_XRs$&b7 zKHr(rdwCk!Ec*r=8awoC_lbfA+dGQKK3UeMnkDUCrpFFDUuz7Qt~wh&DSdVJVrH;_ zUtw>2#P!8<9Rt5Kc=X-w-2tJR2 zP!}XK+W5{PdhqVS4FF3Jbp-e+U*e_+U_6cjOSj&Oz$2{}cHl5hR}p?(roZ%tH`$2hu2INnto~B^;%&Q^>b) z>2IftgyM6eTZK0G*9&d*>OyJSUoh~iKfuR;*z&E4N+|HuNkEAJbzzG!f(54mI&vgb zYobboNIr9BQ;8slqD~HQ5@?PCx-jrW3P8IHwWFOF>enVJ5yO_U6O&b7Y6`Riu}gbH z4WST{=!FbofrC&~yrtsk9g`?XXvq#x3wdE;1`dh%ul8Ilk`!ETLRsWiz)FO&NF>SU z5ZiO1;iru_b)#1oiTqnTH8@By{vWwIsQLy@!~@qjwnOe6#6}V06vEe&Kn2wO4s~#! zhPX;P@qf6A+BCiPEL)V>YPd(@yCwxl-S#q2aI$IdpxKP=TsD#vjQ`JmUY(_Kx5Ni6-R|H%&BpGlfBt2=t~z5DT+NQu{ecaL~{P zqC{wdMcIJ$c5;IQi6)u!9l;IcXu!A{2xgX50U{ud9uUUmr8UsO;LLif(NCha1dw>H zq|0^=*H72?mpUd@CYPVa1!dOuYabavc_W-YI#n~>7V7`f}CfWDfde8OLGk0*6vn<2(U7@2f{6UEc;=TJTh)K|fS$ zUm)L;CpW%svl8atc743Kj;^+};4^EuT6Z|X?BuodE3ZEb$|8*)J?PDp*Q4_DJ#~@U zlOaYn*F2e_cZJ2FTWt4YEw_#|!j4bhhkW0wn45D|-?J&|i3XSh(s-6r z%xqw64d4k1Tn0o)R#)Q^;7Ja~5+JTYLGqb0h*j4KfEjUtEQxlKcY(cxfLj0y0AN5| z8Duo0>i{{hGZ#2QP`?6rkb|9d5K7sRNP~DmA}iFj!{Vg{?kWM4{|f$*7%ai!79jh( zRUQgYf2#_F#^-vV`n=XDZQ}Ftq*qlb1)RybN%1XF4HQworyr1LCDH?6RtvyOd^g*F zXF-ry1>&)L0Z_IBLe0>bpkF7TM0^4b{)D7}bP&88uz(KQvdN0b-&q+XT9I@R$r{{}=@A|TpLgkDRaSq;F;upLt&pg#Yuet;8P?E%yvpTk7lVdHkYZ$qjFgIwbY z0u=wCHiTfzYz+fi!x??G_t^5()t-cR+fp2>(NGp(%>L2M9OD zV#tw-NYZ;iRd-^X^q>U@qJ}~GFW&))l+FN@?NB6*iT*kK2I({@Arw@qi_?(+^F9G$TXvj8JqAz$x+#>eV<4!1295$C|1v2J2%cL2%%NR3=Z#7G zuqZXialxL_8bhy?5(V#y7jlz=(@WgZwo z7915DctHe48eAjP)4>L5L1%FoEd>Iq`hfn@#QTFy>@af}G%`!Xu~Hl`Xh?S(M(-Ri zLqSWnLds|2u+4$?|IrbMYdlPw_=Ln8#GeJ^jXUBIldLcZm2D1PqM!**6#^$O%nRV& zE=xi9aoc>O5Rk{%10#-M64(C6v?mH;DJk5Cracq6wg-)O!cXW-7FJp|uyKx@ND?jr zayJZ1$wQhXCUF*m<-bpb;sxkbHt>lRH8hjSPmY3+JTwGNSQjA@>7QVqxa6;pVSO*m z^1lWxx%s!yz7eD?P!jTY#EpW^-v`WOH0D)cx_6gwH#_uTXj-(BO zoAXu_@*Ma9;RjDRwZOgH{L1Si)3EwoP-Me0SoM9E>m}M_&4fcRL1v!_g2< z-R2B5b`PtvR8DdxL^KQI(zBmZ2`!C9%QHesFw9pS7^g|E*FhE&p#%vtujAf=}gwI8z79*TQrPO4Ah7fs?5rm3kTkwzQf1_6*|LdT_yc?{nW|9D7vKUqV zf{@UTgy&g|(URaw3^Sdmf&%t8qK5qBCiwUrC8ID~6+ua`r<#d0xl5!J4;6v4h0$V4 zc6$aGqp-8OxZ%EtTD5a82nJ~V?>5*vCKFpGsE=kNT?lOgfszOjm;m(uRgf4R&nyJa zGw&kFJVBmiSB@_esb)po94d%G%*3ryL#sg&I~9*_t_(ZAOX3m?s^R5vF>^rxBOJ@D zNSNVbjt3+$M34pf*#kk=fxhlR9-cxdQdMtfVhw zGB2|(3@YD&o&3z~FesuJi({50uqpBeTwaCeudn}_U8cZI3?J=K zn`(GCtHgSOjEpjiock*u;fLAJyY*|dmh((x<_*ECw`<{EYbjzlfb0MU1-}GaRb#mZ!3tz_NP?@;|3M?P!J$&>k9iDCB_p`73UJ#5}&@Z^}OG7UHhIQYG z0}{4U)`#~O^?YW8>s$F>Qc@T0I#eq@fZr`mc2)WHD`%c;`!D|K9X=Q8)AJ*~seb{ym@b+mrhdADA=|EI>eb=B^2%AK11*4Oh+i-jBq?os8#B%2(?B7{~Z75d2q$R{eU$1>ex%%>upux(l!>BV)< z*uUxs6poPmw6@wa!sg09O>r(W7#Ae5b|2Q;Oqrx5m_>z+LwZaL9nFapeM1(ztAIR6 zQ~EAY-|6hZ6tR}a6hv)y;^o*1Yu&IJeWzg4Oerk2u%&X>3p~dUVdJi#^eWqv25wk8 zGe!SXFJS3!O8i!gn{GA=A0cmj>9m&cHc?eGcG(Is8hIr3g$IQ{`P<9lD=RpqQ>_a& z{=zqxsg7AlsZ_tQ`7V~PSs~K;>i!63zR&O%RU_Fw+Dl|+r?98bom?&4wbFQKsiTo5 zyh^>Bh8W}mk9p{4KQcY}Sp zOka?iHL76yGwpjAQ|)y8=>U4)urP9M>D#R^N!8L{{B_PK zJYb1(@T7W1pUE}3iX->)(w7=ZzWkt8^l@K0!#lwz8MC2xa&Lc{6_w(> z&eF*hG9;-Tb-ag8{qyZ;Q9tEV5?x-xF<~^{15)qM)y1GgJ#GdSR!ATy2f_PwqkF$P zJvgG=aX5BZ2W8{USjKN<`f1M-LML2-z507LHO)0fdzBY=nBN&Ozww>rp1yhtr!RCq zJdVMeO`oA~vNvr7{bS{0dD@jvx+3yE5vk1)&e$JJN3Zf}hX|k1IW(i`^~PvV$koP4 zNuJ}@Jaq|=nP`ppfxG6$MzuFy3<57*>oD2+QZFa@Zk_2Z>gWr7ZW(feY44)Mm2+1M zCQl6X`ldu9kj#+*XPHbK45iG;+bVFCCkg8+eMiEySWV%r;$V%Y z3c)~y!sBC@u%=O#{HrX=FV}whFD|l4Nbt*k{r1Q=|JuEKXR2r7?+3azJt!$M!Ihed zJv;l+IdrdVY2reebvBP~mUZ5p=H{2zB99$2wQaFa%W_V1RLR$2wqCRj%ik|CtK9AY zjGVUA-RCPDQ~8Q|(271Xoo3;scO==zQ-oA=A=MyN@;Gw|d%2UYqde@=qZiwlrQJn5 z@0sgsQ0yx)rFg0vyLyY9U86w-EBhT6X30wprw|zvOt^eMUbDp|m{%l2M670)&FQfp zdmO$Lj}IHxC0$IR^=#zM%C7Q@`!=9~^rV~I-JRY>Hl&}b2Y;r_7}qeZ1ZTs+7jGx6 z*$*7$&e*GX))&4nrGPDk^}*ibOs_)DJuM0DN8RD|V3ce={wTNqPDeqx+i>xkHjX^- z@jEe2-WlwLzR?Ee%;edS6d`6UmVF15V2x9AcaIh}T${LZr#}WR$v0S)C=uOeF>$)` zeeZ4hyDT%#^|Uj^N1t4toM*2|jA3KP+hd#TeiisVcWmn#Ijm?yPu(_B%GZ8X(9mG$ zHB(99j1e`y^D7R3Vy!hU8+){7YDVAqT{2KB;`BUw*89u;!3cyI)ycQHT@>rjpYKX*E8wm$R=F2Mdf{iu2}= z-EYm#zTV0-oWpzMtAl&vdqd71zY;OcCh22(=3UoZKhInhxqA1iD+gWc74GCGw;tof z$gUXZyuy4rRNgllUWdA>Yc>7D>4msBh3=4CCZRkA5MFf+4?^1 z`Ix-U{)1*(GYJS}6iP+W!LqKdi!!3GV}Y|~mztRRYM6mmgefoiIvdN=_~cXFkLqKC z+R`K>hY9CeY1&c!)w#(5CU>1ZgD;?hv?wWSzvyyAlMT(s?3=p(G7=M}c-Cm|;ld?c zg!8Yg$fN*@@yloIo)pZNT<^hF=-0gb_R^=)y<}9ATELz>Wp`)P$N8WF@CIz|ku%FP z<)h222lpeGWZ8Y)Z%dhT`BmI}R(@ijxbimYn%wcD%zM7it;j}A-#S?2y$5kJaxa^T z1>CmEE>31owR?w?ddG1k=f+${_Zs(_)gc`DVV6LL(p7{cVgfPe%3MMz%=eIy z;d01DkYA(zUvFO>7u6T^Ez%%JcXtUawF{_(q#&(GcQ*ne0+;R<1ZfaK1SLcPDG8C5 z66pr%kVe4gF291^=lQ(PDQyh9*+oZV#-D_Pb1vPt3D z5M=7$_|u&XUhSVb?j;A^kMkJUn+oVpU4MVf^4`hK=TjH`bG4l*(u# zSrh%J=TrS;m^90;sk&YZ)Z%)fA;r45scVj+&T9n~KJ3#z;RmUPDVX50Mb7nR_=UZixFwgt&t=^o4xr!4Drg zza;^zlUEzlmMLt#DEI(g9hN~5e#DU$XBaEm=RzSA&Ir~|sf*KfOOD=IX>EITKpqhc zf79y9!OuvNW+k-gcXUl!V${n^iX3ahD{yoc(p`Uwy_oP4&S0#XXkvT4kJ5 z&b^A5nRg;J=5W_o?5Yj_tsA#)5JqhuXVanF8eA15{^}paJl{7Tbg##d-8KIeFk)6P zX!@Ik8n>3bE>UlCedJ>obS!ta*lMg?CBQ2$Kt^ARsicBbhJ#i5t*0!DY)f3=5=(yJ z_GjEX&EF>UjT-(0_cadurZ#kaH%Vrl;^>+$d~fKxib!=6ZG(JlE#cXwyqz7re>rs0 zKZ5usz;v=K&hA^m&If$Et~!1Y2vq0hR@1Yb?v(@-UwPa=Ou34x+uKf#iZ^Io<-!vG zkU{GXpM5~x7R5~zRVhdi7rqq!y=>7S!v1AeO%2Wm;V>9_m`A?Y$or^P2Q6)t9(&oi?G2Z z|4h<*Mc|=|1!_O&1q^xw{cQTz9(emDPHy$1E)*&~z>&eq!FI2&P9L{bJgv5$zY( zTNPQqTUBW=NMd9M+(T4KrOVN!qCA{o;*bA@CwMPTL z4O4jI>v>$>j_N)>^qtx&wz3YiDz4f6+%3MLR?BgHa?AK<411*~jr&}YuA{wsWBbM! z1`ZeW+Yg(Fq5G_xFWxS9#ER1C4KLG9l-cQjf8U#-Gx%83V8&Uz#4^tUu#;yN`NN;n zAk{=Jkd5ZxeHLc@K!~sD=_@s^q|Yv|tO+w%q)7@%=V(wVKPxLf{Lqx^%-u>FC5^Jc zM97l2u!oh}&pcc}p1gBab5}Cjz^pS=29qMMHzdp3#D-{M>sv_(c{9!-=Wa*?dR^tT zff3#9h@#|`M$+Rg|7*^PMt}rUj%O>gX@pH}$FPOWZG$v?*6q9Z7&x(`C~4Y7I;*~O z&EXMH^iWSijRP5#ZhI(Va3-jueTm^L5_Ys5$IejUebT|k^w6-Chn&#h>TOQLm$Q+x zBhQo^94omazT0gpl#yEy*YsGHnn>j_=4Vdrbl}a!-g{6~&-wTm1N97OUyO2NY7n62 z+KFa_e!M}e&}KLe`_S1-1;i+5JLVc;A1zJ726r)Mw;4_Z~_8A^A$>M-*m#@lzy z1x58SaS9sNHE%+mYrjOEE8SmLJ z-*&8Z$m|tP6mm?aoA3$(X3Z&v*IQLY88-bsyG(A^ql(k8VsDhmjmb0G0J1$^^u>td)iOdK+e2E(>>PBX6AwSU<(KP${rdac|dJT|Nb1>K+i zNv+|Tpnrd1L8}w&ebIR3X41O&WWZ!J^3wYFAvmOYO&eXd6(19gcs6nj6f2|Z2U zdwD;p*`MU_`11ht_-W?RTIN8U_(0mjTVxe((BJrH1NSECNT0DowN=ps9g?WIP@xVS zJ@zkRmI5)cC#;C5H2u9Z&A!Sop;IIi55yi?DM+D*=sV$X_?h12H0AWy?C?+*u35{9 zFmE&d7I`Q5qc`=lkpp12K14eZ^UkRfnRnC^5aRpU*3+5IbWeikP5LR`(;`yW=^0?V z#5DPYC9f#GpG^tQ-JF&gBgG`OW*3XUdyR9sy4BQwNL)7)^l!y z{4q&Q8V2s&r?nqv!@pLl+!8f3-q}w~cCvLlZPJIR{hV5gj^(7p`FNewc5Pc&bN$}j z?V_a8{?zSMw5p=LkHC$Eg)}EUP4Vxk>=s(2Z&8ngq5GuCyX%GR)Ydn&`O8m+9NOj_ zIp2?U>W;^d8CgCru~<&(>KToSl1#2~bH4ATd+IEMF?n}uHu~3)*-4B+0y_36t0BQl zlU4jxM(#2Zz=?Bj~y{2tiyn`q52UnXpaWk;8g`h(9aqD9{av}HhDCs`>w)D(3tjP~Sd zBT?&0*sUmIqeHug)ayloC2;~}*G$oh3`vwG*b?qMmb%Rg0j@lWX1v1KJjwk@&zs&D zW*MVnt|GwGOk=f~?Dsn-RqZ&US~X`?SLAqkcyOy>_xBb`<9@92bYx%vrX;%r-iFzb zfGP^%@HUg*4W8yq|GSyQD0Nt+Oku{jY+i%|((Fvu{uJRX$}PtMeuwvqwS{;`xto{_ z?Xbd1Q(=WIkAX0l;+F--Sj^Nm=7UIjpH+gn*=%PY&8js0P<^LG^VMIB>ggdiCq;bp zUkzUG8XRu<%#1ZxPH^{b2(1|p&Bmg`gtvlCSuC#1x77|?-RLr0M0*q=Dlge+XLj|P zrwBEM34OYsa-9C6F;@L`Y*RF+khqkw57AfKn|&mb@s)sds)VH~>_hFUxgPQ6=^pWt z&~U7eagAsxSK{fy7>p^e61U`HDN{W7R+>_Mm4q;o-~n-pl+z&nOFzcEnH9$U04sDB zrvx2m;5u9Ikw%KDNx!V|ucF@@!E?@Q^;^e}nNMmn+xBUiz739zbo`KYNF}s<{=#aD z>rpagIISEeKy`JjQOfVtyQk(VR!mi)sS%&Lf}Rpt)aug5wXfM+hlQ?e|zX5XiK+lN&in+*$cP593PJO|325BDwqaA+0^nqdZ~9 zw}q5W?W9@i#iPWj!>(Sc-Th_ItxfMV-8XlY?1o4lTnB`;`;~o7>|9Lmt{VsEu5R2| z7`e4$RC~NX)}$-g)L=r#>}$q1jIDGuW*nW5vG8=PR?zSow-9Md%4Ei4B|4GR`8S`* z+8x_(5Y<{(9}wsY4+;lqcug-+!5%_2A7|rl?$PZq@u{w?bB1`{^l>^abBjvte>xD~ z>s8^bJtGY;(%FRUtzamj+FDyUW;kaJ^MJ`1q4Lnlh=II-;Lje_LZntWG`m zc_h(p4{-Of{n>PekGRo@-hHvNEwyDet4DX=76IO>6O)f)L_Xf$&3Zg>(wYvfZ8Tb$ z-buGi8c#R5_x47+hG}?;6rg)D|KfI!`g8wz97>h9H%he}Zx4sWP>5v_ow=pkxo&(Fz|uci3!BbUMQw$9geV*+6>M zx!?Deau0RPgCrU6M-2{U%-in^r1Mz2^0&LhTVjY%Z>7u^xnaEzI!*HQN!;EOYMYWy zkK8kjH{{U}puuzdx@HkW_=Gp)wRXvXJEut<5z!r7!4`=Fjq5c9^3&WaZ~I}D9}fvE zyf;ps0Qlak1a=X(3Gf0OhVgG{qy%f;e;DNuWpA=PaRfCvoSL>$`tvFZYD*C!*vhpT zve|fR#;165M|-Q2v*`2)N7f(sz&x&q*4u23_sAR%@)@K2Gk(1dKXD9OGb1;NcZbc9 z?@@*;&+}%N8^u37?BYf4jabYl9sBihTs2_8W&>C)z81Lmg-t4|E3|}F^h_Qe3Oy>J zDA>i1L+}$$-rU?=Ig<9#*SuMFw~klxONr^S zLBHu+Eu!UP;?62 z8zW?cRxe7kpOIOYJv<7UzvA*~{#V?!4vywytmY1LUM@|-r5=&3kZcrGR4YjgK>sO? z>uxI{dDM*g1D%h>sv?YL?=2pcAB5L5wwb%@1MH#0hAQ&W8Y}j=zBv4s=1A;l>Qc4vV$*@M4{4BsXQg&wptU)b#yvqKv8Q|3)#nZH#7ir zeoj6o*`4p6s$q?*^Lm}#4;Tm0-$d;TjJ@Oerl!>D;~RmZmuz*5y%O?noz3ci4oXyZ z7I4s=jf%BCO9m4%Nf%_QgN(q8Tb_RZI@nh1Q3x$^$)s6qH|7ipQcGmF(Gq?zMH+s( zg5|T6ylgh&Qh#_~oKKo$77LGHCx-Iclf21HAmCNI?%g*pDER*RpQYa%yE2Er zpkg{kbIn;2kCsmCx5PXo&H>!A3i9IK?T_t|+(9(hVFZ{jFlz1lcKPd{wui^?;Tg9b z$As2w;69Cc_QX4_>t%Y^9UR*uWf|qG;WXvy5Bcj1tH|jBhn3upu)`Rg6qp~-;$lSs z4{x}CM&qgyaAo<$b8+FJ0;qU4GlC~;tp$V4WT@&9VG^sne%r0!( zl1u~n!G(naUpZHXh+?ah_{R>2nCVb3-C+9Y*ki=_Y~F(Yic3Aux67wpi#b00Sgv@p z%$pFw!Kzu3>iH$=L-KdoTGI`tiTdg)X`pH_?3??5UmCwjgzncVh96-{T{h@mLu$$8 zkm|=?zI%}_1S_WQmK@>temXjTgRD^R}Eqj6Cd@zB;} zM>8L#DOvQa2Bzt`8gn|e6nS_lXB}H#C&$`px=@HS!flxhIs$Hx(rk zBVbg~8XT00B@ZJP>SRoD%euzH*rforZOd3C)LU%OABT2SU4ycmkSzU%NZe+prgFZi z5Q`Zowz~Ir!Q59$3z9RpT|PRlIup?{^}KZ!GLEI>+J{cusKA%)LGbpuU5rM znBMj`%bva`TGo4|j7mk+y()Q=Ja#r5<}>+1@qp*sj)tZwgP}P;3(EjI`u5X=q>f!Q znuY+J*vO4Cg66NX3f-jJbiyq!52~>Ah*n!I2Ifgg$VehuxHwupl(j7G+D1VLsW|H0 z!h0#qcsPpvg2e)=*cqkOUaF610kJ(2yc&g~;Sc0#&^&+5>J-Lj(%x^o*Z;nu1vRtp znyQM4@1o>gPtucovF;2rE}qVwPMU4+C+T~^(XFkCQ8bmEWnyG!yb-@Gs0RHryvsdk z`4xpx_zQFfYfGxLO=_t;Gv|A&EK3$CTyTXkav%71S`o#yx2&?U5GcUf6#+$sCIv@- zXYwFs0^4koDV|V4R~SpED?{JaMvtX%eP%Q+`+|M@vBez2EWCF-H2Ha!jox>Qg_Qsk zimuyxxGjVQ@jfAx?iTrO`Myus8-J-=Jy^lGzCrw4vduKC?HMDJst^N8*RORgx$IiB zs$2WUJROn2?^~ZRa|t);Ow|BeGli%Og$DjJfl#D!fJOJ*rk6oX9baEJY zaNCvL>(|KE&jRru64yscByjr#*Jr*qsY*$c%`}AkQ8>FDlK(npmDJR%49HF^p%9Rk zD*RC>{+-$O+9$NVe6q!o5Zezrd>fwvsMSj{**(9ne)(j`NmdfJ!OayIXVbD4u6uL; zwU?fVN6KXXh|?s&S?r^&3~HlE1DCTt`9Cy{FC6YR7U*qGQ9i_ZU!Txd^0r|+|5fC> z`**IYG(iQ%uvChJaAUWqe+gOw0{G_B-t2fKGYN?XoVc7-EH>Kx(nNH9UABwDo}>d` z7#dzp1e|QIZ-=e-cP?a)4cP^XnCOVSu3UD|DV%70*!HDqcz#kQYi>_)adVG`^<%h&Ra2x^~TpvFrWJ(7Or{leQM}O1xk_AMkB>G8^t7 zYa}~G+W=VFb!94IKUI6PyUSagbY0@$#~g6|S?7L79a=J#F~;L8beCklTO}CL<1aeN zJ!?|i(w`_CVqE2p=ay`?5sI5(_&T%xE6|l?vtQ$drZGSIzHO{cyyRPKNY!eD@3dM8 ztEJPmU#(GJ)5DHfLc+sQLM8!HS;A=c#dp*7U){^(oxiwF$kLIsqLMq0WZ$}r7BGYB zVyN3P^ra-&=})uh;ih=jlzQsurxI%3Gu9K|Ln5KKBa81DHv20dW)%P?4qxz^@m5|H zY}e3-3}k#a2q?B;^8OUw8$=#-I8y6cB}_cT?#7g)cO+*@N1#b)vff} zP~wN@IqSigxP5LbXId@8`3}Dws_x_e{NkKUK_}%**0}qwLddkGkHi0!#^?uaSLFbf zCkDG~*URUZA3ip6_3{#Uxnl9eMlB*wqoXZ8h3*3`)(bWMlPY$izTbEA^tWV7s&d=4 zodoja@YnPm#x#EPr?d&AaqR>3E?bXh_!7QxmFqqJfbLOYp&di_x}8>cNx@e7WTicC2h#8u5)WB3OzG!0;%HC#Su` z-YdFGMN>Qw&{CoI;^-qZ$E@_Ta(eAZ8SL^+z#|q$AgsvJ9{PPPw_* z&IevS>Bx82)B{v)#ajdRyt}haTAe@pVSX1}LDgdDrX-Kvq~@dGqtq!O%w&I3@x!w# zEK2Tu`D)5q&|2cP2KGQgRG^3D>!`&eJe)asQW-Q_ZvQK}l)3mA?E(v|;)dhGr_qH8 zkIEL9rKo~@Y0n(b#-Jn%-)dd4oKAm@oCV_-ynp0E@f-bEZ$I*p32I51B1tyk3z!#Z zj;JOLQ}vR9E?NhVXl9yeo?!?rVma;Qsd?HJ=u`1&2Zpdbb6zmdCIoaB^2AE}<@~ff zr3xb~^8|XcU(wnwiNAeT-z#QQ7~+xlay=ohS|f;pvv28!NAl@4k{uk*K_zU=rssK8 zEV=}7w!0dI7@wchX!jiJXMgKvO`pn*9Vq!>v$s3N8r>|$OTM_cxSY3t_<8%zu8;#`v#Py8%(=Dut06r%kvUJatW_ke^?TH8aPkRT(Pz`?ghUGEP z>kWD{e!Q0dv5RyEop?t!IjkL3ILDptZW>!6mQ!2Y zixnGO`Gq9uIlIUbVJaMyZJ36_Y(IQi1`q z3&b&3s&GG>@=G^}wwQF$NtRy0%UQ=_=Ae;e+`Y3lKfHuO@~s1fgsE3&$^WpAZ|W)j zPd<7nl&xRn$C0;0~TR3QgicBIOQnti9PY$hod;);_+@}qpFTOL7YXyAu z+>{m=PpXOwlk2eR{MlLdlA+VObSiw&b;Ox!HQn38S_eCrIC~KqcO%$Y+I@K4~u(S zv3~OL$$dP2`q3u09-#5zh-h>8RJI-?=MdDEGsm^Z+k&V0`t^R3o!MsyM)d7gDTVhm z5y1*f1Fu!ISnn5ju9Pc3BrzI*RIfBXyZ0!z!q=YH{ziubuS=L=5-I+8-O=01fn?uu zOYQeNdrjLtxjilzstPQNO^X4wLmI1sj~z0N9Q>7S_Ku0(i+un_U(P^FJnCG<(n;;f zp8U?=5vP3Jv*Bn>$x!N(`T1kS^f1mZNeLrXd-@-qy0=j2^qn?8I(?iYB3t}=XUMd) z>mmL_3biqL9wt41rMv^wiFEvBjR2SMbbJoH5h+446^Iu$t(<+$xLq@O92JbSaDQRI zUMn-Ag{dqwRbq4%sKkEpX0uM@R7*sfqS;A}eja_roqt5Nr*?a>GkkLL&6_^4g7=Pj z{bOIp)HDu%%*2jDTSzTOC<=>s;yU!NJ!T{M+CnMs)!cCXkLzsCOnTQ0`{PZ|QmC-q z5~1|e@3zrMECbQcsNS8D*J!4v?PtB2sKNq;Lmr^M`Qc{Q8wJe!p|#stlppGrRJVI~ zc{h1?bk$p(^?Hv){qE|uSNZ;3BPNUgj`3ob&m#6t`cbWpdA^56ttiA;BrV`0#r?Ps zZOiJSJUE5|tF?cwcMN z&}iKEpe6{Pj2CEWArdRSa(%e##}AedYKAH<@oUSeh%- zypPl|rpS<>Mf>2a{!}BfV$|F2#;tlq{#e z>N!UBJxfkVCi-61)Y!3LJt;6Yy(fD8o9}_Ur{{h=4H~v6L8>Q)0L6_{ft=cs(aP$c z8LX(|!`mf$)Xa7K7^!MfzcEB^K{avckED~SI36j!m>*AoRawl==clj5vwNsW^d_qm z`gc&8@MZP}l2!qqnIvFw*D(2ul~$Fh6`S4LGuo}$W+bnU5&|4_>squAatu1qS>H&# zwZ1Z=b=Ca|?SxqaO*qb8d#UpC7gxigs*NQv2$U5~92#LUc&@vNgsCt6MR?^(F_J4i zOAhb+coDG09e=OF{x_?n0(!&^+~zllAr3`2PaiCB(aj(B0Z&El`8-l}A86F{fi}RF zvBk?V#*`p93cskJpZ_?Di|Es&sb{9Y7%}*XPXqppb53GZd(i73c2Ri?6T4{N@nJ(j zBiAqwt~5_z|Ci(Ul5*F=uQFK^XVX8?X)9++OnL1>EG*2s#74I5CGVG6{hcBDyX7@5 zg;nFLMIjh(Qmp~MkQLTO;arHfS42jpW&UqIb#bRJdBQTvqi71s4XNZ!S$EVIKZmym z8J7-$|Ca&X?LM_9?#V6R#m)yOU46riW)sT~Sxg+8naEaghkkU%$a(LW&ET`e7h;Nj z#*En^ttlrj?~5ZpCUJ<6LVw4%%sZkVu;UPSkDo6-HtyYvG)z`|< zVoc(C_h8=2sNNg9G^i-U_Ku%Lr|lgVf|fe^(Ao5rCgX(QqHAyPFl-1O%8oFx5D^}9 zq*0gc1^-zR_0iU{({IMSwe=?Bx2tsnRePc!lYCTo6M+HXc@^(*w-b+cW}m&D_PBwK z{HK0lGyj|~?f|d$<}I_a`pod~cOj~p502t*)Y$Mhc%f#cEUlMx(BmuyiEG$G6Tb{W z*}rev|M~bnr^V2Ht0vUZ_vg@k=F>9LU=?LF8-tbPsiW^sTTjR6##7>}xBVRizy2ur zbiBb{;qu%V$|P9py%J=r5=`;RQ1tD1iMf#P+o9H68HrM$i%_*K7m^ZCoQ^7)joR22 z!x4&w<`zJ=C8JtPc=w^<%U0igS;AJfdW#^V_a&XDxo?G148+D$wy*wH@zmZheqO^U z!Du!yJDosXM?%93wfHzOTav-gLM$3SH_w$aTDI|KnO`DU1;OZa6yA50)?4xPI z0>NBM(>|;PAb9ze@HGjWvO=3y*p6s!W3#uOZT(ljGvbXi0ovPiXJjV>dQP;ryhzyT zP8*MQ;$5to>|F3Dp=2yq=r_~*XnPqcW18E{6DVgNu(Di{5WaaWoJ?n&N{}Dpo-MCJ zthZ5Ai{}IH#-v038t*n9iIqP$zM=jYbd;FP9O_rIi2yipg+wEdQEg@jwf+q0ZR>4r z+#}~6?ALo3tW0AxsTci6F@*_@UVerNv*0j_aob~C3PKmBqI96Njkkp*<6cS}BdO26 zoS5A`jp2+oE!K-2NAUDfhcF7qGlgm@8*X>&M(iWbBT-QdSCtrr1nw^_6O0%T_PTV&*X^4vC636iy8silKqc~;T-0d-v7b&VKb zq;I~UdUv?Lwf@`46Xk3-bVlsZ=db{8#$`W)?{~bwn&BtCI0MXfu^-rn2U{*g*k8_Y z7A;%@+?`2>w4KlH2ff5qHwUmJ7+zaS%QKhFM(3RZSNh1mOfTug`5vAAe6`}Y*R^nP zq*5plr$uu`@&zgEr|&nPk?7y!#E#}JH4}zVN7sW-2cKfADSI5;t-zY10aXze*3VTw z&K%w4`?&{+^jw4mK^@-e{37k)H_}zsAK*+gZ3)QX-zWOxCh&&$qr({4$i2MWM2yGU zhw{Xyt$?4@G%wTLcV+_dQh{zb?>lWfmHKewCrkQpHQ1h>=+N4^E39(iRCVg@M5*@b z-j80QzV|Z8QuSMRx6<_)Va2`gBc>uZ8WdEaNxw11-K$;HeMwesZKEy7VPzJSOP7A= zI7$r9t7d5#-j!Aeb|Kh=2|t*@>=0$uXpIPPE9(F_Z1i_|R$IdI4u31Xv};1;{^id* z%c+n~Z2!id`mL^DrO1vgcG=CHs9B9uQc9v3BU|#J`06+Qv~Ir^P!)T#1~Y>&W^)KA z$L#~$^HqpPi-X-qRc>7UPyoY%#jMWpe-)jzU8YNAd_B)2C9;_6Q|s_U{wg{pU(oM* z)89k)fz2l_uB*$`cF%o(FVh=75{~(mWOnbxMt=Nk$F?!s-J8eFdfvj7CtDOkO~YH8 zP4w$e-0s+pw#qvV?+jyDt%Q7C7R$U|V(})0!8t&HzwO7hL}|e0Dd*@~fcrZYa-vr) zdG@NJDNXYu#)W7&nEB!ESr`NTTsOn1Bzk)YU-AOnDJfkq2B{vYtF@k)t)9JUF7*gV zDq&jUw(5P8zPdrhO=DdmQa)G##51jvY>)60uj1irMNNF@IVvx#Xn5zQX~tHzX1gMi z*qWP1J=sunFKgzT?DOJ;AZPZ-jH0^(uZH8b$&!D>nO&RQKBdNtapHB|m3U;m;(xX~ zTNcU;cp5Nlg_%9TwmJ?u96j#Z=<0q^#a19}#ekXI((HY0#Qe@LB(r+p23?vAD~C8%CP-)P<7CNPSfe##x?Qw;pdmE>$xC zdlI(+<4`oAH;sE zW&&VSG45(JH5r6f2e_MQ&GKU$ILod!x{LC0z}_y|lO0vik^~J$hFi`Qq&s<{B3`H9C znij&y@XW)QOe5YH*g?SlX^mBKNp#EXNo@eP|F8lDnPB@X;@GI-hNtD~Po?9H8gi=4 z%^11|AbOpfBM;ABR;H1C94w?Gv$|ht>9eR?_p030SC6*KY54ndi+2=`r6dp7+J$YB zfRXBj<#4g+_paI7F<*&mseO*Sn9^o9if2jQhbSF5z2f&e{l$8s{V^#ejn=#IwN0{3 zW6(X7LM{d(n-AE{g(cUn#oV%lhr<+GVvRP#a`r1HwkV*SyMC@5{jI-V^pS(1Zx!#}7j7}ecexh8 z;M9i_;UrES+Z?Y5TXdnlh4(+~g2ym=8+t{5V>Qq)JzD&n;eB5mbyX{a%lyIPqIfMl z+A2I|!kET3Y^W5Pais2>cR&3y=dJ|Zco?zz@~7l0>j1Eqi+psB%nPp1F1j*=0fPz? zY{9}BDZDorElIQKG~LD$hGlnClw$X}AwYk+Jq4>$8m$+@sRui65Z!Lw^`?7M!8qX$ zN(jT;&S3GZ^jehTgad&8U(fJR%+=R(Ca}bK$n} z^i1j@d8q6c7+@9jjQAH(90wyC$``%%NaAhhM<;mO^0O||-j?1^Za)9oOx-2l)n*T{ z;%exG7m^p;)lPa{s*j#jA&$GQf=%1uy%6=wFTr0LN|4`7RE67LQf4sCt{{k-6Xoq! zh9yaAKVw?u_2F*GgQCPz*4u3LQpJOjNod8``#~6x!AO&U6v><2nGdq?cb7l&#x&ac z9J?K#xus`j=BUsUHS0rUW)BZjD%|jaqVM}DFH%q;9CFzHcdxt;4ap0?FS}e}hC*zoJ&M^G;URUo5wG-}*3RXz@PdAo1i!`;$Ckij(GwFQIlt~w+=c!$6#`SU~Dsm?g9 zC|0IwEGEuCRvu#ume7`KIroQ|7>k(-lbPzY?iQwM6zh-_vEHdW$+>NMmXCC z5&qX1eRRFEpMrYOf;cTKXI-Q8Uz0Ers10IIZKWZJ3yQ)01n* z78^|0E#{eGowdT{Bsl`*RkHT0+9C`@q}~wm#X1r^oxxFEy}6_pGaZsq^z3f&C;NK? z@%9d|)0>HHZ^Pw+qQl9)B$qgO8UwY7g!E0Gzwe1gJ++CgE-aJg;wy2wD+!f7NfO7p zWlm6~5T40F5^mPQIqLyo4!O}XUP2xoju|84!xSb`EV$Ko^o&d?o24RT)*YO;(+r_bU<6wMP!1_ zHQs9AjxCxw)$_d;5p4D8Y!_^IKl;Y6@UD zklf=(xM&L4M(cet^{+YBx^O#&7=m7f-QV52{wXaZ>BhT?=Wm33yet+m)x2(DHQU9y z#WZasWTq-#O};ku$#nRBDOV@p%u;95M1NbS&yeGDnekibiCVWOKdQ{Zy`04Za`8W_ zs&y;n-~3pArP-D^WU1yK95`0;7@nQ=*L8*FvZI_f3X_~d_!WTb_REG>XCCtbe}2)Y zTz}aR_jqBTsTMbAirHi`7{e9(4~4S70Jg%6JccJ{xYcF}51zS&-&9Sg02@k*E9$b? z#N^E^ojNAau`FLvtdv`6zMYU&&-Ip_lUabxGbPWVPyF6g{mM}divi1W{?bmb`vF@5 zm4X=6I`@k_&hmb~+(%C`^L$ut$o#ys`Bg!Ty6#)tE<_Pian$qv>Ccz$e-!$ED0hqu4a3k`TqIbTBi@g=@cbf(mwm>)CEhw3L{XDO6shL$_S-(-bz zHzO+}?<7oU6bU+TSmst@SXiTbta>`FIo3{$zb!o+OT=tmro$W!JWBJuzTl> zH1-=u z&CVKZW2hG6m$S8q*JmA;J}cJV<7d5zm++gR+KGI$KNT_&= zr&Rle3MW)o@B`k?-^LbsR_>B}^r!DI+soV3!`0k#pyGQqq&qb&!@$~slBN{nxInPj z-HiHuagyH0hru|SL+y=)Kx6xQAgaz#$R{o%B?~))0o&EK#1B(qw?-uRt3Cj(@7=wZ zM)&=cpQ70lJeS5SkVt{avGsC{e{Ell#|wORI>0<pzh;T0w!|daIla~O z+&7_+1$RPWG8$VcoyEr-NAf7NPFux+hK8CVy~0wrL7?}~SojBAcc9>b?IHnabC&)$ zf4MrlMm*?l@8Ip~_&t{KC;Hu=KIO9me(IbYlbmFmoK1yp!kkSJ4YO!9ZjOpP;|wx6 zYGT_DXVHXdZDDuvZpk(!rBVmi7qmah`{|M}MIzhFAvKrBABd7O@oO}nW5ED@>W_a2 z)(l>(^1bUS2~F`3J3U}1mB+3W@N%{v9hDFB_l$The);NEQJk{%t29)>D+5;>aPAE$ zUw5Rh5ZPB%y{^*NkrwoWI6DZ-96HQ+Vi7O*qsQ3H?SzN1GHDP%OUo}{zdOD`EAC;w zCtpw&-^FA%clhAo&w*n>ctt9KwTW8xf{6xH`iG8mmLB%pX>(426*~qdMuA+&SFCm` zht$bWtkR$3O$u_&MIMpbGox)Ecz)*_XEt@}6h2jR&3`=V@uXU_5B)m!oJ^^()VsN$ zVGMMlPNKV^=-E*OKoc!vbc|!qUHf!GCp6E5qo%8!s zQ*=6&ar66d6MJo78{rn|7|9l@Mi)=xw*Zw+`csuo;Ar4RGH`PAoEfP4b6xchiqqMA z8~aj{>h#Mj$sP8IEc-JwLHZxwQRWQ?MjubUmT2$|t<8+kIt_-FHs zqLYvB@J5OL;bd@@;pY={RsTN$Q|3=dSESGf14LfWkuFrNH~-42Jk33^awyTdYjW*{ z7I!s%To7+oDC8T!ZF({!$iFBW_PHo8?j>LLOm$Y0UXLVR1EJAJXNk(Q^gmCwem;`8 zeyVSNsG>Q)r*c5UxXunb$Z+T8_htC~O)@bk?9BT56 zJl=WC{HgGXwlYwg)x&%JY4>bPF#e)1sQ2Uly#wEBw=?xNF-o9_lq;CTANzglP;CJkr zQdw6C*L#}VT8^R>4PCCz-z_@BQRBv(CbH`2t){LWYy_U%E^LyJ?d4aowu{PxS=&bL zrHr=Fjk7Uftut?WDT+Nkx=JEprMQhtIhh-IP_l{haOmg}&&2$s?8Ya32Wngw>SvK- zJ(BH_ivp2U&A@wpveeAZ$}Ow5?xo!{yxReN94r%hC;M$t&74q>y!iETFYecOUteE%w~V#N>NXULp%7B=LNsB9 zNad^Fo1Vhu!ez=CW3DL6{4mU0x9)8;1#X3~l)Czn_G2!kreA?QD7))(Mi zV1MBaf=_Cb{fjqv@gdkbb8rMeIFM20bN~S#3jALnMkNUu>>mV}i!=TWc?2K%e}MhK z1S{Ku2qLcX{ENSSv1ggkzsP_WXNCR+qy)|?Ux^V$U;{$JLz7*i2}nWEmUD<9*g4?N zQ~<&Mh2jGfspO0y7`cWA`xk&m0Bk8?7)n6K;|`G%kp)rb&P4>G%z*zEx+4Vs`yAEu z0v0K#-DLGN0&14?t%D=w1QkJ0taHpoP{9{R!bB_M(g;AX{J&a8f`E!Swse4og(V0@ zYvTpt*N8$u*f>XX3r_|;5Z((!AQWZ*QB=V$djbp~@Hm740zxsv7z992IUxoC0RaZ^ z3lK64{0xo~VGsbt1i~4Dy|6&kU9c^Ohyf0tHiI4rJHr5h1LXaSI)nF3-m#gV09`HO zMVyj;g&uzX8r>E=~W0y+&nLn+KQy_?31*Ri`=)c$-?Q-w{ZV$waCiB|Q+jw%d` zdT1F;`J1P_<*Me;h;fqe#}Tt0HodjdPHb%&*A_@Yx=Xt#`QW&7C+&gI&FwDkP4BHQ zPzi|J{>IuwHFME>u^Pr2&Kij^(J|4qgT=ZhLQa#bk@ZWF^`1uNf%b8D<%})1hJ=(5 z%YfQ==r6g+B|V=ar|*gxgY7&=&rTF)=v_EiO2J;B#Mqv$pyc>LOyOk5ECL7s2jqeO zF*q{doPXdK5rKozU8cccB47uAOEd^S*uxW%CIEwDLth>Tg}||>F44eVDDWnT;2-ec z!XO|y9BA#*KoD6Hjtq8*2I3XL&FL~t6b8pdx|lqv)wdJd9#=~)nZOc+3XSO7e>2qFZV zw}6Oz2n!4H^TYcYT$&IBZbwuJ1OyC+1HE4!2X5}~XKnw{J46s%7ipj>CS5tNdpi z*tbF8?+HNoJERFfSkeoN!a=Jcuz!YwDqw)?`;xH>!|^;X&>$dwoG2Xn?g9<`C?X1P zmUo#3J%`Xoq`^V{F4JHzIAY&lG~l08CJMIe`-gZ=0~Z$Mhljz-4~v4Rpa?YZ zgMsUw>;E5{=ZE9+ArIt7lrH!%KjOiHPY8zzy|g=UYe*6YX%{>R@Ru=y%0k|q=mk6Z zM>GG6UlR}n8{#1>4AS5&S}rjo00P4zZcYFIF=!FR3N}=O<3J)j3`5#6+%+NC9oTgh z#G^-i7E~wF!oueOz~}P+SNvcHNhI$MVpJo#5`K^dM~A!2AXE^JPK!W;BH1k1eE|-H z{?E9-&Og}w1rA^Q5ApnifG7+}GJ^bIUl4?GAPwHU>(aAe#}9a>c$o$fLXwOi1e8A_ z*C5nCycz7}hXsT$I?wYjK~IjfJFrbKlBhwvTcpi_xPowiU3k2`5O6`LW+Y~Wgy3+5 zmzfa~LNYEv5fLO;ASen2XGeHei(~zP+ zh`){GXTab9z@5P5-HAew&M~-Qe#C`Aj8-^e?WJcyU{9oY1x72RV+SHs{%yeY|A`+Q zh-7d=$&eBPc^kRRF15=U<5`p*g1bYeo{S}yl{>O}a#J3PXKAma7kN&J5{Eds(BUnAb}0m}rhlmr3gUJnG7l95 z$0P6r(h%44{m-TSyS@-;H_wOYH{0g2ZoZH{O8-fXfTp`X2 zw(dYwKN!)Fd<#rS7+y2E%#)BXQi2GBUKIG>SttxV)<_ErLlEx*pqmjwils0x3qrJe za6ZJ#FnARPZ`X(na)2ieiEAj*<&__-s^x>x3I>HDDMJ*@SuZF9y!wK@4*ohi;8#eq zi-Nu!(F#EtQXB;H?Tgo$bHM_lpjShb6W9~vawP#ADhf6rMOp;p3{g&^f)FI%0?vn& zJi#vs;Io&l1tcP6ULb==c`A5yM^YM?pdm8@6Nb0%xMV@1;K2Wm-QU&%5(O?u9R2`! z5Fv=SN$`Ss-d6A8gz#~QOoKF}D+Zi~=qw=oV9tgZXu!G)6fqBh(-89&(48R_iy-_^ ze#8_Ke(M)NIB)Qq^0`#u^8e?s!UrOr50D1dL@tXEPD9LV;0q(>sUQt0iGb5C9`tkl z!*_DgtNbN?QFzFJf4sn;sKCXv;CvkTFuc9;KjYv{rXXNB{IBo8O8}x;!2o;VWc;On z5SSl|c=3Tiz*B%IHn0SMXn5ceIB&T54+DQK3@-)z$J9SGBzuAY@cSR)KzOwfnTD7m z!Wl$T7X&PSAuS9xIY3k)xZ!hyzodV#E`jJEARrB~>I2>>kSdoT4UE=^OoR7RBng5J z@4|-v(mw>$HA093%Y6bDY72ksQxw_oAYefRabd9fc+tqt#V-H`LPRMD2yws=-6cKKN_p$2PomucV{u=9-a zlD5DJ5ko6j>;mtuh!2Bq2hk+J3M-;h1zRi$A)1{q7=kb6Eq`eXtOy`pUBT)ZQr%7j zEahDcW9M1`eJYZh5CqFei1rRNR{umlD$#0iCwJ+h#%Fp_P9eb10QJV?6~ z3E=XF7qgL08W?VnxfT_#U zkcQ-|z+aajst$Y>_P>lfZ@vX*_FqYZ_xHaU{O@iJra@p{jJPmzaSk*$q?#;9L#l$q zX-LNyeARb3&H-RnAixhr(lHpYFCG&(_h4gQQKY~Lz5_&l7EF8*k0;n_5%CzqE8arj z{^4`~D;jtu8_@{CLZ%Sn@r2V5!wlT{ATlis)};~E1gHITnt*?F0{2pgS3|h7Ks<_I zLIFkG9h`>fbU|MsjA%#jdNV@y2JnMKq|!9#7{C`nmn8%G1#r^{G*IoA_4(I{KnOkO zDn=LwPmRF05WuAgK_Yl4F8gXYO#~qi1!-ViCBWwa$-haTN9>}1q IsvOS$0A{X_mjD0& delta 42802 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 diff --git a/pdf/Casvisor_Docs_zh.pdf b/pdf/Casvisor_Docs_zh.pdf index 7cd4e6bea88f95615df54f311eec4635c51303d4..1b6c9c484646ed086c1fb219a0b603857c4f454f 100644 GIT binary patch delta 51662 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 diff --git a/pdf/index.html b/pdf/index.html index 4132f1e..92bb631 100644 --- a/pdf/index.html +++ b/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/404.html b/ru/404.html index 1ad27b5..c9b8885 100644 --- a/ru/404.html +++ b/ru/404.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/assets/js/696b93ca.b6186d3c.js b/ru/assets/js/696b93ca.bf23502f.js similarity index 93% rename from ru/assets/js/696b93ca.b6186d3c.js rename to ru/assets/js/696b93ca.bf23502f.js index dfaadce..677b114 100644 --- a/ru/assets/js/696b93ca.b6186d3c.js +++ b/ru/assets/js/696b93ca.bf23502f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[857],{7806:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/ru/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"8 \u0430\u043f\u0440\u0435\u043b\u044f 2024 \u0433.","tags":[{"label":"casvisor","permalink":"/ru/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[857],{7806:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/ru/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"8 \u0430\u043f\u0440\u0435\u043b\u044f 2024 \u0433.","tags":[{"label":"casvisor","permalink":"/ru/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/ru/assets/js/a951fea5.f878b450.js b/ru/assets/js/a951fea5.b5a38ada.js similarity index 98% rename from ru/assets/js/a951fea5.f878b450.js rename to ru/assets/js/a951fea5.b5a38ada.js index de11c25..f7a8683 100644 --- a/ru/assets/js/a951fea5.f878b450.js +++ b/ru/assets/js/a951fea5.b5a38ada.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ru/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"8 \u0430\u043f\u0440\u0435\u043b\u044f 2024 \u0433.",tags:[{label:"casvisor",permalink:"/ru/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ru/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"8 \u0430\u043f\u0440\u0435\u043b\u044f 2024 \u0433.",tags:[{label:"casvisor",permalink:"/ru/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ru/assets/js/acf87bcd.c6a40ea2.js b/ru/assets/js/acf87bcd.17ba5192.js similarity index 98% rename from ru/assets/js/acf87bcd.c6a40ea2.js rename to ru/assets/js/acf87bcd.17ba5192.js index 9c4d083..49a0612 100644 --- a/ru/assets/js/acf87bcd.c6a40ea2.js +++ b/ru/assets/js/acf87bcd.17ba5192.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ru/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"8 \u0430\u043f\u0440\u0435\u043b\u044f 2024 \u0433.",tags:[{label:"casvisor",permalink:"/ru/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/ru/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"8 \u0430\u043f\u0440\u0435\u043b\u044f 2024 \u0433.",tags:[{label:"casvisor",permalink:"/ru/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/ru/assets/js/d4e54de2.79415815.js b/ru/assets/js/d4e54de2.79415815.js deleted file mode 100644 index 649dec8..0000000 --- a/ru/assets/js/d4e54de2.79415815.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/ru/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/ru/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/ru/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/ru/assets/js/d4e54de2.e5108d80.js b/ru/assets/js/d4e54de2.e5108d80.js new file mode 100644 index 0000000..bdcca18 --- /dev/null +++ b/ru/assets/js/d4e54de2.e5108d80.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},d),{},{components:a})):n.createElement(g,i({ref:t},d))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/ru/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/ru/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/ru/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/ru/assets/js/runtime~main.7fdb1f31.js b/ru/assets/js/runtime~main.60f0b0b2.js similarity index 60% rename from ru/assets/js/runtime~main.7fdb1f31.js rename to ru/assets/js/runtime~main.60f0b0b2.js index 87562ab..5fe514c 100644 --- a/ru/assets/js/runtime~main.7fdb1f31.js +++ b/ru/assets/js/runtime~main.60f0b0b2.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,t,r,d,c={},o={};function f(e){var a=o[e];if(void 0!==a)return a.exports;var t=o[e]={exports:{}};return c[e].call(t.exports,t,t.exports,f),t.exports}f.m=c,e=[],f.O=(a,t,r,d)=>{if(!t){var c=1/0;for(i=0;i=d)&&Object.keys(f.O).every((e=>f.O[e](t[n])))?t.splice(n--,1):(o=!1,d0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[t,r,d]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var d=Object.create(null);f.r(d);var c={};a=a||[null,t({}),t([]),t(t)];for(var o=2&r&&e;"object"==typeof o&&!~a.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,f.d(d,c),d},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((a,t)=>(f.f[t](e,a),a)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",240:"25cf857a",282:"d0510bae",310:"ea47aeb2",391:"290cc788",432:"a951fea5",514:"1be78505",534:"ef798800",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",717:"facd7a1b",720:"d4dd604b",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",857:"696b93ca",864:"8dd2e619",918:"17896441",930:"749ed5f5"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"7f5d56b9",68:"fbd76a3f",81:"8ddbce70",89:"1656bb5b",103:"e5273bec",151:"3c5cde16",195:"5f072758",217:"b7d5aef2",240:"bb394673",282:"9017c038",310:"127a866c",316:"81ede736",391:"0946f115",432:"f878b450",487:"c64f1a92",514:"bc0c2ac7",534:"2c47689d",535:"22d83095",562:"7c07e52a",583:"79415815",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"c6a40ea2",717:"27ccfae0",720:"43d5da62",724:"1f48a7fd",740:"70ede3d4",776:"28613545",778:"e93770e4",780:"de6153af",817:"59925caf",857:"b6186d3c",864:"5528c9b9",918:"d7957afb",930:"50928ec6",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},d="casvisor-website:",f.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var o,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(l);var d=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),d&&d.forEach((e=>e(t))),a)return a(t)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),n&&document.head.appendChild(o)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/ru/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217","25cf857a":"240",d0510bae:"282",ea47aeb2:"310","290cc788":"391",a951fea5:"432","1be78505":"514",ef798800:"534","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646",facd7a1b:"717",d4dd604b:"720","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","696b93ca":"857","8dd2e619":"864","749ed5f5":"930"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(303|532)$/.test(a))e[a]=0;else{var d=new Promise(((t,d)=>r=e[a]=[t,d]));t.push(r[2]=d);var c=f.p+f.u(a),o=new Error;f.l(c,(t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var d=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+a+" failed.\n("+d+": "+c+")",o.name="ChunkLoadError",o.type=d,o.request=c,r[1](o)}}),"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,d,c=t[0],o=t[1],n=t[2],b=0;if(c.some((a=>0!==e[a]))){for(r in o)f.o(o,r)&&(f.m[r]=o[r]);if(n)var i=n(f)}for(a&&a(t);b{"use strict";var e,a,t,r,c,d={},o={};function f(e){var a=o[e];if(void 0!==a)return a.exports;var t=o[e]={exports:{}};return d[e].call(t.exports,t,t.exports,f),t.exports}f.m=d,e=[],f.O=(a,t,r,c)=>{if(!t){var d=1/0;for(i=0;i=c)&&Object.keys(f.O).every((e=>f.O[e](t[n])))?t.splice(n--,1):(o=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[t,r,c]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);f.r(c);var d={};a=a||[null,t({}),t([]),t(t)];for(var o=2&r&&e;"object"==typeof o&&!~a.indexOf(o);o=t(o))Object.getOwnPropertyNames(o).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,f.d(c,d),c},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((a,t)=>(f.f[t](e,a),a)),[])),f.u=e=>"assets/js/"+({13:"01a85c17",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",195:"c4f5d8e4",217:"1dba9094",240:"25cf857a",282:"d0510bae",310:"ea47aeb2",391:"290cc788",432:"a951fea5",514:"1be78505",534:"ef798800",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",608:"9e4087bc",610:"6875c492",646:"acf87bcd",717:"facd7a1b",720:"d4dd604b",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",817:"14eb3368",857:"696b93ca",864:"8dd2e619",918:"17896441",930:"749ed5f5"}[e]||e)+"."+{13:"3186fb4b",48:"63c544ab",53:"7f5d56b9",68:"fbd76a3f",81:"8ddbce70",89:"1656bb5b",103:"e5273bec",151:"3c5cde16",195:"5f072758",217:"b7d5aef2",240:"bb394673",282:"9017c038",310:"127a866c",316:"81ede736",391:"0946f115",432:"b5a38ada",487:"c64f1a92",514:"bc0c2ac7",534:"2c47689d",535:"22d83095",562:"7c07e52a",583:"e5108d80",594:"0b9b45b6",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"17ba5192",717:"27ccfae0",720:"43d5da62",724:"1f48a7fd",740:"70ede3d4",776:"28613545",778:"e93770e4",780:"de6153af",817:"59925caf",857:"bf23502f",864:"5528c9b9",918:"d7957afb",930:"50928ec6",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},c="casvisor-website:",f.l=(e,a,t,d)=>{if(r[e])r[e].push(a);else{var o,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{o.onerror=o.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],o.parentNode&&o.parentNode.removeChild(o),c&&c.forEach((e=>e(t))),a)return a(t)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),n&&document.head.appendChild(o)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/ru/",f.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151",c4f5d8e4:"195","1dba9094":"217","25cf857a":"240",d0510bae:"282",ea47aeb2:"310","290cc788":"391",a951fea5:"432","1be78505":"514",ef798800:"534","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594","9e4087bc":"608","6875c492":"610",acf87bcd:"646",facd7a1b:"717",d4dd604b:"720","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","14eb3368":"817","696b93ca":"857","8dd2e619":"864","749ed5f5":"930"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(303|532)$/.test(a))e[a]=0;else{var c=new Promise(((t,c)=>r=e[a]=[t,c]));t.push(r[2]=c);var d=f.p+f.u(a),o=new Error;f.l(d,(t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var c=t&&("load"===t.type?"missing":t.type),d=t&&t.target&&t.target.src;o.message="Loading chunk "+a+" failed.\n("+c+": "+d+")",o.name="ChunkLoadError",o.type=c,o.request=d,r[1](o)}}),"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,c,d=t[0],o=t[1],n=t[2],b=0;if(d.some((a=>0!==e[a]))){for(r in o)f.o(o,r)&&(f.m[r]=o[r]);if(n)var i=n(f)}for(a&&a(t);b!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/blog/atom.xml b/ru/blog/atom.xml index 216b313..cdd4fbe 100644 --- a/ru/blog/atom.xml +++ b/ru/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/ru/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/ru/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/ru/blog/index.html b/ru/blog/index.html index 1374fd3..4a697d9 100644 --- a/ru/blog/index.html +++ b/ru/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/ru/blog/welcome/index.html b/ru/blog/welcome/index.html index 0d45a7b..86c5434 100644 --- a/ru/blog/welcome/index.html +++ b/ru/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/ru/docs/asset/intranet/index.html b/ru/docs/asset/intranet/index.html index 5bc2dc7..8b52302 100644 --- a/ru/docs/asset/intranet/index.html +++ b/ru/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/ru/docs/asset/overview/index.html b/ru/docs/asset/overview/index.html index b88ee6c..9af9001 100644 --- a/ru/docs/asset/overview/index.html +++ b/ru/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/docs/asset/rdp/index.html b/ru/docs/asset/rdp/index.html index 3b7a7a9..b949729 100644 --- a/ru/docs/asset/rdp/index.html +++ b/ru/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/ru/docs/asset/vnc/index.html b/ru/docs/asset/vnc/index.html index fd5e35b..5e75159 100644 --- a/ru/docs/asset/vnc/index.html +++ b/ru/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/ru/docs/basic/installation/index.html b/ru/docs/basic/installation/index.html index 9b00f0b..2204027 100644 --- a/ru/docs/basic/installation/index.html +++ b/ru/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/ru/docs/basic/try-with-docker/index.html b/ru/docs/basic/try-with-docker/index.html index ff6c3ea..b8be08b 100644 --- a/ru/docs/basic/try-with-docker/index.html +++ b/ru/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/ru/docs/category/assets/index.html b/ru/docs/category/assets/index.html index f02e145..3710364 100644 --- a/ru/docs/category/assets/index.html +++ b/ru/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/docs/category/the-basics/index.html b/ru/docs/category/the-basics/index.html index 62cd678..f0d175c 100644 --- a/ru/docs/category/the-basics/index.html +++ b/ru/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/docs/overview/index.html b/ru/docs/overview/index.html index b425ad9..5003195 100644 --- a/ru/docs/overview/index.html +++ b/ru/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/help/index.html b/ru/help/index.html index 6f4bd80..5f225b1 100644 --- a/ru/help/index.html +++ b/ru/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/index.html b/ru/index.html index e2f1cd6..f06fcd0 100644 --- a/ru/index.html +++ b/ru/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/pdf/index.html b/ru/pdf/index.html index 1414cda..9875dfb 100644 --- a/ru/pdf/index.html +++ b/ru/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/ru/users/index.html b/ru/users/index.html index 73a6eba..976ddb3 100644 --- a/ru/users/index.html +++ b/ru/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/users/index.html b/users/index.html index cb9f32a..84ec5c0 100644 --- a/users/index.html +++ b/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/404.html b/zh/404.html index c38f90d..ca0fb50 100644 --- a/zh/404.html +++ b/zh/404.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/assets/js/927d70e2.837862cf.js b/zh/assets/js/927d70e2.971560b2.js similarity index 93% rename from zh/assets/js/927d70e2.837862cf.js rename to zh/assets/js/927d70e2.971560b2.js index 2d1163d..c34548e 100644 --- a/zh/assets/js/927d70e2.837862cf.js +++ b/zh/assets/js/927d70e2.971560b2.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[45],{2190:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/zh/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T02:45:07.000Z","formattedDate":"2024\u5e744\u67088\u65e5","tags":[{"label":"casvisor","permalink":"/zh/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[45],{2190:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/welcome","metadata":{"permalink":"/zh/blog/welcome","editUrl":"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md","source":"@site/blog/welcome.md","title":"Welcome","description":"Welcome to Casvisor website!","date":"2024-04-08T11:08:16.000Z","formattedDate":"2024\u5e744\u67088\u65e5","tags":[{"label":"casvisor","permalink":"/zh/blog/tags/casvisor"}],"readingTime":0.02,"hasTruncateMarker":false,"authors":[{"name":"Casbin Team","url":"https://github.com/casbin","imageURL":"https://avatars.githubusercontent.com/casbin"}],"frontMatter":{"title":"Welcome","author":"Casbin Team","author_url":"https://github.com/casbin","author_image_url":"https://avatars.githubusercontent.com/casbin","tags":["casvisor"]}},"content":"Welcome to Casvisor website!"}]}')}}]); \ No newline at end of file diff --git a/zh/assets/js/a951fea5.e3ffb6eb.js b/zh/assets/js/a951fea5.2c5e74cd.js similarity index 98% rename from zh/assets/js/a951fea5.e3ffb6eb.js rename to zh/assets/js/a951fea5.2c5e74cd.js index 912973f..b2b8eb5 100644 --- a/zh/assets/js/a951fea5.e3ffb6eb.js +++ b/zh/assets/js/a951fea5.2c5e74cd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/zh/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/zh/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[432],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/zh/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/zh/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh/assets/js/acf87bcd.e057f9a3.js b/zh/assets/js/acf87bcd.09edd8ae.js similarity index 98% rename from zh/assets/js/acf87bcd.e057f9a3.js rename to zh/assets/js/acf87bcd.09edd8ae.js index cd9662a..e521e5f 100644 --- a/zh/assets/js/acf87bcd.e057f9a3.js +++ b/zh/assets/js/acf87bcd.09edd8ae.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/zh/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T02:45:07.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/zh/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[646],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),b=o,f=p["".concat(s,".").concat(b)]||p[b]||m[b]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=b;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]},c=void 0,i={permalink:"/zh/blog/welcome",editUrl:"https://github.com/casvisor/casvisor-website/edit/master/blog/welcome.md",source:"@site/blog/welcome.md",title:"Welcome",description:"Welcome to Casvisor website!",date:"2024-04-08T11:08:16.000Z",formattedDate:"2024\u5e744\u67088\u65e5",tags:[{label:"casvisor",permalink:"/zh/blog/tags/casvisor"}],readingTime:.02,hasTruncateMarker:!1,authors:[{name:"Casbin Team",url:"https://github.com/casbin",imageURL:"https://avatars.githubusercontent.com/casbin"}],frontMatter:{title:"Welcome",author:"Casbin Team",author_url:"https://github.com/casbin",author_image_url:"https://avatars.githubusercontent.com/casbin",tags:["casvisor"]}},s={authorsImageUrls:[void 0]},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to Casvisor website!"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/zh/assets/js/d4e54de2.0a0eebf8.js b/zh/assets/js/d4e54de2.0a0eebf8.js new file mode 100644 index 0000000..1e18ca8 --- /dev/null +++ b/zh/assets/js/d4e54de2.0a0eebf8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>g});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,g=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(g,i(i({ref:t},d),{},{components:a})):n.createElement(g,i({ref:t},d))}));function g(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/zh/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/zh/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/zh/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Nginx",id:"nginx",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h4",{id:"nginx"},"Nginx"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you use nginx as a reverse proxy, you need to add the following configuration to the nginx configuration file:"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'location / {\n *** your configuration ***\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n}\n')),(0,o.kt)("p",{parentName:"admonition"},"Because Casvisor uses websocket to communicate with guacd.")),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/d4e54de2.c105dca3.js b/zh/assets/js/d4e54de2.c105dca3.js deleted file mode 100644 index 1024d13..0000000 --- a/zh/assets/js/d4e54de2.c105dca3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcasvisor_website=self.webpackChunkcasvisor_website||[]).push([[583],{3905:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=c(a),m=o,k=p["".concat(s,".").concat(m)]||p[m]||u[m]||r;return a?n.createElement(k,i(i({ref:t},d),{},{components:a})):n.createElement(k,i({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=a.length,i=new Array(r);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(7462),o=(a(7294),a(3905));const r={title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},i=void 0,l={unversionedId:"basic/installation",id:"basic/installation",title:"Server Installation",description:"Install and configure Casvisor server.",source:"@site/docs/basic/installation.md",sourceDirName:"basic",slug:"/basic/installation",permalink:"/zh/docs/basic/installation",draft:!1,editUrl:"https://github.com/casvisor/casvisor-website/edit/master/docs/basic/installation.md",tags:[],version:"current",frontMatter:{title:"Server Installation",description:"Install and configure Casvisor server.",keywords:["Casvisor server","installation","configuration"],authors:["leo220yuyaodog"]},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/zh/docs/overview"},next:{title:"(Optional) Try with Docker",permalink:"/zh/docs/basic/try-with-docker"}},s={},c=[{value:"Prerequisite",id:"prerequisite",level:2},{value:"Casdoor",id:"casdoor",level:3},{value:"Create an organization",id:"create-an-organization",level:4},{value:"Create an application",id:"create-an-application",level:4},{value:"guacd",id:"guacd",level:3},{value:"Download",id:"download",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Backend",id:"backend",level:3},{value:"Database",id:"database",level:4},{value:"Connect Casdoor",id:"connect-casdoor",level:4},{value:"Frontend",id:"frontend",level:3},{value:"Run",id:"run",level:2},{value:"Production",id:"production",level:3},{value:"Build frontend",id:"build-frontend",level:4},{value:"Run backend",id:"run-backend",level:4},{value:"Development",id:"development",level:3},{value:"Run frontend",id:"run-frontend",level:4},{value:"Run backend",id:"run-backend-1",level:4}],d={toc:c},p="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"prerequisite"},"Prerequisite"),(0,o.kt)("p",null,"Casvisor server uses Casdoor as the authentication and authorization system. So you need to install Casdoor first. If\nyou haven't installed Casdoor, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://casdoor.org/docs/basic/server-installation"},"Casdoor Installation"),"."),(0,o.kt)("h3",{id:"casdoor"},"Casdoor"),(0,o.kt)("p",null,"You have installed Casdoor, now you need to do some necessary configuration in Casdoor in order to use Casvisor."),(0,o.kt)("h4",{id:"create-an-organization"},"Create an organization"),(0,o.kt)("p",null,"First, you need to create an organization (Except for the ",(0,o.kt)("inlineCode",{parentName:"p"},"build-in"),") in Casdoor. The organization page is at ",(0,o.kt)("strong",{parentName:"p"},"User Management -> Organizations"),".\nAnd you can create an organization by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create organization",src:a(372).Z,width:"1916",height:"976"})),(0,o.kt)("h4",{id:"create-an-application"},"Create an application"),(0,o.kt)("p",null,"You need to create an application for Casvisor in Casdoor. The application page is at ",(0,o.kt)("strong",{parentName:"p"},"Identity -> Applications"),". And you\ncan create an application by clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"add")," button."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"create application",src:a(4078).Z,width:"1898",height:"961"})),(0,o.kt)("p",null,"Required fields:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Home"),": The host of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Ognization"),": The organization you created in the previous step."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"Callback URLs"),": The callback URL of Casvisor server, e.g. ",(0,o.kt)("inlineCode",{parentName:"li"},"http://localhost:16001/callback"),". You can add multiple\ncallback URLs by clicking the ",(0,o.kt)("inlineCode",{parentName:"li"},"add")," button. These are the urls that is allowed to be redirected after login.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"application edit",src:a(5107).Z,width:"1153",height:"861"})),(0,o.kt)("h3",{id:"guacd"},"guacd"),(0,o.kt)("p",null,"Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install\nguacamole-server first. If you haven't installed guacamole-server, please refer to ",(0,o.kt)("a",{parentName:"p",href:"https://guacamole.apache.org/doc/gug/installing-guacamole.html"},"guacamole-server Installation"),"."),(0,o.kt)("p",null,"You can also run guacd in docker with the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"docker run -d --name guacd -p 4822:4822 guacamole/guacd\n")),(0,o.kt)("h2",{id:"download"},"Download"),(0,o.kt)("p",null,"The source code of Casvisor is hosted on GitHub: ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"),". Both the Go backend code and React frontend code are contained in a single repository."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Name"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"),(0,o.kt)("th",{parentName:"tr",align:null},"Language"),(0,o.kt)("th",{parentName:"tr",align:null},"Source code"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Frontend"),(0,o.kt)("td",{parentName:"tr",align:null},"Web frontend UI for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"JavaScript + React"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor/tree/master/web"},"https://github.com/casvisor/casvisor/tree/master/web"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Backend"),(0,o.kt)("td",{parentName:"tr",align:null},"RESTful API backend for Casdoor"),(0,o.kt)("td",{parentName:"tr",align:null},"Golang + Beego + XORM"),(0,o.kt)("td",{parentName:"tr",align:null},(0,o.kt)("a",{parentName:"td",href:"https://github.com/casvisor/casvisor"},"https://github.com/casvisor/casvisor"))))),(0,o.kt)("p",null,"Casvisor supports ",(0,o.kt)("inlineCode",{parentName:"p"},"Go Modules"),". To download the code, simply clone the code using git:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git clone https://github.com/casvisor/casvisor\n")),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("h3",{id:"backend"},"Backend"),(0,o.kt)("p",null,"The configuration file of Casvisor backend located at ",(0,o.kt)("inlineCode",{parentName:"p"},"conf/app.conf"),". You need to modify the following fields:"),(0,o.kt)("h4",{id:"database"},"Database"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"dataSourceName")," to your own database connection string. Casvisor will create a database named ",(0,o.kt)("inlineCode",{parentName:"p"},"casvisor")," if it doesn't exist."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},"driverName = mysql\ndataSourceName = root:123456@tcp(localhost:3306)/\ndbName = casvisor\n")),(0,o.kt)("h4",{id:"connect-casdoor"},"Connect Casdoor"),(0,o.kt)("p",null,"Modify ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorEndpoint"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorOrganization")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"casdoorApplication")," to your own Casdoor configuration.\nYou can get the ",(0,o.kt)("inlineCode",{parentName:"p"},"clientID")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"clientSecret")," from the application page that you created in the previous step."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-ini"},'casdoorEndpoint = http://localhost:8000\nclientId = c34fdf145f41313727a8\nclientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832\ncasdoorOrganization = "casbin"\ncasdoorApplication = "app-casvisor"\n')),(0,o.kt)("h3",{id:"frontend"},"Frontend"),(0,o.kt)("p",null,"In ",(0,o.kt)("inlineCode",{parentName:"p"},"web/src/conf.js"),", you need to modify the following fields:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-javascript"},' export const AuthConfig = {\n serverUrl: "http://localhost:8000",\n clientId: "c34fdf145f4131b727a8",\n appName: "app-casvisor",\n organizationName: "casbin",\n redirectPath: "/callback",\n};\n')),(0,o.kt)("h2",{id:"run"},"Run"),(0,o.kt)("p",null,"Before running Casvisor, make sure Casdoor is running."),(0,o.kt)("h3",{id:"production"},"Production"),(0,o.kt)("p",null,"In production, you need to build the frontend code first, then run the backend code."),(0,o.kt)("h4",{id:"build-frontend"},"Build frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn build\n")),(0,o.kt)("p",null,"After building successfully, the frontend bundle will be generated in ",(0,o.kt)("inlineCode",{parentName:"p"},"web/build")," directory."),(0,o.kt)("h4",{id:"run-backend"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit backend server at ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:19000"},"http://localhost:19000"),"."),(0,o.kt)("h3",{id:"development"},"Development"),(0,o.kt)("p",null,"In development, you need to run the frontend code and backend code at the same time."),(0,o.kt)("h4",{id:"run-frontend"},"Run frontend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"cd web\nyarn install\nyarn start\n")),(0,o.kt)("h4",{id:"run-backend-1"},"Run backend"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"go build\n")),(0,o.kt)("p",null,"Visit frontend server ",(0,o.kt)("a",{parentName:"p",href:"http://localhost:16001"},"http://localhost:16001"),"."))}u.isMDXComponent=!0},4078:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application-4e6390480ceae235dbc7913f1c68c8be.png"},5107:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_application_edit-4e415510dcbb00ba6342c558f76c29f0.png"},372:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/installtion_organization-cd98db6b989aff2c57d870cbd0aced85.png"}}]); \ No newline at end of file diff --git a/zh/assets/js/runtime~main.5380b673.js b/zh/assets/js/runtime~main.46c5e6eb.js similarity index 57% rename from zh/assets/js/runtime~main.5380b673.js rename to zh/assets/js/runtime~main.46c5e6eb.js index 718d3b3..6be58af 100644 --- a/zh/assets/js/runtime~main.5380b673.js +++ b/zh/assets/js/runtime~main.46c5e6eb.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,c={},f={};function d(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={exports:{}};return c[e].call(r.exports,r,r.exports,d),r.exports}d.m=c,e=[],d.O=(t,r,a,o)=>{if(!r){var c=1/0;for(i=0;i=o)&&Object.keys(d.O).every((e=>d.O[e](r[n])))?r.splice(n--,1):(f=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[r,a,o]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var c={};t=t||[null,r({}),r([]),r(r)];for(var f=2&a&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>c[t]=()=>e[t]));return c.default=()=>e,d.d(o,c),o},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,r)=>(d.f[r](e,t),t)),[])),d.u=e=>"assets/js/"+({13:"01a85c17",45:"927d70e2",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",166:"14c8e628",195:"c4f5d8e4",217:"1dba9094",310:"ea47aeb2",357:"f781f909",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",595:"b4214534",608:"9e4087bc",610:"6875c492",646:"acf87bcd",718:"981388e3",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",800:"3a332aed",817:"14eb3368",864:"8dd2e619",909:"bfb16af5",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",45:"837862cf",48:"63c544ab",53:"699d1f07",68:"4490b5c1",81:"410bb843",89:"1656bb5b",103:"e5273bec",151:"e3c584c6",166:"c17b65a3",195:"5f072758",217:"b7d5aef2",310:"6566db8a",316:"81ede736",357:"77319bdf",391:"0946f115",432:"e3ffb6eb",487:"c64f1a92",514:"bc0c2ac7",535:"f114ea8c",562:"1db640fe",583:"c105dca3",594:"0b9b45b6",595:"c9e2fede",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"e057f9a3",718:"f1b39b92",724:"1f48a7fd",740:"70ede3d4",776:"1165e7f2",778:"172df872",780:"de6153af",800:"1c64ef1b",817:"59925caf",864:"5528c9b9",909:"d4cf9226",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="casvisor-website:",d.l=(e,t,r,c)=>{if(a[e])a[e].push(t);else{var f,n;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(l);var o=a[e];if(delete a[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach((e=>e(r))),t)return t(r)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=s.bind(null,f.onerror),f.onload=s.bind(null,f.onload),n&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/zh/",d.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","927d70e2":"45","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151","14c8e628":"166",c4f5d8e4:"195","1dba9094":"217",ea47aeb2:"310",f781f909:"357","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594",b4214534:"595","9e4087bc":"608","6875c492":"610",acf87bcd:"646","981388e3":"718","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","3a332aed":"800","14eb3368":"817","8dd2e619":"864",bfb16af5:"909"}[e]||e,d.p+d.u(e)},(()=>{var e={303:0,532:0};d.f.j=(t,r)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var c=d.p+d.u(t),f=new Error;d.l(c,(r=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+o+": "+c+")",f.name="ChunkLoadError",f.type=o,f.request=c,a[1](f)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,c=r[0],f=r[1],n=r[2],b=0;if(c.some((t=>0!==e[t]))){for(a in f)d.o(f,a)&&(d.m[a]=f[a]);if(n)var i=n(d)}for(t&&t(r);b{"use strict";var e,t,r,a,o,f={},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={exports:{}};return f[e].call(r.exports,r,r.exports,d),r.exports}d.m=f,e=[],d.O=(t,r,a,o)=>{if(!r){var f=1/0;for(i=0;i=o)&&Object.keys(d.O).every((e=>d.O[e](r[n])))?r.splice(n--,1):(c=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[r,a,o]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var f={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>f[t]=()=>e[t]));return f.default=()=>e,d.d(o,f),o},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,r)=>(d.f[r](e,t),t)),[])),d.u=e=>"assets/js/"+({13:"01a85c17",45:"927d70e2",53:"935f2afb",68:"9001695a",81:"18891827",89:"a6aa9e1f",103:"ccc49370",151:"7190cbd8",166:"14c8e628",195:"c4f5d8e4",217:"1dba9094",310:"ea47aeb2",357:"f781f909",391:"290cc788",432:"a951fea5",514:"1be78505",535:"814f3328",562:"a0e59008",583:"d4e54de2",594:"72ea323d",595:"b4214534",608:"9e4087bc",610:"6875c492",646:"acf87bcd",718:"981388e3",740:"7e37206e",776:"81130aff",778:"49d2d5a5",780:"596abbce",800:"3a332aed",817:"14eb3368",864:"8dd2e619",909:"bfb16af5",918:"17896441"}[e]||e)+"."+{13:"3186fb4b",45:"971560b2",48:"63c544ab",53:"699d1f07",68:"4490b5c1",81:"410bb843",89:"1656bb5b",103:"e5273bec",151:"e3c584c6",166:"c17b65a3",195:"5f072758",217:"b7d5aef2",310:"6566db8a",316:"81ede736",357:"77319bdf",391:"0946f115",432:"2c5e74cd",487:"c64f1a92",514:"bc0c2ac7",535:"f114ea8c",562:"1db640fe",583:"0a0eebf8",594:"0b9b45b6",595:"c9e2fede",608:"f0c69295",610:"419d4bd6",628:"2fe50af1",646:"09edd8ae",718:"f1b39b92",724:"1f48a7fd",740:"70ede3d4",776:"1165e7f2",778:"172df872",780:"de6153af",800:"1c64ef1b",817:"59925caf",864:"5528c9b9",909:"d4cf9226",918:"d7957afb",954:"23f9c7ee",972:"ed6443c5"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="casvisor-website:",d.l=(e,t,r,f)=>{if(a[e])a[e].push(t);else{var c,n;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i{c.onerror=c.onload=null,clearTimeout(l);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=s.bind(null,c.onerror),c.onload=s.bind(null,c.onload),n&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/zh/",d.gca=function(e){return e={17896441:"918",18891827:"81","01a85c17":"13","927d70e2":"45","935f2afb":"53","9001695a":"68",a6aa9e1f:"89",ccc49370:"103","7190cbd8":"151","14c8e628":"166",c4f5d8e4:"195","1dba9094":"217",ea47aeb2:"310",f781f909:"357","290cc788":"391",a951fea5:"432","1be78505":"514","814f3328":"535",a0e59008:"562",d4e54de2:"583","72ea323d":"594",b4214534:"595","9e4087bc":"608","6875c492":"610",acf87bcd:"646","981388e3":"718","7e37206e":"740","81130aff":"776","49d2d5a5":"778","596abbce":"780","3a332aed":"800","14eb3368":"817","8dd2e619":"864",bfb16af5:"909"}[e]||e,d.p+d.u(e)},(()=>{var e={303:0,532:0};d.f.j=(t,r)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var f=d.p+d.u(t),c=new Error;d.l(f,(r=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+f+")",c.name="ChunkLoadError",c.type=o,c.request=f,a[1](c)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,f=r[0],c=r[1],n=r[2],b=0;if(f.some((t=>0!==e[t]))){for(a in c)d.o(c,a)&&(d.m[a]=c[a]);if(n)var i=n(d)}for(t&&t(r);b!function(t,h,e,j,s,n){t.hj=t.hj||function(){(t.hj.q=t.hj.q||[]).push(arguments)},t._hjSettings={hjid:3620236,hjsv:6},s=h.getElementsByTagName("head")[0],(n=h.createElement("script")).async=1,n.src="https://static.hotjar.com/c/hotjar-"+t._hjSettings.hjid+".js?sv="+t._hjSettings.hjsv,s.appendChild(n)}(window,document) - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/blog/atom.xml b/zh/blog/atom.xml index cfac9de..3d897e9 100644 --- a/zh/blog/atom.xml +++ b/zh/blog/atom.xml @@ -2,7 +2,7 @@ https://casvisor.org/zh/blog Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z https://github.com/jpmonette/feed Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform Blog @@ -11,7 +11,7 @@ <![CDATA[Welcome]]> https://casvisor.org/zh/blog/welcome - 2024-04-08T02:45:07.000Z + 2024-04-08T11:08:16.000Z Welcome to Casvisor website!

]]>
diff --git a/zh/blog/index.html b/zh/blog/index.html index d83cd19..ec8e75d 100644 --- a/zh/blog/index.html +++ b/zh/blog/index.html @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/zh/blog/welcome/index.html b/zh/blog/welcome/index.html index 73256dc..ff41a47 100644 --- a/zh/blog/welcome/index.html +++ b/zh/blog/welcome/index.html @@ -3,7 +3,7 @@ -Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform +Welcome | Casvisor · An open-source security log auditing & RDP, VNC, SSH and databases management bastion platform @@ -12,17 +12,17 @@ - +
-
- + \ No newline at end of file diff --git a/zh/docs/asset/intranet/index.html b/zh/docs/asset/intranet/index.html index ceb6e63..0505b54 100644 --- a/zh/docs/asset/intranet/index.html +++ b/zh/docs/asset/intranet/index.html @@ -12,7 +12,7 @@ - + @@ -24,7 +24,7 @@ - + \ No newline at end of file diff --git a/zh/docs/asset/overview/index.html b/zh/docs/asset/overview/index.html index a5aa9bf..bc6cc4a 100644 --- a/zh/docs/asset/overview/index.html +++ b/zh/docs/asset/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/docs/asset/rdp/index.html b/zh/docs/asset/rdp/index.html index 07a7b12..64e78b3 100644 --- a/zh/docs/asset/rdp/index.html +++ b/zh/docs/asset/rdp/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@ - + \ No newline at end of file diff --git a/zh/docs/asset/vnc/index.html b/zh/docs/asset/vnc/index.html index 01a00bf..fa18f9e 100644 --- a/zh/docs/asset/vnc/index.html +++ b/zh/docs/asset/vnc/index.html @@ -12,7 +12,7 @@ - + @@ -23,7 +23,7 @@ - + \ No newline at end of file diff --git a/zh/docs/basic/installation/index.html b/zh/docs/basic/installation/index.html index b62e2de..6061093 100644 --- a/zh/docs/basic/installation/index.html +++ b/zh/docs/basic/installation/index.html @@ -12,7 +12,7 @@ - + @@ -23,12 +23,12 @@ can create an application by clicking the add button.

create application

Required fields:

  1. Home: The host of Casvisor server, e.g. http://localhost:16001.
  2. Ognization: The organization you created in the previous step.
  3. Callback URLs: The callback URL of Casvisor server, e.g. http://localhost:16001/callback. You can add multiple callback URLs by clicking the add button. These are the urls that is allowed to be redirected after login.

application edit

guacd

Casvisor uses guacamole-server to provide remote desktop access. If you want to use this feature, you need to install guacamole-server first. If you haven't installed guacamole-server, please refer to guacamole-server Installation.

You can also run guacd in docker with the following command:

docker run -d --name guacd -p 4822:4822 guacamole/guacd

Download

The source code of Casvisor is hosted on GitHub: https://github.com/casvisor/casvisor. Both the Go backend code and React frontend code are contained in a single repository.

NameDescriptionLanguageSource code
FrontendWeb frontend UI for CasdoorJavaScript + Reacthttps://github.com/casvisor/casvisor/tree/master/web
BackendRESTful API backend for CasdoorGolang + Beego + XORMhttps://github.com/casvisor/casvisor

Casvisor supports Go Modules. To download the code, simply clone the code using git:

git clone https://github.com/casvisor/casvisor

Configuration

Backend

The configuration file of Casvisor backend located at conf/app.conf. You need to modify the following fields:

Database

Modify dataSourceName to your own database connection string. Casvisor will create a database named casvisor if it doesn't exist.

driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casvisor

Connect Casdoor

Modify casdoorEndpoint, clientID, clientSecret, casdoorOrganization and casdoorApplication to your own Casdoor configuration. -You can get the clientID and clientSecret from the application page that you created in the previous step.

casdoorEndpoint = http://localhost:8000
clientId = c34fdf145f41313727a8
clientSecret = 615c503d4552d24a40360cf908b6d17e3b7f8832
casdoorOrganization = "casbin"
casdoorApplication = "app-casvisor"

Frontend

In web/src/conf.js, you need to modify the following fields:

    export const AuthConfig = {
serverUrl: "http://localhost:8000",
clientId: "c34fdf145f4131b727a8",
appName: "app-casvisor",
organizationName: "casbin",
redirectPath: "/callback",
};

Run

Before running Casvisor, make sure Casdoor is running.

Production

In production, you need to build the frontend code first, then run the backend code.

Build frontend

cd web
yarn install
yarn build

After building successfully, the frontend bundle will be generated in web/build directory.

Run backend

go build

Visit backend server at http://localhost:19000.

Development

In development, you need to run the frontend code and backend code at the same time.

Run frontend

cd web
yarn install
yarn start

Run backend

go build

Visit frontend server http://localhost:16001.


- + \ No newline at end of file diff --git a/zh/docs/basic/try-with-docker/index.html b/zh/docs/basic/try-with-docker/index.html index 856b81d..75fe3a2 100644 --- a/zh/docs/basic/try-with-docker/index.html +++ b/zh/docs/basic/try-with-docker/index.html @@ -12,7 +12,7 @@ - + @@ -26,7 +26,7 @@
- + \ No newline at end of file diff --git a/zh/docs/category/assets/index.html b/zh/docs/category/assets/index.html index 914f4e5..ef8a064 100644 --- a/zh/docs/category/assets/index.html +++ b/zh/docs/category/assets/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/docs/category/the-basics/index.html b/zh/docs/category/the-basics/index.html index f888ec0..b00ab8d 100644 --- a/zh/docs/category/the-basics/index.html +++ b/zh/docs/category/the-basics/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/docs/overview/index.html b/zh/docs/overview/index.html index bcf6a46..74a6b23 100644 --- a/zh/docs/overview/index.html +++ b/zh/docs/overview/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/help/index.html b/zh/help/index.html index 6ac6c36..5fa84c4 100644 --- a/zh/help/index.html +++ b/zh/help/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/index.html b/zh/index.html index 51bc092..f1b8695 100644 --- a/zh/index.html +++ b/zh/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/pdf/index.html b/zh/pdf/index.html index c7f6e65..ef13871 100644 --- a/zh/pdf/index.html +++ b/zh/pdf/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file diff --git a/zh/users/index.html b/zh/users/index.html index 9787b76..f8f2dce 100644 --- a/zh/users/index.html +++ b/zh/users/index.html @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + \ No newline at end of file