Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
diff --git a/assets/js/1fb83efa.8b0caeb2.js b/assets/js/1fb83efa.8b0caeb2.js
new file mode 100644
index 000000000..fadd42c63
--- /dev/null
+++ b/assets/js/1fb83efa.8b0caeb2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[91],{900:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>d});var o=t(4848),i=t(8453);const s={sidebar_position:2,pagination_next:null,pagination_prev:null,title:"Docker Setup"},r="Docker Setup Instructions",l={id:"Install/Docker",title:"Docker Setup",description:"Tombolo can be deployed quickly by following a few simple steps and running a couple of Docker commands. With Docker, there are fewer prerequisites, and you don\u2019t need to worry about installing multiple applications or having a specific operating system on your machine. This makes Docker the preferred packaging method for production, as it ensures consistency across environments, enhances portability, and simplifies the deployment process.",source:"@site/docs/Install/Docker.md",sourceDirName:"Install",slug:"/Install/Docker",permalink:"/Tombolo/docs/Install/Docker",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,pagination_next:null,pagination_prev:null,title:"Docker Setup"},sidebar:"tutorialSidebar"},c={},d=[{value:"System Requirements and Prerequisites",id:"system-requirements-and-prerequisites",level:3},{value:"Step 1- Clone the Repository",id:"step-1--clone-the-repository",level:3},{value:"Step 2 - Update Configuration Files",id:"step-2---update-configuration-files",level:3},{value:"Step 3 - Configure Nginx",id:"step-3---configure-nginx",level:3},{value:"Step 4 - Whitelist Clusters",id:"step-4---whitelist-clusters",level:3},{value:"Step 5 - Set Up Docker Compose",id:"step-5---set-up-docker-compose",level:3},{value:"Step 6 - Build and Start the Application",id:"step-6---build-and-start-the-application",level:3}];function a(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"docker-setup-instructions",children:"Docker Setup Instructions"}),"\n",(0,o.jsx)(n.p,{children:"Tombolo can be deployed quickly by following a few simple steps and running a couple of Docker commands. With Docker, there are fewer prerequisites, and you don\u2019t need to worry about installing multiple applications or having a specific operating system on your machine. This makes Docker the preferred packaging method for production, as it ensures consistency across environments, enhances portability, and simplifies the deployment process."}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"system-requirements-and-prerequisites",children:"System Requirements and Prerequisites"}),"\n",(0,o.jsx)(n.p,{children:"Before setting up Tombolo with Docker, ensure your system meets the following requirements:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"CPU"}),": 2+ cores"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"RAM"}),": 4GB+ (8GB recommended for optimal performance)"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Storage"}),": At least 10GB of free disk space"]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Docker"}),": Ensure Docker is installed and running on your machine, preferably the latest version. You can download the most recent version from ",(0,o.jsx)(n.a,{href:"https://www.docker.com/get-started",children:"Docker's official site"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Git"}),": Preferably latest version"]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-1--clone-the-repository",children:"Step 1- Clone the Repository"}),"\n",(0,o.jsx)(n.p,{children:"To get started, clone the Tombolo repository using the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"git clone https://github.com/hpcc-systems/Tombolo.git\n"})}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-2---update-configuration-files",children:"Step 2 - Update Configuration Files"}),"\n",(0,o.jsxs)(n.p,{children:["There are two configuration files that need to be modified. The one at the root of the project is for the backend service, and the one inside ",(0,o.jsx)(n.code,{children:"client-react.js"})," is for the front-end React application."]}),"\n",(0,o.jsx)("div",{class:"important_block",children:(0,o.jsxs)(n.blockquote,{children:["\n",(0,o.jsxs)(n.p,{children:["Please carefully review each variable before making any changes. Detailed explanations can be found in the ",(0,o.jsx)(n.a,{href:"./Configurations",children:"Configurations"}),"."]}),"\n"]})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Navigate to ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo"})," and create a new ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Copy all the contents from ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo/.env.sample"})," and paste them into the newly created ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo/client-reactjs"})," and create a new ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Copy all the contents from ",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo/client-reactjs/.env.sample"})," and paste them into the newly created ",(0,o.jsx)(n.code,{children:".env"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Review both ",(0,o.jsx)(n.code,{children:".env"})," files and update variables if necessary. Use the ",(0,o.jsx)(n.a,{href:"./Configurations",children:"Configurations"})," documentation as a guide."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-3---configure-nginx",children:"Step 3 - Configure Nginx"}),"\n",(0,o.jsx)(n.p,{children:"Nginx is required to serve the frontend and reverse proxy requests to the backend. You can configure Nginx with or without SSL. Running without SSL is only recommended if you are configuring for testing purposes."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Create a new file named ",(0,o.jsx)(n.code,{children:"nginx.conf.template"})," inside the ",(0,o.jsx)(n.code,{children:"/client-reactjs/nginx/conf.d"})," directory."]}),"\n",(0,o.jsxs)(n.li,{children:["If you're using SSL, copy the content from ",(0,o.jsx)(n.code,{children:"nginx.conf.template-ssl"})," and paste it into ",(0,o.jsx)(n.code,{children:"nginx.conf.template"}),". If you're not using SSL, copy the content from ",(0,o.jsx)(n.code,{children:"nginx.conf.template-no-ssl"})," and paste it into ",(0,o.jsx)(n.code,{children:"nginx.conf.template"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-4---whitelist-clusters",children:"Step 4 - Whitelist Clusters"}),"\n",(0,o.jsx)(n.p,{children:"Clusters need to be whitelisted to allow Tombolo to communicate with them. Any clusters that will be used in Tombolo must be whitelisted for security reasons."}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Inside the ",(0,o.jsx)(n.code,{children:"/server"})," directory, create a new file called ",(0,o.jsx)(n.code,{children:"cluster-whitelist.js"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Use ",(0,o.jsx)(n.code,{children:"cluster-whitelist.sample.js"})," as a template to add the clusters that you would like to whitelist."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-5---set-up-docker-compose",children:"Step 5 - Set Up Docker Compose"}),"\n",(0,o.jsxs)(n.p,{children:["Docker Compose is used to define and run the multi-container Docker applications required for this project. In this setup, you will create three services: ",(0,o.jsx)(n.code,{children:"web"}),", ",(0,o.jsx)(n.code,{children:"node"}),", and ",(0,o.jsx)(n.code,{children:"mysql_db"}),"."]}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["In the project root directory (",(0,o.jsx)(n.code,{children:"/Tombolo/Tombolo"}),"), create a new file called ",(0,o.jsx)(n.code,{children:"docker-compose.yml"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Copy everything from ",(0,o.jsx)(n.code,{children:"docker-compose-sample"})," and paste it into the new file you just created. Update any configurations if necessary."]}),"\n"]}),"\n",(0,o.jsx)(n.hr,{}),"\n",(0,o.jsx)(n.h3,{id:"step-6---build-and-start-the-application",children:"Step 6 - Build and Start the Application"}),"\n",(0,o.jsx)(n.p,{children:"To build and start the application using Docker, run the following commands. The first command builds the application image, while the second command starts the application in detached mode, allowing it to run in the background."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:"docker-compose build\ndocker-compose up -d\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Once the containers have started successfully, the application will be accessible at: ",(0,o.jsx)(n.code,{children:"http://:"})]}),"\n",(0,o.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>l});var o=t(6540);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1fb83efa.b1ac8c51.js b/assets/js/1fb83efa.b1ac8c51.js
deleted file mode 100644
index ddabf2dfa..000000000
--- a/assets/js/1fb83efa.b1ac8c51.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[91],{900:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var o=n(4848),r=n(8453);const s={sidebar_position:2,pagination_prev:null,pagination_next:null},i="Docker Setup",a={id:"Install/Docker",title:"Docker Setup",description:"Step 1 - Recommended and Required Software",source:"@site/docs/Install/Docker.md",sourceDirName:"Install",slug:"/Install/Docker",permalink:"/Tombolo/docs/Install/Docker",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,pagination_prev:null,pagination_next:null},sidebar:"tutorialSidebar"},c={},d=[{value:"Step 1 - Recommended and Required Software",id:"step-1---recommended-and-required-software",level:2}];function l(e){const t={h1:"h1",h2:"h2",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"docker-setup",children:"Docker Setup"}),"\n",(0,o.jsx)(t.h2,{id:"step-1---recommended-and-required-software",children:"Step 1 - Recommended and Required Software"})]})}function u(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>a});var o=n(6540);const r={},s=o.createContext(r);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/935f2afb.2e8f363b.js b/assets/js/935f2afb.2e8f363b.js
deleted file mode 100644
index d995d5811..000000000
--- a/assets/js/935f2afb.2e8f363b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Installation & Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Local Setup","href":"/Tombolo/docs/Install/Local","docId":"Install/Local","unlisted":false},{"type":"link","label":"Docker Setup","href":"/Tombolo/docs/Install/Docker","docId":"Install/Docker","unlisted":false},{"type":"link","label":"Configurations","href":"/Tombolo/docs/Install/Env_config","docId":"Install/Env_config","unlisted":false},{"type":"link","label":"Uninstall Instructions","href":"/Tombolo/docs/Install/Uninstall","docId":"Install/Uninstall","unlisted":false}],"href":"/Tombolo/docs/category/installation--configuration"},{"type":"category","label":"User Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Applications","href":"/Tombolo/docs/User-Guides/application","docId":"User-Guides/application","unlisted":false},{"type":"link","label":"Assets","href":"/Tombolo/docs/User-Guides/assets","docId":"User-Guides/assets","unlisted":false},{"type":"link","label":"Clusters","href":"/Tombolo/docs/User-Guides/cluster","docId":"User-Guides/cluster","unlisted":false},{"type":"link","label":"Dashboards","href":"/Tombolo/docs/User-Guides/dashboards","docId":"User-Guides/dashboards","unlisted":false},{"type":"link","label":"Github","href":"/Tombolo/docs/User-Guides/github","docId":"User-Guides/github","unlisted":false},{"type":"link","label":"Monitoring","href":"/Tombolo/docs/User-Guides/monitoring","docId":"User-Guides/monitoring","unlisted":false},{"type":"link","label":"MS Teams Webhooks","href":"/Tombolo/docs/User-Guides/teams-webhook","docId":"User-Guides/teams-webhook","unlisted":false},{"type":"link","label":"User Interface","href":"/Tombolo/docs/User-Guides/user-interface","docId":"User-Guides/user-interface","unlisted":false},{"type":"link","label":"Wildcards","href":"/Tombolo/docs/User-Guides/Wildcards","docId":"User-Guides/Wildcards","unlisted":false},{"type":"link","label":"Workflows","href":"/Tombolo/docs/User-Guides/workflows","docId":"User-Guides/workflows","unlisted":false}],"href":"/Tombolo/docs/category/user-guides"},{"type":"category","label":"Developer Resources","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Integrations","href":"/Tombolo/docs/Developer/Integrations","docId":"Developer/Integrations","unlisted":false}],"href":"/Tombolo/docs/category/developer-resources"}]},"docs":{"Developer/Integrations":{"id":"Developer/Integrations","title":"Integrations","description":"Our Integration Guides are currently under construction and will be available soon.","sidebar":"tutorialSidebar"},"Install/Docker":{"id":"Install/Docker","title":"Docker Setup","description":"Step 1 - Recommended and Required Software","sidebar":"tutorialSidebar"},"Install/Env_config":{"id":"Install/Env_config","title":"Configurations","description":"To get Tombolo up and running, you\'ll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply rename these sample files to .env and adjust the values to suit your specific environment.","sidebar":"tutorialSidebar"},"Install/Local":{"id":"Install/Local","title":"Local Setup","description":"Local installation requires a few dependencies to be installed directly on your machine. This is the best choice for developers who want to contribute to the project, or develop integrations to customize their instance. If you intend to use this installation for production purposes, or do not want to configure your own system, we recommend a containerized installation using our Docker Installation Guide instead.","sidebar":"tutorialSidebar"},"Install/Uninstall":{"id":"Install/Uninstall","title":"Uninstall Instructions","description":"There are three potential steps that need to be completed in order to remove Tombolo from your system. It is easiest to follow the order given here.","sidebar":"tutorialSidebar"},"User-Guides/application":{"id":"User-Guides/application","title":"Applications","description":"Applications provide a way to seperate groups of data and settings inside of Tombolo. Each application has its own set of Assets, Dataflows, Jobs, Monitorings, and Notifications as well as administration settings. You can switch application instances at any time by utilizing the selector in the top left corner of the navigation bar, by the Tombolo logo.","sidebar":"tutorialSidebar"},"User-Guides/assets":{"id":"User-Guides/assets","title":"Assets","description":"The \\"Add Asset\\" feature in Tombolo allows you to import assets and their metadata from an HPCC cluster. You can","sidebar":"tutorialSidebar"},"User-Guides/cluster":{"id":"User-Guides/cluster","title":"Clusters","description":"Tombolo can speak directly to HPCC clusters to run ECL code, monitor jobs, files, or cluster usage states, and schedule user-defined dataflows.","sidebar":"tutorialSidebar"},"User-Guides/dashboards":{"id":"User-Guides/dashboards","title":"Dashboards","description":"Our Dashboards give great insight into how you and your teams tasks are being handled. Tombolo currently offers two dashboards","sidebar":"tutorialSidebar"},"User-Guides/github":{"id":"User-Guides/github","title":"Github","description":"Adding a Github Repository will allow files in that repository to be utilized in Dataflows. Tombolo can utilize ECL code within files to execute ECL queries and workloads in the designated cluster.","sidebar":"tutorialSidebar"},"User-Guides/monitoring":{"id":"User-Guides/monitoring","title":"Monitoring","description":"Tombolo currently offers the ability to monitor 4 different kinds of assets.","sidebar":"tutorialSidebar"},"User-Guides/teams-webhook":{"id":"User-Guides/teams-webhook","title":"MS Teams Webhooks","description":"Webhooks in Microsoft Teams allow Tombolo to deliver notifications and updates directly into a Teams channel. Webhooks post these updates directly into the chat stream which can be handled and responded to in order to keep your team on top of important notifications.","sidebar":"tutorialSidebar"},"User-Guides/user-interface":{"id":"User-Guides/user-interface","title":"User Interface","description":"Tombolo\'s user interface is divded into three major zones.","sidebar":"tutorialSidebar"},"User-Guides/Wildcards":{"id":"User-Guides/Wildcards","title":"Wildcards","description":"Wildcards are special characters that can stand in for unknown characters in a text value and are handy for","sidebar":"tutorialSidebar"},"User-Guides/workflows":{"id":"User-Guides/workflows","title":"Workflows","description":"Workflows are Tombolo\'s way of setting up a method for running a set of HPCC workunits, or jobs in a logical workflow.","sidebar":"tutorialSidebar"}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/935f2afb.771fd470.js b/assets/js/935f2afb.771fd470.js
new file mode 100644
index 000000000..85d332e1f
--- /dev/null
+++ b/assets/js/935f2afb.771fd470.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[581],{5610:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Installation & Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Local Setup","href":"/Tombolo/docs/Install/Local","docId":"Install/Local","unlisted":false},{"type":"link","label":"Docker Setup","href":"/Tombolo/docs/Install/Docker","docId":"Install/Docker","unlisted":false},{"type":"link","label":"Configurations","href":"/Tombolo/docs/Install/Configurations","docId":"Install/Configurations","unlisted":false},{"type":"link","label":"Uninstall Instructions","href":"/Tombolo/docs/Install/Uninstall","docId":"Install/Uninstall","unlisted":false}],"href":"/Tombolo/docs/category/installation--configuration"},{"type":"category","label":"User Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Applications","href":"/Tombolo/docs/User-Guides/application","docId":"User-Guides/application","unlisted":false},{"type":"link","label":"Assets","href":"/Tombolo/docs/User-Guides/assets","docId":"User-Guides/assets","unlisted":false},{"type":"link","label":"Clusters","href":"/Tombolo/docs/User-Guides/cluster","docId":"User-Guides/cluster","unlisted":false},{"type":"link","label":"Dashboards","href":"/Tombolo/docs/User-Guides/dashboards","docId":"User-Guides/dashboards","unlisted":false},{"type":"link","label":"Github","href":"/Tombolo/docs/User-Guides/github","docId":"User-Guides/github","unlisted":false},{"type":"link","label":"Monitoring","href":"/Tombolo/docs/User-Guides/monitoring","docId":"User-Guides/monitoring","unlisted":false},{"type":"link","label":"MS Teams Webhooks","href":"/Tombolo/docs/User-Guides/teams-webhook","docId":"User-Guides/teams-webhook","unlisted":false},{"type":"link","label":"User Interface","href":"/Tombolo/docs/User-Guides/user-interface","docId":"User-Guides/user-interface","unlisted":false},{"type":"link","label":"Wildcards","href":"/Tombolo/docs/User-Guides/Wildcards","docId":"User-Guides/Wildcards","unlisted":false},{"type":"link","label":"Workflows","href":"/Tombolo/docs/User-Guides/workflows","docId":"User-Guides/workflows","unlisted":false}],"href":"/Tombolo/docs/category/user-guides"},{"type":"category","label":"Developer Resources","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Integrations","href":"/Tombolo/docs/Developer/Integrations","docId":"Developer/Integrations","unlisted":false}],"href":"/Tombolo/docs/category/developer-resources"}]},"docs":{"Developer/Integrations":{"id":"Developer/Integrations","title":"Integrations","description":"Our Integration Guides are currently under construction and will be available soon.","sidebar":"tutorialSidebar"},"Install/Configurations":{"id":"Install/Configurations","title":"Configurations","description":"To get Tombolo up and running, you\'ll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply copy these sample files and adjust the values to suit your specific environment.","sidebar":"tutorialSidebar"},"Install/Docker":{"id":"Install/Docker","title":"Docker Setup","description":"Tombolo can be deployed quickly by following a few simple steps and running a couple of Docker commands. With Docker, there are fewer prerequisites, and you don\u2019t need to worry about installing multiple applications or having a specific operating system on your machine. This makes Docker the preferred packaging method for production, as it ensures consistency across environments, enhances portability, and simplifies the deployment process.","sidebar":"tutorialSidebar"},"Install/Local":{"id":"Install/Local","title":"Local Setup","description":"Local installation requires a few dependencies to be installed directly on your machine. This is the best choice for developers who want to contribute to the project, or develop integrations to customize their instance. If you intend to use this installation for production purposes, or do not want to configure your own system, we recommend a containerized installation using our Docker Installation Guide instead.","sidebar":"tutorialSidebar"},"Install/Uninstall":{"id":"Install/Uninstall","title":"Uninstall Instructions","description":"There are three potential steps that need to be completed in order to remove Tombolo from your system. It is easiest to follow the order given here.","sidebar":"tutorialSidebar"},"User-Guides/application":{"id":"User-Guides/application","title":"Applications","description":"Applications provide a way to seperate groups of data and settings inside of Tombolo. Each application has its own set of Assets, Dataflows, Jobs, Monitorings, and Notifications as well as administration settings. You can switch application instances at any time by utilizing the selector in the top left corner of the navigation bar, by the Tombolo logo.","sidebar":"tutorialSidebar"},"User-Guides/assets":{"id":"User-Guides/assets","title":"Assets","description":"The \\"Add Asset\\" feature in Tombolo allows you to import assets and their metadata from an HPCC cluster. You can","sidebar":"tutorialSidebar"},"User-Guides/cluster":{"id":"User-Guides/cluster","title":"Clusters","description":"Tombolo can speak directly to HPCC clusters to run ECL code, monitor jobs, files, or cluster usage states, and schedule user-defined dataflows.","sidebar":"tutorialSidebar"},"User-Guides/dashboards":{"id":"User-Guides/dashboards","title":"Dashboards","description":"Our Dashboards give great insight into how you and your teams tasks are being handled. Tombolo currently offers two dashboards","sidebar":"tutorialSidebar"},"User-Guides/github":{"id":"User-Guides/github","title":"Github","description":"Adding a Github Repository will allow files in that repository to be utilized in Dataflows. Tombolo can utilize ECL code within files to execute ECL queries and workloads in the designated cluster.","sidebar":"tutorialSidebar"},"User-Guides/monitoring":{"id":"User-Guides/monitoring","title":"Monitoring","description":"Tombolo currently offers the ability to monitor 4 different kinds of assets.","sidebar":"tutorialSidebar"},"User-Guides/teams-webhook":{"id":"User-Guides/teams-webhook","title":"MS Teams Webhooks","description":"Webhooks in Microsoft Teams allow Tombolo to deliver notifications and updates directly into a Teams channel. Webhooks post these updates directly into the chat stream which can be handled and responded to in order to keep your team on top of important notifications.","sidebar":"tutorialSidebar"},"User-Guides/user-interface":{"id":"User-Guides/user-interface","title":"User Interface","description":"Tombolo\'s user interface is divded into three major zones.","sidebar":"tutorialSidebar"},"User-Guides/Wildcards":{"id":"User-Guides/Wildcards","title":"Wildcards","description":"Wildcards are special characters that can stand in for unknown characters in a text value and are handy for","sidebar":"tutorialSidebar"},"User-Guides/workflows":{"id":"User-Guides/workflows","title":"Workflows","description":"Workflows are Tombolo\'s way of setting up a method for running a set of HPCC workunits, or jobs in a logical workflow.","sidebar":"tutorialSidebar"}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/a399c97a.6af4d34f.js b/assets/js/a399c97a.6af4d34f.js
new file mode 100644
index 000000000..9d7f49c56
--- /dev/null
+++ b/assets/js/a399c97a.6af4d34f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[801],{3583:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=i(4848),s=i(8453);const o={sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},t="Environment Configuration",l={id:"Install/Configurations",title:"Configurations",description:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply copy these sample files and adjust the values to suit your specific environment.",source:"@site/docs/Install/Configurations.md",sourceDirName:"Install",slug:"/Install/Configurations",permalink:"/Tombolo/docs/Install/Configurations",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},sidebar:"tutorialSidebar"},c={},d=[{value:"Server Environment Variables",id:"server-environment-variables",level:2},{value:"1. Instance Configuration",id:"1-instance-configuration",level:3},{value:"2. Host, Port, and Web URL Configuration",id:"2-host-port-and-web-url-configuration",level:3},{value:"3. SSL Certificate Configuration (Nginx)",id:"3-ssl-certificate-configuration-nginx",level:3},{value:"4. Database Configuration",id:"4-database-configuration",level:3},{value:"5. Authentication Configuration",id:"5-authentication-configuration",level:3},{value:"6. Email Configuration",id:"6-email-configuration",level:3},{value:"7. Security Configuration",id:"7-security-configuration",level:3},{value:"8. Logging Configuration",id:"8-logging-configuration",level:3},{value:"9. Integration-Specific Configuration",id:"9-integration-specific-configuration",level:3},{value:"Client Environment Variables",id:"client-environment-variables",level:2},{value:"Development Configuration",id:"development-configuration",level:3},{value:"LDAP Configuration",id:"ldap-configuration",level:3},{value:"Authentication Configuration",id:"authentication-configuration",level:3},{value:"Azure Configuration (only if using Azure AD for authentication)",id:"azure-configuration-only-if-using-azure-ad-for-authentication",level:3},{value:"App Version",id:"app-version",level:3}];function a(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"environment-configuration",children:"Environment Configuration"}),"\n",(0,r.jsx)(n.p,{children:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply copy these sample files and adjust the values to suit your specific environment."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"General Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file contains server-related configurations and Docker-related settings. It is located in the root directory of the project: ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/.env"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Client-Specific Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file is specific to the client-side application and is located in ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/client-reactjs/.env"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)("div",{class:"important_block",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Important"}),": Review and understand the variables in these files as they may differ depending on your environment. Detailed explanations for each variable are provided below."]}),"\n"]})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{class:"env_config-details",children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"server-environment-variables",children:"Server Environment Variables"})}),(0,r.jsx)(n.p,{children:"Below are the server and Docker-related configuration variables for Tombolo. These variables are also referenced in the Docker Compose file. Each one is explained with its purpose and usage."}),(0,r.jsx)(n.h3,{id:"1-instance-configuration",children:"1. Instance Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"INSTANCE_NAME"}),(0,r.jsx)(n.br,{}),"\n","This variable is used to give a unique name to the instance of the Tombolo application.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo_dev_1"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"NODE_ENV"}),(0,r.jsx)(n.br,{}),"\n","Defines the environment type in which Tombolo will run. It can either be set to ",(0,r.jsx)(n.code,{children:"development"})," or ",(0,r.jsx)(n.code,{children:"production"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"development"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"2-host-port-and-web-url-configuration",children:"2. Host, Port, and Web URL Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","This defines the hostname that Tombolo will use. Typically, ",(0,r.jsx)(n.code,{children:"localhost"})," is used for local development, but in a production setup, this could be a domain name or an IP address where the Tombolo server is hosted.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"SERVER_PORT"}),(0,r.jsx)(n.br,{}),"\n","Specifies the port on which the backend server will run. This is the port that handles API requests and communications between the frontend and backend.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3000"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTP_PORT"}),(0,r.jsx)(n.br,{}),"\n","This port is dedicated to the frontend interface of Tombolo. When running locally, the frontend will be accessible through this port.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTPS_PORT"}),(0,r.jsx)(n.br,{}),"\n","Port used for secure HTTP traffic (HTTPS). If SSL/TLS isn't configured or required for your local setup, this setting can be ignored.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"443"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"WEB_URL"}),(0,r.jsx)(n.br,{}),"\n","URL to access Tombolo's web interface. It is composed of the hostname and HTTP port. In production, this would be a FQDN.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"3-ssl-certificate-configuration-nginx",children:"3. SSL Certificate Configuration (Nginx)"}),(0,r.jsx)(n.p,{children:"These configurations are required if you're using SSL/TLS. Ignore if not using SSL."}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERT_PATH"}),(0,r.jsx)(n.br,{}),"\n","Specifies the directory path where SSL certificates are stored. This path is referenced by Nginx.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"/certs"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_NAME"}),(0,r.jsx)(n.br,{}),"\n","The file name of your SSL certificate.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate.pem"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_KEY"}),(0,r.jsx)(n.br,{}),"\n","The file name of the SSL certificate's private key.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate_key.pem"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"4-database-configuration",children:"4. Database Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"MYSQL_SSL_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Determines whether SSL is enabled for the MySQL connection. Set this to ",(0,r.jsx)(n.code,{children:"true"})," in production environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_USERNAME"}),(0,r.jsx)(n.br,{}),"\n","The default is often ",(0,r.jsx)(n.code,{children:"root"}),". In production, a non-root user with appropriate permissions is recommended.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PASSWORD"}),(0,r.jsx)(n.br,{}),"\n","The password associated with the MySQL username.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port used for MySQL communication. The default MySQL port is ",(0,r.jsx)(n.code,{children:"3306"}),", but this may differ based on your environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3306"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_NAME"}),(0,r.jsx)(n.br,{}),"\n","The name of the MySQL database used by Tombolo.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","The host of the MySQL database, typically ",(0,r.jsx)(n.code,{children:"localhost"})," for local setups. For Docker, use the service name ",(0,r.jsx)(n.code,{children:"mysql_db"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"5-authentication-configuration",children:"5. Authentication Configuration"}),(0,r.jsxs)(n.p,{children:["Tombolo does not include built-in authentication. You can choose to use ",(0,r.jsx)(n.strong,{children:"Auth Service"})," or ",(0,r.jsx)(n.strong,{children:"Azure AD"}),"."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Auth Service"})," is an authentication service developed by the LNRS Solution Labs Team. For setup information, please visit the ",(0,r.jsx)(n.a,{href:"https://github.com/hpcc-systems/Auth-Service",children:"Auth Service repository"}),"."]}),(0,r.jsxs)(n.p,{children:["The preferred method, however, is ",(0,r.jsx)(n.strong,{children:"Microsoft Entra ID"})," (formerly Azure Active Directory). The first step to using Microsoft Entra ID for authentication is to register an application in Azure. Once registered, you will receive a Client ID and Tenant ID, which are crucial for this to work. You can also configure a redirect URI, which is a URL to be routed to when a user is authenticated."]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Defines the method of authentication. Available options: ",(0,r.jsx)(n.code,{children:"auth_service"})," or ",(0,r.jsx)(n.code,{children:"azure_ad"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTH_SERVICE_URL"}),(0,r.jsx)(n.br,{}),"\n","The URL of the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://auth-service-url.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTHSERVICE_TOMBOLO_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Tombolo within the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_tenant_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"6-email-configuration",children:"6. Email Configuration"}),(0,r.jsx)(n.p,{children:"Tombolo does not include a built-in SMTP server. To enable email functionality (e.g., notifications), you will need to configure an external SMTP server:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SMTP_HOST"}),(0,r.jsx)(n.br,{}),"\n","The SMTP host for sending emails.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"smtp.mailserver.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port number for the SMTP server.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"25"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SENDER"}),(0,r.jsx)(n.br,{}),"\n","The default sender email address.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"donotreply@tombolo.com"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"7-security-configuration",children:"7. Security Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"ENCRYPTION_KEY"}),(0,r.jsx)(n.br,{}),"\n","This key is used for hashing, encryption, and decryption operations within Tombolo. You can generate this key using OpenSSL:",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.code,{children:"openssl rand -base64 32"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"API_KEY_DURATION"}),(0,r.jsx)(n.br,{}),"\n","The duration (in days) for which an API key remains valid. This key is used for accessing Tombolo data from external sources. The maximum duration is 365 days, and the default is 28 days.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"180"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"8-logging-configuration",children:"8. Logging Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"NODE_LOG_LEVEL"}),(0,r.jsx)(n.br,{}),"\n","The logging level for the Node.js server. Options include ",(0,r.jsx)(n.code,{children:"error"}),", ",(0,r.jsx)(n.code,{children:"warn"}),", ",(0,r.jsx)(n.code,{children:"info"}),", ",(0,r.jsx)(n.code,{children:"http"}),", ",(0,r.jsx)(n.code,{children:"verbose"}),", ",(0,r.jsx)(n.code,{children:"debug"}),", and ",(0,r.jsx)(n.code,{children:"silly"}),". For more information on configuring logging with Winston, refer to the ",(0,r.jsx)(n.a,{href:"https://github.com/winstonjs/winston",children:"Winston Configuration"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http"})]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"9-integration-specific-configuration",children:"9. Integration-Specific Configuration"}),(0,r.jsx)(n.p,{children:"If you have any integrations enabled and they have environment variables, they can be added to this configuration file as well. There is a placeholder section for those integration-specific variables. Please add them there."})]})}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"client-environment-variables",children:"Client Environment Variables"})}),(0,r.jsx)(n.h3,{id:"development-configuration",children:"Development Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"GENERATE_SOURCEMAP"}),(0,r.jsx)(n.br,{}),"\n","Controls whether source maps should be generated. This is mainly used to suppress certain logs generated by Ant Design (antd). The value should be set to ",(0,r.jsx)(n.code,{children:"false"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"PORT"}),(0,r.jsx)(n.br,{}),"\n","Defines the port on which the front-end React application will run.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_PROXY_URL"}),(0,r.jsx)(n.br,{}),"\n","Specifies the proxy URL for the React application, typically used to proxy API requests during development.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3000"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"ldap-configuration",children:"LDAP Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_LDAP_SEARCH_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Enables or disables LDAP search functionality. Set this to ",(0,r.jsx)(n.code,{children:"false"})," as LDAP is not currently used.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"authentication-configuration",children:"Authentication Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Specifies the authentication method to be used by the application. Available options are ",(0,r.jsx)(n.code,{children:"auth_service"})," and ",(0,r.jsx)(n.code,{children:"azure_ad"}),". For more details, refer to the ",(0,r.jsx)(n.code,{children:"APP_AUTH_METHOD"})," variable in the server configuration.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"auth_service"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"azure-configuration-only-if-using-azure-ad-for-authentication",children:"Azure Configuration (only if using Azure AD for authentication)"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-client-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-tenant-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_REDIRECT_URI"}),(0,r.jsx)(n.br,{}),"\n","The URL Azure will redirect the user to after successful authentication. This must also be configured in Azure when registering the app.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/auth/callback"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_API_TOKEN_SCOPE"}),(0,r.jsx)(n.br,{}),"\n","The API token scope for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"api://your-api-id/.default"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"app-version",children:"App Version"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_VERSION"}),(0,r.jsx)(n.br,{}),"\n","The version of the application, typically derived from the package version.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"$npm_package_version"})]}),"\n"]})]})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>l});var r=i(6540);const s={},o=r.createContext(s);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/a5ab87cc.f17fd665.js b/assets/js/a5ab87cc.f17fd665.js
deleted file mode 100644
index ed85a335f..000000000
--- a/assets/js/a5ab87cc.f17fd665.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[365],{8926:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=i(4848),s=i(8453);const o={sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},t="Environment Configuration",l={id:"Install/Env_config",title:"Configurations",description:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply rename these sample files to .env and adjust the values to suit your specific environment.",source:"@site/docs/Install/Env_config.md",sourceDirName:"Install",slug:"/Install/Env_config",permalink:"/Tombolo/docs/Install/Env_config",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3,pagination_next:null,pagination_prev:null,title:"Configurations"},sidebar:"tutorialSidebar"},c={},d=[{value:"Server Environment Variables",id:"server-environment-variables",level:2},{value:"1. Instance Configuration",id:"1-instance-configuration",level:3},{value:"2. Host, Port, and Web URL Configuration",id:"2-host-port-and-web-url-configuration",level:3},{value:"3. SSL Certificate Configuration (Nginx)",id:"3-ssl-certificate-configuration-nginx",level:3},{value:"4. Database Configuration",id:"4-database-configuration",level:3},{value:"5. Authentication Configuration",id:"5-authentication-configuration",level:3},{value:"6. Email Configuration",id:"6-email-configuration",level:3},{value:"7. Security Configuration",id:"7-security-configuration",level:3},{value:"8. Logging Configuration",id:"8-logging-configuration",level:3},{value:"9. Integration-Specific Configuration",id:"9-integration-specific-configuration",level:3},{value:"Client Environment Variables",id:"client-environment-variables",level:2},{value:"Development Configuration",id:"development-configuration",level:3},{value:"LDAP Configuration",id:"ldap-configuration",level:3},{value:"Authentication Configuration",id:"authentication-configuration",level:3},{value:"Azure Configuration (only if using Azure AD for authentication)",id:"azure-configuration-only-if-using-azure-ad-for-authentication",level:3},{value:"App Version",id:"app-version",level:3}];function a(e){const n={a:"a",blockquote:"blockquote",br:"br",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"environment-configuration",children:"Environment Configuration"}),"\n",(0,r.jsx)(n.p,{children:"To get Tombolo up and running, you'll need to configure two essential files. For your convenience, sample .env files are already included in the project. Simply rename these sample files to .env and adjust the values to suit your specific environment."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"General Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file contains server-related configurations and Docker-related settings. It is located in the root directory of the project: ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/.env"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Client-Specific Environment File"}),":",(0,r.jsx)(n.br,{}),"\n","This file is specific to the client-side application and is located in ",(0,r.jsx)(n.code,{children:"Tombolo/Tombolo/client-reactjs/.env"}),"."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)("div",{class:"important_block",children:(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Important"}),": Review and understand the variables in these files as they may differ depending on your environment. Detailed explanations for each variable are provided below."]}),"\n"]})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{class:"env_config-details",children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"server-environment-variables",children:"Server Environment Variables"})}),(0,r.jsx)(n.p,{children:"Below are the server and Docker-related configuration variables for Tombolo. These variables are also referenced in the Docker Compose file. Each one is explained with its purpose and usage."}),(0,r.jsx)(n.h3,{id:"1-instance-configuration",children:"1. Instance Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"INSTANCE_NAME"}),(0,r.jsx)(n.br,{}),"\n","This variable is used to give a unique name to the instance of the Tombolo application.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo_dev_1"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"NODE_ENV"}),(0,r.jsx)(n.br,{}),"\n","Defines the environment type in which Tombolo will run. It can either be set to ",(0,r.jsx)(n.code,{children:"development"})," or ",(0,r.jsx)(n.code,{children:"production"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"development"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"2-host-port-and-web-url-configuration",children:"2. Host, Port, and Web URL Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","This defines the hostname that Tombolo will use. Typically, ",(0,r.jsx)(n.code,{children:"localhost"})," is used for local development, but in a production setup, this could be a domain name or an IP address where the Tombolo server is hosted.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"SERVER_PORT"}),(0,r.jsx)(n.br,{}),"\n","Specifies the port on which the backend server will run. This is the port that handles API requests and communications between the frontend and backend.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3000"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTP_PORT"}),(0,r.jsx)(n.br,{}),"\n","This port is dedicated to the frontend interface of Tombolo. When running locally, the frontend will be accessible through this port.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"HTTPS_PORT"}),(0,r.jsx)(n.br,{}),"\n","Port used for secure HTTP traffic (HTTPS). If SSL/TLS isn't configured or required for your local setup, this setting can be ignored.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"443"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"WEB_URL"}),(0,r.jsx)(n.br,{}),"\n","URL to access Tombolo's web interface. It is composed of the hostname and HTTP port. In production, this would be a FQDN.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"3-ssl-certificate-configuration-nginx",children:"3. SSL Certificate Configuration (Nginx)"}),(0,r.jsx)(n.p,{children:"These configurations are required if you're using SSL/TLS. Ignore if not using SSL."}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERT_PATH"}),(0,r.jsx)(n.br,{}),"\n","Specifies the directory path where SSL certificates are stored. This path is referenced by Nginx.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"/certs"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_NAME"}),(0,r.jsx)(n.br,{}),"\n","The file name of your SSL certificate.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate.pem"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CERTIFICATE_KEY"}),(0,r.jsx)(n.br,{}),"\n","The file name of the SSL certificate's private key.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"my_certificate_key.pem"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"4-database-configuration",children:"4. Database Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"MYSQL_SSL_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Determines whether SSL is enabled for the MySQL connection. Set this to ",(0,r.jsx)(n.code,{children:"true"})," in production environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_USERNAME"}),(0,r.jsx)(n.br,{}),"\n","The default is often ",(0,r.jsx)(n.code,{children:"root"}),". In production, a non-root user with appropriate permissions is recommended.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PASSWORD"}),(0,r.jsx)(n.br,{}),"\n","The password associated with the MySQL username.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"root"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port used for MySQL communication. The default MySQL port is ",(0,r.jsx)(n.code,{children:"3306"}),", but this may differ based on your environment.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3306"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_NAME"}),(0,r.jsx)(n.br,{}),"\n","The name of the MySQL database used by Tombolo.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"tombolo"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DB_HOSTNAME"}),(0,r.jsx)(n.br,{}),"\n","The host of the MySQL database, typically ",(0,r.jsx)(n.code,{children:"localhost"})," for local setups. For Docker, use the service name ",(0,r.jsx)(n.code,{children:"mysql_db"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"5-authentication-configuration",children:"5. Authentication Configuration"}),(0,r.jsxs)(n.p,{children:["Tombolo does not include built-in authentication. You can choose to use ",(0,r.jsx)(n.strong,{children:"Auth Service"})," or ",(0,r.jsx)(n.strong,{children:"Azure AD"}),"."]}),(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Auth Service"})," is an authentication service developed by the LNRS Solution Labs Team. For setup information, please visit the ",(0,r.jsx)(n.a,{href:"https://github.com/hpcc-systems/Auth-Service",children:"Auth Service repository"}),"."]}),(0,r.jsxs)(n.p,{children:["The preferred method, however, is ",(0,r.jsx)(n.strong,{children:"Microsoft Entra ID"})," (formerly Azure Active Directory). The first step to using Microsoft Entra ID for authentication is to register an application in Azure. Once registered, you will receive a Client ID and Tenant ID, which are crucial for this to work. You can also configure a redirect URI, which is a URL to be routed to when a user is authenticated."]}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Defines the method of authentication. Available options: ",(0,r.jsx)(n.code,{children:"auth_service"})," or ",(0,r.jsx)(n.code,{children:"azure_ad"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTH_SERVICE_URL"}),(0,r.jsx)(n.br,{}),"\n","The URL of the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://auth-service-url.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AUTHSERVICE_TOMBOLO_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Tombolo within the Auth Service. Ignore if using Microsoft Entra ID for authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_tenant_id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID from Azure AD. You obtain this after registering your application in Azure AD.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your_client_id"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"6-email-configuration",children:"6. Email Configuration"}),(0,r.jsx)(n.p,{children:"Tombolo does not include a built-in SMTP server. To enable email functionality (e.g., notifications), you will need to configure an external SMTP server:"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SMTP_HOST"}),(0,r.jsx)(n.br,{}),"\n","The SMTP host for sending emails.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"smtp.mailserver.com"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_PORT"}),(0,r.jsx)(n.br,{}),"\n","The port number for the SMTP server.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"25"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"EMAIL_SENDER"}),(0,r.jsx)(n.br,{}),"\n","The default sender email address.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"donotreply@tombolo.com"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"7-security-configuration",children:"7. Security Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"ENCRYPTION_KEY"}),(0,r.jsx)(n.br,{}),"\n","This key is used for hashing, encryption, and decryption operations within Tombolo. You can generate this key using OpenSSL:",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.code,{children:"openssl rand -base64 32"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"API_KEY_DURATION"}),(0,r.jsx)(n.br,{}),"\n","The duration (in days) for which an API key remains valid. This key is used for accessing Tombolo data from external sources. The maximum duration is 365 days, and the default is 28 days.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"180"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"8-logging-configuration",children:"8. Logging Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"NODE_LOG_LEVEL"}),(0,r.jsx)(n.br,{}),"\n","The logging level for the Node.js server. Options include ",(0,r.jsx)(n.code,{children:"error"}),", ",(0,r.jsx)(n.code,{children:"warn"}),", ",(0,r.jsx)(n.code,{children:"info"}),", ",(0,r.jsx)(n.code,{children:"http"}),", ",(0,r.jsx)(n.code,{children:"verbose"}),", ",(0,r.jsx)(n.code,{children:"debug"}),", and ",(0,r.jsx)(n.code,{children:"silly"}),". For more information on configuring logging with Winston, refer to the ",(0,r.jsx)(n.a,{href:"https://github.com/winstonjs/winston",children:"Winston Configuration"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http"})]}),"\n"]}),(0,r.jsx)(n.hr,{}),(0,r.jsx)(n.h3,{id:"9-integration-specific-configuration",children:"9. Integration-Specific Configuration"}),(0,r.jsx)(n.p,{children:"If you have any integrations enabled and they have environment variables, they can be added to this configuration file as well. There is a placeholder section for those integration-specific variables. Please add them there."})]})}),"\n",(0,r.jsx)("div",{class:"custom_details_component",children:(0,r.jsxs)(i,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)(n.h2,{id:"client-environment-variables",children:"Client Environment Variables"})}),(0,r.jsx)(n.h3,{id:"development-configuration",children:"Development Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"GENERATE_SOURCEMAP"}),(0,r.jsx)(n.br,{}),"\n","Controls whether source maps should be generated. This is mainly used to suppress certain logs generated by Ant Design (antd). The value should be set to ",(0,r.jsx)(n.code,{children:"false"}),".",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"PORT"}),(0,r.jsx)(n.br,{}),"\n","Defines the port on which the front-end React application will run.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"3001"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_PROXY_URL"}),(0,r.jsx)(n.br,{}),"\n","Specifies the proxy URL for the React application, typically used to proxy API requests during development.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3000"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"ldap-configuration",children:"LDAP Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_LDAP_SEARCH_ENABLED"}),(0,r.jsx)(n.br,{}),"\n","Enables or disables LDAP search functionality. Set this to ",(0,r.jsx)(n.code,{children:"false"})," as LDAP is not currently used.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"false"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"authentication-configuration",children:"Authentication Configuration"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_APP_AUTH_METHOD"}),(0,r.jsx)(n.br,{}),"\n","Specifies the authentication method to be used by the application. Available options are ",(0,r.jsx)(n.code,{children:"auth_service"})," and ",(0,r.jsx)(n.code,{children:"azure_ad"}),". For more details, refer to the ",(0,r.jsx)(n.code,{children:"APP_AUTH_METHOD"})," variable in the server configuration.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"auth_service"})]}),"\n"]}),(0,r.jsx)(n.h3,{id:"azure-configuration-only-if-using-azure-ad-for-authentication",children:"Azure Configuration (only if using Azure AD for authentication)"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_CLIENT_ID"}),(0,r.jsx)(n.br,{}),"\n","The client ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-client-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_TENANT_ID"}),(0,r.jsx)(n.br,{}),"\n","The tenant ID for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"your-azure-tenant-id"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_REDIRECT_URI"}),(0,r.jsx)(n.br,{}),"\n","The URL Azure will redirect the user to after successful authentication. This must also be configured in Azure when registering the app.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"http://localhost:3001/auth/callback"})]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_AZURE_API_TOKEN_SCOPE"}),(0,r.jsx)(n.br,{}),"\n","The API token scope for Azure AD authentication.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"api://your-api-id/.default"})]}),"\n"]}),"\n"]}),(0,r.jsx)(n.h3,{id:"app-version",children:"App Version"}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"REACT_APP_VERSION"}),(0,r.jsx)(n.br,{}),"\n","The version of the application, typically derived from the package version.",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.em,{children:"Example:"})," ",(0,r.jsx)(n.code,{children:"$npm_package_version"})]}),"\n"]})]})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>l});var r=i(6540);const s={},o=r.createContext(s);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/main.0627e92f.js b/assets/js/main.0627e92f.js
deleted file mode 100644
index 960e69b02..000000000
--- a/assets/js/main.0627e92f.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.0627e92f.js.LICENSE.txt */
-(self.webpackChunktombolo_docs=self.webpackChunktombolo_docs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"04dfaaf1":[()=>n.e(888).then(n.bind(n,4221)),"@site/docs/User-Guides/assets.md",4221],"0591830a":[()=>n.e(566).then(n.bind(n,4097)),"@site/src/pages/release-notes.js",4097],"14eb3368":[()=>Promise.all([n.e(869),n.e(969)]).then(n.bind(n,7247)),"@theme/DocCategoryGeneratedIndexPage",7247],17896441:[()=>Promise.all([n.e(869),n.e(401)]).then(n.bind(n,6041)),"@theme/DocItem",6041],"1fb83efa":[()=>n.e(91).then(n.bind(n,900)),"@site/docs/Install/Docker.md",900],"2bea854b":[()=>n.e(50).then(n.bind(n,141)),"@site/docs/User-Guides/user-interface.md",141],"31ea1fcb":[()=>n.e(887).then(n.bind(n,5449)),"@site/docs/User-Guides/Wildcards.md",5449],"3b352d9b":[()=>n.e(291).then(n.bind(n,6160)),"@site/docs/Developer/Integrations.md",6160],"5a7219e3":[()=>n.e(388).then(n.bind(n,8212)),"@site/docs/User-Guides/application.md",8212],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"70a23bf1":[()=>n.e(671).then(n.t.bind(n,4927,19)),"~docs/default/category-tombolodocs-tutorialsidebar-category-developer-resources-654.json",4927],"75b304dd":[()=>n.e(542).then(n.t.bind(n,9193,19)),"~docs/default/category-tombolodocs-tutorialsidebar-category-installation-configuration-4ae.json",9193],"7d2f855b":[()=>n.e(362).then(n.bind(n,8458)),"@site/docs/User-Guides/monitoring.md",8458],"922dea36":[()=>n.e(449).then(n.bind(n,6587)),"@site/docs/User-Guides/github.md",6587],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],"9599dce5":[()=>n.e(794).then(n.bind(n,933)),"@site/docs/User-Guides/dashboards.md",933],"9743de0d":[()=>n.e(609).then(n.t.bind(n,1966,19)),"/home/runner/work/Tombolo/Tombolo/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",1966],a38188e4:[()=>n.e(153).then(n.t.bind(n,1329,19)),"~docs/default/category-tombolodocs-tutorialsidebar-category-user-guides-9f7.json",1329],a5ab87cc:[()=>n.e(365).then(n.bind(n,8926)),"@site/docs/Install/Env_config.md",8926],a7bd4aaa:[()=>n.e(98).then(n.bind(n,4532)),"@theme/DocVersionRoot",4532],a88f5f7a:[()=>n.e(55).then(n.bind(n,8044)),"@site/docs/User-Guides/cluster.md",8044],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,2559)),"@theme/DocRoot",2559],aac7ac27:[()=>n.e(390).then(n.bind(n,8216)),"@site/docs/Install/Uninstall.md",8216],b5a65df0:[()=>n.e(880).then(n.bind(n,9096)),"@site/docs/User-Guides/workflows.md",9096],c4f5d8e4:[()=>Promise.all([n.e(869),n.e(634)]).then(n.bind(n,3200)),"@site/src/pages/index.js",3200],ce25515c:[()=>n.e(110).then(n.t.bind(n,4061,19)),"/home/runner/work/Tombolo/Tombolo/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",4061],df26ae7c:[()=>n.e(17).then(n.bind(n,8896)),"@site/src/pages/faq.js",8896],e68aaeaf:[()=>n.e(832).then(n.bind(n,5765)),"@site/docs/Install/Local.md",5765],f078caf9:[()=>n.e(127).then(n.bind(n,8552)),"@site/docs/User-Guides/teams-webhook.md",8552]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(a,{...o,...n})})}})}const p=[{path:"/Tombolo/",component:d("/Tombolo/","d51"),exact:!0},{path:"/Tombolo/faq",component:d("/Tombolo/faq","fbc"),exact:!0},{path:"/Tombolo/release-notes",component:d("/Tombolo/release-notes","e57"),exact:!0},{path:"/Tombolo/docs",component:d("/Tombolo/docs","d5f"),routes:[{path:"/Tombolo/docs",component:d("/Tombolo/docs","1ed"),routes:[{path:"/Tombolo/docs",component:d("/Tombolo/docs","1fa"),routes:[{path:"/Tombolo/docs/category/developer-resources",component:d("/Tombolo/docs/category/developer-resources","296"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/category/installation--configuration",component:d("/Tombolo/docs/category/installation--configuration","e65"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/category/user-guides",component:d("/Tombolo/docs/category/user-guides","eb9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Developer/Integrations",component:d("/Tombolo/docs/Developer/Integrations","3c2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Docker",component:d("/Tombolo/docs/Install/Docker","d53"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Env_config",component:d("/Tombolo/docs/Install/Env_config","fa3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Local",component:d("/Tombolo/docs/Install/Local","213"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/Install/Uninstall",component:d("/Tombolo/docs/Install/Uninstall","e22"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/application",component:d("/Tombolo/docs/User-Guides/application","2b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/assets",component:d("/Tombolo/docs/User-Guides/assets","5dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/cluster",component:d("/Tombolo/docs/User-Guides/cluster","64c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/dashboards",component:d("/Tombolo/docs/User-Guides/dashboards","21c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/github",component:d("/Tombolo/docs/User-Guides/github","a07"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/monitoring",component:d("/Tombolo/docs/User-Guides/monitoring","7dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/teams-webhook",component:d("/Tombolo/docs/User-Guides/teams-webhook","0f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/user-interface",component:d("/Tombolo/docs/User-Guides/user-interface","4ca"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/Wildcards",component:d("/Tombolo/docs/User-Guides/Wildcards","8fe"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Tombolo/docs/User-Guides/workflows",component:d("/Tombolo/docs/User-Guides/workflows","b3e"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},8536:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(4625),i=n(545),l=n(8193);const s=[n(119),n(6134),n(6294),n(1043)];var u=n(8328),c=n(6347),d=n(2831),p=n(4848);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var m=n(5260),g=n(4586),h=n(6025),y=n(6342),b=n(1003),v=n(2131),w=n(4090),k=n(2967),x=n(440),S=n(1463);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,v.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(m.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,c.zy)();return e+(0,x.applyTrailingSlash)((0,h.A)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,y.p)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(m.A,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.w})]}),n&&(0,p.jsx)(b.be,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.A,{tag:k.Cy,locale:e}),(0,p.jsx)(m.A,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const _=new Map;function A(e){if(_.has(e.pathname))return{...e,pathname:_.get(e.pathname)};if((0,d.u)(u.A,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return _.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return _.set(e.pathname,t),{...e,pathname:t}}var j=n(6125),N=n(6988),L=n(205);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),R("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.u)(u.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.A.canUseDOM?R("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(P,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(c.qh,{location:t,render:()=>e})})}}const I=D,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function U(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n