···11-"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([["48"],{6621:function(e,s,n){n.d(s,{Z:()=>p});var t=n(5893);n(7294);var a=n(7026),i=n(3212),l=n(6693),r=n(7156),o=n(1183),c=n(4751),d=n(3113);function u(e){return(0,t.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,t.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}function h(){let e=(0,d.ZP)("/");return(0,t.jsx)("li",{className:"breadcrumbs__item",children:(0,t.jsx)(o.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,t.jsx)(u,{className:"breadcrumbHomeIcon_YNFT"})})})}var m=n(8766),b=n(9931);function x(e){let s=function({breadcrumbs:e}){let{siteConfig:s}=(0,b.default)();return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.filter(e=>e.href).map((e,n)=>({"@type":"ListItem",position:n+1,name:e.label,item:`${s.url}${e.href}`}))}}({breadcrumbs:e.breadcrumbs});return(0,t.jsx)(m.Z,{children:(0,t.jsx)("script",{type:"application/ld+json",children:JSON.stringify(s)})})}function v({children:e,href:s,isLast:n}){let a="breadcrumbs__link";return n?(0,t.jsx)("span",{className:a,children:e}):s?(0,t.jsx)(o.Z,{className:a,href:s,children:(0,t.jsx)("span",{children:e})}):(0,t.jsx)("span",{className:a,children:e})}function j({children:e,active:s}){return(0,t.jsx)("li",{className:(0,a.Z)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:e})}function p(){let e=(0,l.s1)(),s=(0,r.Ns)();return e?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(x,{breadcrumbs:e}),(0,t.jsx)("nav",{className:(0,a.Z)(i.k.docs.docBreadcrumbs,"breadcrumbsContainer_Z_bl"),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,t.jsxs)("ul",{className:"breadcrumbs",children:[s&&(0,t.jsx)(h,{}),e.map((s,n)=>{let a=n===e.length-1,i="category"===s.type&&s.linkUnlisted?void 0:s.href;return(0,t.jsx)(j,{active:a,children:(0,t.jsx)(v,{href:i,isLast:a,children:s.label})},n)})]})})]}):null}},926:function(e,s,n){n.r(s),n.d(s,{default:()=>F});var t=n(5893),a=n(7294),i=n(1216),l=n(1558);let r=a.createContext(null);function o({children:e,content:s}){let n=(0,a.useMemo)(()=>({metadata:s.metadata,frontMatter:s.frontMatter,assets:s.assets,contentTitle:s.contentTitle,toc:s.toc}),[s]);return(0,t.jsx)(r.Provider,{value:n,children:e})}function c(){let e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocProvider");return e}function d(){let{metadata:e,frontMatter:s,assets:n}=c();return(0,t.jsx)(i.d,{title:e.title,description:e.description,keywords:s.keywords,image:n.image??s.image})}var u=n(7026),h=n(5705),m=n(7016);function b(){let{metadata:e}=c();return(0,t.jsx)(m.Z,{className:"docusaurus-mt-lg",previous:e.previous,next:e.next})}var x=n(8246),v=n(4088),j=n(3212),p=n(4751),g=n(1183);function f({permalink:e,label:s,count:n,description:a}){return(0,t.jsxs)(g.Z,{rel:"tag",href:e,title:a,className:(0,u.Z)("tag_zVej",n?"tagWithCount_h2kH":"tagRegular_sFm0"),children:[s,n&&(0,t.jsx)("span",{children:n})]})}function _({tags:e}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("b",{children:(0,t.jsx)(p.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,t.jsx)("ul",{className:(0,u.Z)("tags_jXut","padding--none","margin-left--sm"),children:e.map(e=>(0,t.jsx)("li",{className:"tag_QGVx",children:(0,t.jsx)(f,{...e})},e.permalink))})]})}var Z=n(6640);function N(){let{metadata:e}=c(),{editUrl:s,lastUpdatedAt:n,lastUpdatedBy:a,tags:i}=e,l=i.length>0,r=!!(s||n||a);return l||r?(0,t.jsxs)("footer",{className:(0,u.Z)(j.k.docs.docFooter,"docusaurus-mt-lg"),children:[l&&(0,t.jsx)("div",{className:(0,u.Z)("row margin-top--sm",j.k.docs.docFooterTagsRow),children:(0,t.jsx)("div",{className:"col",children:(0,t.jsx)(_,{tags:i})})}),r&&(0,t.jsx)(Z.Z,{className:(0,u.Z)("margin-top--sm",j.k.docs.docFooterEditMetaRow),editUrl:s,lastUpdatedAt:n,lastUpdatedBy:a})]}):null}var k=n(4548),L=n(9450);function T({collapsed:e,...s}){return(0,t.jsx)("button",{type:"button",...s,className:(0,u.Z)("clean-btn","tocCollapsibleButton_TO0P",!e&&"tocCollapsibleButtonExpanded_MG3E",s.className),children:(0,t.jsx)(p.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}function C({toc:e,className:s,minHeadingLevel:n,maxHeadingLevel:a}){let{collapsed:i,toggleCollapsed:l}=(0,k.u)({initialState:!0});return(0,t.jsxs)("div",{className:(0,u.Z)("tocCollapsible_ETCw",!i&&"tocCollapsibleExpanded_sAul",s),children:[(0,t.jsx)(T,{collapsed:i,onClick:l}),(0,t.jsx)(k.z,{lazy:!0,className:"tocCollapsibleContent_vkbj",collapsed:i,children:(0,t.jsx)(L.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:a})})]})}function w(){let{toc:e,frontMatter:s}=c();return(0,t.jsx)(C,{toc:e,minHeadingLevel:s.toc_min_heading_level,maxHeadingLevel:s.toc_max_heading_level,className:(0,u.Z)(j.k.docs.docTocMobile,"tocMobile_ITEo")})}var y=n(1955);function V(){let{toc:e,frontMatter:s}=c();return(0,t.jsx)(y.Z,{toc:e,minHeadingLevel:s.toc_min_heading_level,maxHeadingLevel:s.toc_max_heading_level,className:j.k.docs.docTocDesktop})}var I=n(8608),M=n(461);function A({children:e}){let s=function(){let{metadata:e,frontMatter:s,contentTitle:n}=c();return s.hide_title||void 0!==n?null:e.title}();return(0,t.jsxs)("div",{className:(0,u.Z)(j.k.docs.docMarkdown,"markdown"),children:[s&&(0,t.jsx)("header",{children:(0,t.jsx)(I.Z,{as:"h1",children:s})}),(0,t.jsx)(M.Z,{children:e})]})}var B=n(6621),H=n(9945);function E({children:e}){let s=function(){let{frontMatter:e,toc:s}=c(),n=(0,h.i)(),a=e.hide_table_of_contents,i=!a&&s.length>0;return{hidden:a,mobile:i?(0,t.jsx)(w,{}):void 0,desktop:i&&("desktop"===n||"ssr"===n)?(0,t.jsx)(V,{}):void 0}}(),{metadata:n}=c();return(0,t.jsxs)("div",{className:"row",children:[(0,t.jsxs)("div",{className:(0,u.Z)("col",!s.hidden&&"docItemCol_VOVn"),children:[(0,t.jsx)(H.Z,{metadata:n}),(0,t.jsx)(x.Z,{}),(0,t.jsxs)("div",{className:"docItemContainer_Djhp",children:[(0,t.jsxs)("article",{children:[(0,t.jsx)(B.Z,{}),(0,t.jsx)(v.Z,{}),s.mobile,(0,t.jsx)(A,{children:e}),(0,t.jsx)(N,{})]}),(0,t.jsx)(b,{})]})]}),s.desktop&&(0,t.jsx)("div",{className:"col col--3",children:s.desktop})]})}function F(e){let s=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,t.jsx)(o,{content:e.content,children:(0,t.jsxs)(i.FG,{className:s,children:[(0,t.jsx)(d,{}),(0,t.jsx)(E,{children:(0,t.jsx)(n,{})})]})})}},7016:function(e,s,n){n.d(s,{Z:()=>o});var t=n(5893);n(7294);var a=n(7026),i=n(4751),l=n(1183);function r(e){let{permalink:s,title:n,subLabel:i,isNext:r}=e;return(0,t.jsxs)(l.Z,{className:(0,a.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:s,children:[i&&(0,t.jsx)("div",{className:"pagination-nav__sublabel",children:i}),(0,t.jsx)("div",{className:"pagination-nav__label",children:n})]})}function o(e){let{className:s,previous:n,next:l}=e;return(0,t.jsxs)("nav",{className:(0,a.Z)(s,"pagination-nav"),"aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,t.jsx)(r,{...n,subLabel:(0,t.jsx)(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),l&&(0,t.jsx)(r,{...l,subLabel:(0,t.jsx)(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4088:function(e,s,n){n.d(s,{Z:()=>o});var t=n(5893);n(7294);var a=n(7026),i=n(4751),l=n(3212),r=n(5074);function o({className:e}){let s=(0,r.E)();return s.badge?(0,t.jsx)("span",{className:(0,a.Z)(e,l.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,t.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},8246:function(e,s,n){n.d(s,{Z:()=>v});var t=n(5893);n(7294);var a=n(7026),i=n(9931),l=n(1183),r=n(4751),o=n(475),c=n(3212),d=n(4760),u=n(5074);let h={unreleased:function({siteTitle:e,versionMetadata:s}){return(0,t.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,t.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:s}){return(0,t.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,t.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function m(e){let s=h[e.versionMetadata.banner];return(0,t.jsx)(s,{...e})}function b({versionLabel:e,to:s,onClick:n}){return(0,t.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,t.jsx)("b",{children:(0,t.jsx)(l.Z,{to:s,onClick:n,children:(0,t.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x({className:e,versionMetadata:s}){let{siteConfig:{title:n}}=(0,i.default)(),{pluginId:l}=(0,o.gA)({failfast:!0}),{savePreferredVersionName:r}=(0,d.J)(l),{latestDocSuggestion:u,latestVersionSuggestion:h}=(0,o.Jo)(l),x=u??h.docs.find(e=>e.id===h.mainDocId);return(0,t.jsxs)("div",{className:(0,a.Z)(e,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,t.jsx)("div",{children:(0,t.jsx)(m,{siteTitle:n,versionMetadata:s})}),(0,t.jsx)("div",{className:"margin-top--md",children:(0,t.jsx)(b,{versionLabel:h.label,to:x.path,onClick:()=>r(h.name)})})]})}function v({className:e}){let s=(0,u.E)();return s.banner?(0,t.jsx)(x,{className:e,versionMetadata:s}):null}}}]);
···11+"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([["179"],{6621:function(e,s,n){n.d(s,{Z:()=>p});var t=n(5893);n(7294);var a=n(7026),i=n(3212),l=n(6693),r=n(7156),o=n(1183),c=n(4751),d=n(3113);function u(e){return(0,t.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,t.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}function h(){let e=(0,d.ZP)("/");return(0,t.jsx)("li",{className:"breadcrumbs__item",children:(0,t.jsx)(o.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,t.jsx)(u,{className:"breadcrumbHomeIcon_YNFT"})})})}var m=n(8766),b=n(9931);function x(e){let s=function({breadcrumbs:e}){let{siteConfig:s}=(0,b.default)();return{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.filter(e=>e.href).map((e,n)=>({"@type":"ListItem",position:n+1,name:e.label,item:`${s.url}${e.href}`}))}}({breadcrumbs:e.breadcrumbs});return(0,t.jsx)(m.Z,{children:(0,t.jsx)("script",{type:"application/ld+json",children:JSON.stringify(s)})})}function v({children:e,href:s,isLast:n}){let a="breadcrumbs__link";return n?(0,t.jsx)("span",{className:a,children:e}):s?(0,t.jsx)(o.Z,{className:a,href:s,children:(0,t.jsx)("span",{children:e})}):(0,t.jsx)("span",{className:a,children:e})}function j({children:e,active:s}){return(0,t.jsx)("li",{className:(0,a.Z)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:e})}function p(){let e=(0,l.s1)(),s=(0,r.Ns)();return e?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(x,{breadcrumbs:e}),(0,t.jsx)("nav",{className:(0,a.Z)(i.k.docs.docBreadcrumbs,"breadcrumbsContainer_Z_bl"),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,t.jsxs)("ul",{className:"breadcrumbs",children:[s&&(0,t.jsx)(h,{}),e.map((s,n)=>{let a=n===e.length-1,i="category"===s.type&&s.linkUnlisted?void 0:s.href;return(0,t.jsx)(j,{active:a,children:(0,t.jsx)(v,{href:i,isLast:a,children:s.label})},n)})]})})]}):null}},926:function(e,s,n){n.d(s,{Z:()=>F});var t=n(5893),a=n(7294),i=n(1216),l=n(1558);let r=a.createContext(null);function o({children:e,content:s}){let n=(0,a.useMemo)(()=>({metadata:s.metadata,frontMatter:s.frontMatter,assets:s.assets,contentTitle:s.contentTitle,toc:s.toc}),[s]);return(0,t.jsx)(r.Provider,{value:n,children:e})}function c(){let e=(0,a.useContext)(r);if(null===e)throw new l.i6("DocProvider");return e}function d(){let{metadata:e,frontMatter:s,assets:n}=c();return(0,t.jsx)(i.d,{title:e.title,description:e.description,keywords:s.keywords,image:n.image??s.image})}var u=n(7026),h=n(5705),m=n(7016);function b(){let{metadata:e}=c();return(0,t.jsx)(m.Z,{className:"docusaurus-mt-lg",previous:e.previous,next:e.next})}var x=n(8246),v=n(4088),j=n(3212),p=n(4751),g=n(1183);function f({permalink:e,label:s,count:n,description:a}){return(0,t.jsxs)(g.Z,{rel:"tag",href:e,title:a,className:(0,u.Z)("tag_zVej",n?"tagWithCount_h2kH":"tagRegular_sFm0"),children:[s,n&&(0,t.jsx)("span",{children:n})]})}function _({tags:e}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("b",{children:(0,t.jsx)(p.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,t.jsx)("ul",{className:(0,u.Z)("tags_jXut","padding--none","margin-left--sm"),children:e.map(e=>(0,t.jsx)("li",{className:"tag_QGVx",children:(0,t.jsx)(f,{...e})},e.permalink))})]})}var Z=n(6640);function N(){let{metadata:e}=c(),{editUrl:s,lastUpdatedAt:n,lastUpdatedBy:a,tags:i}=e,l=i.length>0,r=!!(s||n||a);return l||r?(0,t.jsxs)("footer",{className:(0,u.Z)(j.k.docs.docFooter,"docusaurus-mt-lg"),children:[l&&(0,t.jsx)("div",{className:(0,u.Z)("row margin-top--sm",j.k.docs.docFooterTagsRow),children:(0,t.jsx)("div",{className:"col",children:(0,t.jsx)(_,{tags:i})})}),r&&(0,t.jsx)(Z.Z,{className:(0,u.Z)("margin-top--sm",j.k.docs.docFooterEditMetaRow),editUrl:s,lastUpdatedAt:n,lastUpdatedBy:a})]}):null}var k=n(4548),L=n(9450);function T({collapsed:e,...s}){return(0,t.jsx)("button",{type:"button",...s,className:(0,u.Z)("clean-btn","tocCollapsibleButton_TO0P",!e&&"tocCollapsibleButtonExpanded_MG3E",s.className),children:(0,t.jsx)(p.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}function C({toc:e,className:s,minHeadingLevel:n,maxHeadingLevel:a}){let{collapsed:i,toggleCollapsed:l}=(0,k.u)({initialState:!0});return(0,t.jsxs)("div",{className:(0,u.Z)("tocCollapsible_ETCw",!i&&"tocCollapsibleExpanded_sAul",s),children:[(0,t.jsx)(T,{collapsed:i,onClick:l}),(0,t.jsx)(k.z,{lazy:!0,className:"tocCollapsibleContent_vkbj",collapsed:i,children:(0,t.jsx)(L.Z,{toc:e,minHeadingLevel:n,maxHeadingLevel:a})})]})}function w(){let{toc:e,frontMatter:s}=c();return(0,t.jsx)(C,{toc:e,minHeadingLevel:s.toc_min_heading_level,maxHeadingLevel:s.toc_max_heading_level,className:(0,u.Z)(j.k.docs.docTocMobile,"tocMobile_ITEo")})}var y=n(1955);function V(){let{toc:e,frontMatter:s}=c();return(0,t.jsx)(y.Z,{toc:e,minHeadingLevel:s.toc_min_heading_level,maxHeadingLevel:s.toc_max_heading_level,className:j.k.docs.docTocDesktop})}var I=n(8608),M=n(461);function A({children:e}){let s=function(){let{metadata:e,frontMatter:s,contentTitle:n}=c();return s.hide_title||void 0!==n?null:e.title}();return(0,t.jsxs)("div",{className:(0,u.Z)(j.k.docs.docMarkdown,"markdown"),children:[s&&(0,t.jsx)("header",{children:(0,t.jsx)(I.Z,{as:"h1",children:s})}),(0,t.jsx)(M.Z,{children:e})]})}var B=n(6621),H=n(9945);function E({children:e}){let s=function(){let{frontMatter:e,toc:s}=c(),n=(0,h.i)(),a=e.hide_table_of_contents,i=!a&&s.length>0;return{hidden:a,mobile:i?(0,t.jsx)(w,{}):void 0,desktop:i&&("desktop"===n||"ssr"===n)?(0,t.jsx)(V,{}):void 0}}(),{metadata:n}=c();return(0,t.jsxs)("div",{className:"row",children:[(0,t.jsxs)("div",{className:(0,u.Z)("col",!s.hidden&&"docItemCol_VOVn"),children:[(0,t.jsx)(H.Z,{metadata:n}),(0,t.jsx)(x.Z,{}),(0,t.jsxs)("div",{className:"docItemContainer_Djhp",children:[(0,t.jsxs)("article",{children:[(0,t.jsx)(B.Z,{}),(0,t.jsx)(v.Z,{}),s.mobile,(0,t.jsx)(A,{children:e}),(0,t.jsx)(N,{})]}),(0,t.jsx)(b,{})]})]}),s.desktop&&(0,t.jsx)("div",{className:"col col--3",children:s.desktop})]})}function F(e){let s=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,t.jsx)(o,{content:e.content,children:(0,t.jsxs)(i.FG,{className:s,children:[(0,t.jsx)(d,{}),(0,t.jsx)(E,{children:(0,t.jsx)(n,{})})]})})}},7016:function(e,s,n){n.d(s,{Z:()=>o});var t=n(5893);n(7294);var a=n(7026),i=n(4751),l=n(1183);function r(e){let{permalink:s,title:n,subLabel:i,isNext:r}=e;return(0,t.jsxs)(l.Z,{className:(0,a.Z)("pagination-nav__link",r?"pagination-nav__link--next":"pagination-nav__link--prev"),to:s,children:[i&&(0,t.jsx)("div",{className:"pagination-nav__sublabel",children:i}),(0,t.jsx)("div",{className:"pagination-nav__label",children:n})]})}function o(e){let{className:s,previous:n,next:l}=e;return(0,t.jsxs)("nav",{className:(0,a.Z)(s,"pagination-nav"),"aria-label":(0,i.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,t.jsx)(r,{...n,subLabel:(0,t.jsx)(i.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),l&&(0,t.jsx)(r,{...l,subLabel:(0,t.jsx)(i.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},4088:function(e,s,n){n.d(s,{Z:()=>o});var t=n(5893);n(7294);var a=n(7026),i=n(4751),l=n(3212),r=n(5074);function o({className:e}){let s=(0,r.E)();return s.badge?(0,t.jsx)("span",{className:(0,a.Z)(e,l.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,t.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},8246:function(e,s,n){n.d(s,{Z:()=>v});var t=n(5893);n(7294);var a=n(7026),i=n(9931),l=n(1183),r=n(4751),o=n(475),c=n(3212),d=n(4760),u=n(5074);let h={unreleased:function({siteTitle:e,versionMetadata:s}){return(0,t.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:e,versionLabel:(0,t.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function({siteTitle:e,versionMetadata:s}){return(0,t.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:e,versionLabel:(0,t.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function m(e){let s=h[e.versionMetadata.banner];return(0,t.jsx)(s,{...e})}function b({versionLabel:e,to:s,onClick:n}){return(0,t.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:e,latestVersionLink:(0,t.jsx)("b",{children:(0,t.jsx)(l.Z,{to:s,onClick:n,children:(0,t.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x({className:e,versionMetadata:s}){let{siteConfig:{title:n}}=(0,i.default)(),{pluginId:l}=(0,o.gA)({failfast:!0}),{savePreferredVersionName:r}=(0,d.J)(l),{latestDocSuggestion:u,latestVersionSuggestion:h}=(0,o.Jo)(l),x=u??h.docs.find(e=>e.id===h.mainDocId);return(0,t.jsxs)("div",{className:(0,a.Z)(e,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,t.jsx)("div",{children:(0,t.jsx)(m,{siteTitle:n,versionMetadata:s})}),(0,t.jsx)("div",{className:"margin-top--md",children:(0,t.jsx)(b,{versionLabel:h.label,to:x.path,onClick:()=>r(h.name)})})]})}function v({className:e}){let s=(0,u.E)();return s.banner?(0,t.jsx)(x,{className:e,versionMetadata:s}):null}}}]);
-1
assets/js/74876495.297146a4.js
···11-(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([["631"],{4849:function(e,r,o){e.exports={src:Object.assign(Object.create({toString(){return this.src}}),{srcSet:o.p+"assets/ideal-img/sync-resource-file.d733ef4.640.png 640w,"+o.p+"assets/ideal-img/sync-resource-file.cdf1733.739.png 739w",images:[{path:o.p+"assets/ideal-img/sync-resource-file.d733ef4.640.png",width:640,height:793},{path:o.p+"assets/ideal-img/sync-resource-file.cdf1733.739.png",width:739,height:916}],src:o.p+"assets/ideal-img/sync-resource-file.d733ef4.640.png",placeholder:void 0,width:640,height:793}),preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABDElEQVR4nG2P226DMBBEeQ7XgC9gm0swEAKFpKRpq1Zqpf7/P01lFyFF6cNod7VHs7MOlxokPSAiCjSrQbIaEZHY+QncgGxy/H1qFzErEOwzeBGHF7I7yDVgGKcILKzgBvTPySePIE0LCFXbwTMK6aadn6w9gxMlAqkyOSvELN+U8MJGChOJIM7ghImAPi4o2wU078HU0YrKDlS2to95ZUCJafnE/PKN+ukDor5A1DN43oOKBkx1K0gkuvGGdrhC6RlpOYKXA5hqV8cVNN82pyvyZgEvR1DV2aWpd6A5fb59YXn/gbanz8gOE3hxenTs5zf00yuK9oKsGm02Az2Aul+g9DN4MYAIDfIP+AtBl50yVJl/EgAAAABJRU5ErkJggg=="}},1719:function(e,r,o){"use strict";o.d(r,{ZP:()=>c,d$:()=>t});var s=o(5893),n=o(65);let t=[];function i(e){let r={a:"a",code:"code",p:"p",pre:"pre",...(0,n.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Console Output Example"}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-shell",children:"docker compose up --no-log-prefix\n"})}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{children:'INFO : [Init] Debug Mode: NO\nINFO : [App] Version: 0.1.0\nINFO : [App] Files On Server Dir ENV: /filesOnServer -> Resolved: /filesOnServer\nINFO : [App] [Files On Server] Processing Stacks for 2 folders:\n/filesOnServer/immich\n/filesOnServer/plex\n/filesOnServer/uptime-kuma\nINFO : [App] [Files On Server] Compose File Glob: **/{compose,docker-compose}*.y?(a)ml\nINFO : [App] [Files On Server] Env Glob: **/.env\nINFO : [App] [Files On Server] [compose] Found Stack \'compose\' at dir /filesOnServer/compose.yaml\nWARN : [App] [Files On Server] [compose] Did not find any files patterns matching compose glob\nINFO : [App] [Files On Server] [compose] Stack config complete\n\n...\n\nINFO : [App] [Files On Server] Built Stack configs for 3 folders\nINFO : [App] Copy the text between the scissors to use as the *Resource File* contents within your Resource Sync\n\n\u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F\n\n[[stack]]\nname = "immich"\n\n[stack.config]\nserver = "my-cool-server"\nrun_directory = "/home/myUser/homelab/immich"\nfiles_on_host = true\nauto_update = false\npoll_for_updates = false\nfile_paths = [ "docker/docker-compose.yaml" ]\n\n[[stack]]\nname = "plex"\n\n[stack.config]\nserver = "my-cool-server"\nrun_directory = "/home/myUser/homelab/plex"\nfiles_on_host = true\nauto_update = false\npoll_for_updates = false\n\n[[stack]]\nname = "uptime-kuma"\n\n[stack.config]\nserver = "my-cool-server"\nrun_directory = "/home/myUser/homelab/uptime-kuma"\nfiles_on_host = true\nauto_update = false\npoll_for_updates = false\nenv_file_path = ".komodoEnv"\nadditional_env_files = [ ".env" ]\n\u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F\nINFO : [App] Done!\n'})}),(0,s.jsxs)(r.p,{children:["Copy the text between the scissors and ",(0,s.jsx)(r.a,{href:"../usage/resourceSync/#create-sync-resource",children:"create a new Sync Resource in Komodo"})]})]})}function c(e={}){let{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},58:function(e,r,o){"use strict";o.r(r),o.d(r,{frontMatter:()=>T,default:()=>L,toc:()=>G,metadata:()=>s,assets:()=>B,contentTitle:()=>U});var s=JSON.parse('{"id":"quickstart","title":"Quickstart","description":"Prerequisites","source":"@site/docs/quickstart.mdx","sourceDirName":".","slug":"/quickstart","permalink":"/komodo-import/docs/quickstart","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/quickstart.mdx","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Quickstart","sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"Installation","permalink":"/komodo-import/docs/category/installation"}}'),n=o(5893),t=o(65);o(7057),o(4250);var i=o(7294),c=o(2292),l=o.n(c),a=o(9999),d=o(2575),m=o(461),p=o(5756),h=o(7026),u=o(1183);function x({size:e=null,outline:r=!1,variant:o="primary",block:s=!1,disabled:t=!1,className:i,style:c={},link:l,label:a,onClick:d=()=>null}){let m=e?({sm:"sm",small:"sm",lg:"lg",large:"lg",medium:null})[e]:"",p=m?`button--${m}`:"",x=o?`button--${o}`:"";return(0,n.jsx)(u.Z,{to:t?null:l,children:(0,n.jsx)("button",{className:(0,h.Z)("button",p,r?"button--outline":"",x,s?"button--block":"",t?"disabled":"",i),style:c,role:"button","aria-disabled":t,onClick:e=>{e.preventDefault(),d()},children:a})})}let f={borderRadius:"var(--ifm-button-border-radius) 0 0 var(--ifm-button-border-radius)"},j={borderRadius:"0 var(--ifm-button-border-radius) var(--ifm-button-border-radius) 0"},g={borderRadius:"0"};function y({size:e=null,variant:r="primary",block:o=!1,disabled:s=!1,className:t,style:i,options:c,value:l,defaultValue:a,onChange:d=()=>null}){if(void 0===c||0===c.length)return null;let m=c.map((o,s)=>{let t={style:g,outline:!0,size:e,variant:r,label:o[1],link:"#",onClick:()=>d(o[0])};return 0===s?t.style=f:s===c.length-1&&(t.style=j),(l??a)===o[0]&&(t.outline=!1),(0,n.jsx)(x,{...t},s)});return(0,n.jsx)("span",{children:m})}var v=o(6370),S=o(4697);function k(e){let r={code:"code",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(r.p,{children:["When using ",(0,n.jsx)(r.code,{children:"STACKS_FROM=compose"})," this should be the the most top-level directory that all projects are contained within, at some level."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"Example"}),(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"docker compose ls"})," reveals these projects:"]}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:"NAME STATUS CONFIG FILES\nimmich running /home/myUser/homelab/immich/compose.yaml\nplex running /home/myUser/homelab/plex/docker-compose.yaml\nproject1 running /home/myUser/localDev/myProjects/project1/compose.yaml\n"})}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:".\n\u2514\u2500\u2500 /home/myUser\n \u251C\u2500\u2500 homeLab\n \u2502 \u251C\u2500\u2500 immich\n \u2502 \u2502 \u2514\u2500\u2500 compose.yaml\n \u2502 \u2514\u2500\u2500 plex\n \u2502 \u251C\u2500\u2500 docker-compose.yaml\n \u2502 \u2514\u2500\u2500 .git\n \u2514\u2500\u2500 localDev\n \u2514\u2500\u2500 myProjects\n \u2514\u2500\u2500 project1\n \u2514\u2500\u2500 compose.yaml\n"})}),(0,n.jsxs)(r.p,{children:["Then ",(0,n.jsx)(r.strong,{children:"Host Directory"})," should be ",(0,n.jsx)(r.code,{children:"/home/myUser"})]})]})]})}function b(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(k,{...e})}):k(e)}function O(e){let r={code:"code",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(r.p,{children:["For ",(0,n.jsx)(r.code,{children:"STACKS_FROM=dir"})," this should be the immediate parent directory containing all your project folders."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"Example"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:".\n\u2514\u2500\u2500 /home/myUser/homelab/\n \u251C\u2500\u2500 immich/\n \u2502 \u2514\u2500\u2500 compose.yaml\n \u251C\u2500\u2500 plex/\n \u2502 \u251C\u2500\u2500 docker-compose.yaml\n \u2502 \u2514\u2500\u2500 .git\n \u2514\u2500\u2500 uptime-kuma/\n \u2514\u2500\u2500 compose.yaml\n"})}),(0,n.jsxs)(r.p,{children:["Then ",(0,n.jsx)(r.strong,{children:"Host Directory"})," should be ",(0,n.jsx)(r.code,{children:"/home/myUser/homelab"})]})]})]})}function A(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(O,{...e})}):O(e)}var F=o(1719),w=o(8494),N=o(4849),I=o.n(N);function E(e){let r={a:"a",code:"code",p:"p",pre:"pre",...(0,t.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"Komodo Example"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-shell",children:"docker compose up --no-log-prefix\n"})}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:"INFO : [Init] Debug Mode: NO\nINFO : [App] Version: 0.1.0\nINFO : [App] Files On Server Dir ENV: /filesOnServer -> Resolved: /filesOnServer\nINFO : [App] [Files On Server] Processing Stacks for 2 folders:\n/filesOnServer/immich\n/filesOnServer/plex\n/filesOnServer/uptime-kuma\nINFO : [App] [Files On Server] Compose File Glob: **/{compose,docker-compose}*.y?(a)ml\nINFO : [App] [Files On Server] Env Glob: **/.env\nINFO : [App] [Files On Server] [compose] Found Stack 'compose' at dir /filesOnServer/compose.yaml\nWARN : [App] [Files On Server] [compose] Did not find any files patterns matching compose glob\nINFO : [App] [Files On Server] [compose] Stack config complete\n\n...\n\nINFO : [App] [Files On Server] Built Stack configs for 3 folders\nINFO : [App] Copy the text between the scissors to use as the *Resource File* contents within your Resource Sync\n\n...\n\nINFO : [App] [Sync API] Using 'komodo-import' as Sync Name\nVERBOSE: [App] [Sync API] KOMODO_URL: http://192.168.0.101:9120 | Normalized: http://192.168.0.101:9120/\nINFO : [App] [Sync API] Resource Sync created.\nINFO : [App] [Sync API] Resource Sync URL: http://192.168.0.101:9120/resource-syncs/689a41a04ed1b642f3053f57\n"})}),(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.a,{href:"../usage/resourceSync#verify-sync-changes",children:"Sync Resource"})," is automatically created for you (but not executed!)"]}),(0,n.jsx)(w.Z,{img:I()})]})}function R(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(E,{...e})}):E(e)}let _=(0,v.wL)("services:\n komodo-import:\n image: foxxmd/komodo-import:latest\n restart: no\n volumes:\n - ./home/myUser/homelab:/filesOnServer\n environment:\n"),C=(0,v.wL)("socket-proxy:\n image: lscr.io/linuxserver/socket-proxy:latest\n environment:\n - CONTAINERS=1\n - INFO=1\n - POST=0\n - PING=1\n - VERSION=1\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock:ro\n read_only: true\n tmpfs:\n - /run"),K=new RegExp(/(?:^|[\/\\])\.\S/),P=e=>{let{data:r,name:o,client:s=!1}=e,[t,c]=(0,i.useState)({stacksFrom:"dir",api:!1}),[p,h]=(0,i.useState)(_),[u,f]=i.useState(""),[j]=(0,S.Nr)(u,500),[g,k]=i.useState(""),[O]=(0,S.Nr)(g,500),[w,N]=i.useState(""),[I]=(0,S.Nr)(w,500),[E,P]=i.useState(""),[D]=(0,S.Nr)(E,500),[T,U]=i.useState(""),[B]=(0,S.Nr)(T,500),G=(0,i.useCallback)(()=>{c({...t,api:!t.api})},[t,c]);return(0,i.useEffect)(()=>{let e=_.clone(),r=void 0!==j&&""!==j.trim()?j:"/home/myUser/homelab",o=new v.Ru(`${r}:/filesOnServer`);o.commentBefore=`# ${"dir"===t.stacksFrom?"Parent directory where all subfolders are compose projects":"Top-most directory that contains all folders (at any level) that compose projects are found in"}`,e.setIn(["services","komodo-import","volumes",0],o),e.setIn(["services","komodo-import","environment"],new v.wr);let s=e.getIn(["services","komodo-import","environment"]),n=new v.Ru(`HOST_PARENT_PATH=${r}`);if(n.commentBefore="# Same as mounted directory above",s.add(n),K.test(r)){let e=new v.Ru("GLOB_DOT=true");e.commentBefore="# Forces glob to not ignore dot folders",s.add(e)}let i=new v.Ru(`STACKS_FROM=${t.stacksFrom}`);i.commentBefore="# Determines what sources to generate Stacks from",i.comment=`# ${"dir"===t.stacksFrom?"Generate stacks from subfolders in directory":"Generate stacks from compose projects"}`,s.add(i);let c=new v.Ru(`SERVER_NAME=${void 0!==O&&""!==O.trim()?O:"my-cool-server"}`);if(c.commentBefore="# Name of Server for this machine, in Komodo",s.add(c),t.api){let e=new v.Ru(`KOMODO_URL=${""===I?"http://192.168.KOMOMDO.IP:8120":I}`);e.spaceBefore=!0,e.commentBefore="# Configuration for interacting with Komodo API",s.add(e),s.add(`API_KEY=${""===D?"K-3A6btIPZYeBu_EXAMPLE_KEY":D}`),s.add(`API_SECRET=${""===B?"S-qnaXD1frutYlfC2ZYl_EXAMPLE_SECRET":B}`);let r=new v.Ru("OUTPUT_API_SYNC=true");r.comment="Create Sync Resource in Komodo",s.add(r)}if("compose"===t.stacksFrom){let r=new v.Ru("DOCKER_HOST=tcp://socket-proxy:2375");r.spaceBefore=!0,r.commentBefore="Tells Komodo Import how to connect to Docker",s.add(r);let o=new v.wr;o.add("socket-proxy"),e.setIn(["services","komodo-import","depends_on"],o),e.setIn(["services","socket-proxy"],C.get("socket-proxy")),e.getIn(["services","socket-proxy"]).commentBefore="# used to communicate with docker daemon"}h(e)},[t,j,O,D,B,I,h]),(0,n.jsxs)(i.Fragment,{children:[(0,n.jsxs)("h3",{children:["1. What ",(0,n.jsx)("a",{href:"../usage/overview#stack-sources",children:"Stack Sources"})," to generate Stacks from?"]}),(0,n.jsx)("p",{children:(0,n.jsx)(y,{options:[["dir","Directory"],["compose","Compose Projects"]],defaultValue:"dir",value:t.stacksFrom,variant:"primary",size:"lg",onChange:e=>c({...t,stacksFrom:e})})}),(0,n.jsx)("span",{style:{display:"dir"===t.stacksFrom?"inherit":"none"},children:(0,n.jsxs)(d.Z,{type:"info",children:["For ",(0,n.jsx)("strong",{children:"Directory"})," (",(0,n.jsx)(a.Z,{children:"STACKS_FROM=dir"}),") Komodo Import will try to generate Stacks from each ",(0,n.jsx)("strong",{children:"subfolder"})," inside the directory mounted into the container."]})}),(0,n.jsx)("span",{style:{display:"compose"===t.stacksFrom?"inherit":"none"},children:(0,n.jsxs)(d.Z,{type:"info",children:["For ",(0,n.jsx)("strong",{children:"Compose Projects"})," (",(0,n.jsx)(a.Z,{children:"STACKS_FROM=compose"}),") Komodo Import will try to generate Stacks from existing projects on your machine that were created with ",(0,n.jsx)(a.Z,{children:"docker compose up"})]})}),(0,n.jsx)("h3",{children:"2. Where are your existing projects located on your machine?"}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"hostDir",children:(0,n.jsx)("strong",{children:(0,n.jsx)("a",{href:"../usage/overview#host-directory",children:"Host Directory:"})})}),(0,n.jsx)("input",{id:"hostDir",type:"text",placeholder:"/home/myUser/homelab",onChange:e=>{f(e.target.value)},value:u})]}),"compose"===t.stacksFrom?(0,n.jsx)(m.Z,{children:(0,n.jsx)(b,{})}):(0,n.jsx)(m.Z,{children:(0,n.jsx)(A,{})}),(0,n.jsx)("h3",{children:"3. What is the name of this Komodo Server?"}),(0,n.jsxs)("p",{children:["Once Komodo Periphery agent was added to this machine you connected it to Komodo as a ",(0,n.jsx)("a",{href:"https://komo.do/docs/resources#server",children:(0,n.jsx)("strong",{children:"Server"})}),". Specify the name you gave it."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"serverName",children:(0,n.jsx)("strong",{children:"Server Name:"})}),(0,n.jsx)("input",{id:"serverName",type:"text",placeholder:"my-cool-server",onChange:e=>{k(e.target.value)},value:g})]}),(0,n.jsx)("h3",{children:"4. Where should generated Stacks be created?"}),(0,n.jsxs)("p",{children:["Choose one or more ",(0,n.jsx)("a",{href:"../usage/overview#outputs-1",children:"Outputs"}),":"]}),(0,n.jsxs)("p",{children:[(0,n.jsx)(x,{className:"margin-right--md",label:"Console",link:"#",variant:"primary",disabled:!0})," ",(0,n.jsx)(x,{label:"Komodo",link:"#",variant:"primary",outline:!t.api,onClick:G})]}),(0,n.jsxs)("div",{style:{display:t.api?"inherit":"none"},children:[(0,n.jsxs)("p",{children:["Komodo Import can create a ",(0,n.jsx)("a",{href:"../usage/resourceSync#create-sync-resource",children:"Sync Resource"})," with the generated Stacks in Komodo for you. This method ",(0,n.jsx)("strong",{children:"only"})," creates the Resource, it does not execute or change your existing Stacks."]}),(0,n.jsxs)("p",{children:["Create an ",(0,n.jsx)("a",{href:"../usage/overview#api-sync",children:"API Key and Secret"}),", then specify them below."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"url",children:(0,n.jsx)("strong",{children:"Komodo URL:"})}),(0,n.jsx)("input",{id:"url",type:"text",placeholder:"http://192.168.0.101:8120",onChange:e=>{N(e.target.value)},value:w})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"apiKey",children:(0,n.jsx)("strong",{children:"Komodo API Key:"})}),(0,n.jsx)("input",{id:"apiKey",type:"text",placeholder:"K-3A6btIPZYeBuD5ebSa9uD5ebuD5ebHIjYxT5sc",onChange:e=>{P(e.target.value)},value:E})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"apiSecret",children:(0,n.jsx)("strong",{children:"Komodo API Secret:"})}),(0,n.jsx)("input",{id:"apiSecret",type:"text",placeholder:"S-qnaXD1frutYlfC2ZYlfCSzqiYlfC1WYlfCVR34Yj4",onChange:e=>{U(e.target.value)},value:T})]}),(0,n.jsx)(m.Z,{children:(0,n.jsx)(R,{})})]}),(0,n.jsxs)("p",{children:["Generated Stacks are ",(0,n.jsx)("strong",{children:"always"})," output to docker logs as a ",(0,n.jsx)("a",{href:"../usage/resourceSync#create-sync-resource",children:"Sync Resource"}),"."]}),(0,n.jsx)(m.Z,{children:(0,n.jsx)(F.ZP,{})}),(0,n.jsx)("h3",{children:"5. Save your customized Compose file"}),(0,n.jsx)("p",{children:"The file below has been customized for your specific machine! Save this somewhere on the machine:"}),(0,n.jsx)(l(),{className:"rr-block .rr-block",title:"compose.yaml",language:"yaml",children:p.toString()})]})},D=e=>(0,n.jsx)(p.Z,{fallback:({error:e})=>(0,n.jsx)("div",{children:(0,n.jsxs)(d.Z,{type:"danger",children:[(0,n.jsx)("p",{children:"Interactive Quickstart crashed because of error! Sorry."}),(0,n.jsx)(l(),{children:e.stack})]})}),children:(0,n.jsx)(P,{...e})}),T={title:"Quickstart",sidebar_position:1},U=void 0,B={},G=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create Your Scenario",id:"create-your-scenario",level:2},{value:"Generate Stacks",id:"generate-stacks",level:2},{value:"Next Steps",id:"next-steps",level:2}];function M(e){let r={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"You have Komodo already setup"}),"\n",(0,n.jsxs)(r.li,{children:["You have installed ",(0,n.jsx)(r.a,{href:"https://komo.do/docs/connect-servers",children:"Periphery"})," on a machine","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["The Komodo ",(0,n.jsx)(r.a,{href:"https://komo.do/docs/resources#server",children:"Server"})," name is ",(0,n.jsx)(r.code,{children:"my-cool-server"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"create-your-scenario",children:"Create Your Scenario"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Follow the directions below, select your options, and fill in all fields to generate a customized Docker Compose file for your specific scenario."})}),"\n",(0,n.jsx)(D,{}),"\n",(0,n.jsx)(r.h2,{id:"generate-stacks",children:"Generate Stacks"}),"\n",(0,n.jsxs)(r.p,{children:["Run the customized ",(0,n.jsx)(r.code,{children:"compose.yaml"})," from above with ",(0,n.jsx)(r.code,{children:"docker compose"})," to generate Komodo Stacks from existing projects on your machine!"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:"# in the same directory as compose.yaml...\ndocker compose up --no-log-prefix\n"})}),"\n",(0,n.jsxs)(r.p,{children:["How the Stacks will be generated is determined by what you chose in ",(0,n.jsx)(r.strong,{children:"Step 4"}),". Refer to the expandable ",(0,n.jsx)(r.strong,{children:"Examples"})," in that step."]}),"\n",(0,n.jsx)(r.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,n.jsxs)(r.p,{children:["There are many more options (environmental variables) that can be used to customize how Stacks are generated, all found in ",(0,n.jsx)(r.a,{href:"../usage/overview#stacks",children:"Usage"})," docs. Some customizations that might interest you:"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"../usage/overview#stack-configuration",children:"Common Stack options"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Set image registry provider/account"}),"\n",(0,n.jsxs)(r.li,{children:["Set defaults for polling for new images (",(0,n.jsx)(r.code,{children:"POLL_FOR_UPDATE"}),") and auto updating (",(0,n.jsx)(r.code,{children:"AUTO_UPDATE"}),")"]}),"\n",(0,n.jsxs)(r.li,{children:["Set what compose files (",(0,n.jsx)(r.code,{children:"COMPOSE_FILE_GLOB"}),") and .env files (",(0,n.jsx)(r.code,{children:"ENV_FILE_GLOB"}),") to include, per Stack"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["For ",(0,n.jsx)(r.strong,{children:"Directory"})," generated stacks...","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["Include (",(0,n.jsx)(r.code,{children:"FOLDER_GLOB"}),") or exclude (",(0,n.jsx)(r.code,{children:"FOLDER_IGNORE_GLOB"}),") folders based on patterns"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["Configure Komodo Import to use the ",(0,n.jsx)(r.a,{href:"../usage/overview#komodo-api",children:"Komodo API"})," for better integration","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Uses existing Linked Repos for Git Based Stacks"}),"\n",(0,n.jsx)(r.li,{children:"Automatically configures Git Based Stacks to use existing, private Git Provider if git URL domains match"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["Additionally, review the ",(0,n.jsx)(r.a,{href:"../usage/resourceSync",children:"Sync Resource"})," guide to learn how to use them for creating Stacks in Komodo."]})]})}function L(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(M,{...e})}):M(e)}}}]);
+1
assets/js/74876495.ba7f8a86.js
···11+(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([["631"],{4849:function(e,r,o){e.exports={src:Object.assign(Object.create({toString(){return this.src}}),{srcSet:o.p+"assets/ideal-img/sync-resource-file.d733ef4.640.png 640w,"+o.p+"assets/ideal-img/sync-resource-file.cdf1733.739.png 739w",images:[{path:o.p+"assets/ideal-img/sync-resource-file.d733ef4.640.png",width:640,height:793},{path:o.p+"assets/ideal-img/sync-resource-file.cdf1733.739.png",width:739,height:916}],src:o.p+"assets/ideal-img/sync-resource-file.d733ef4.640.png",placeholder:void 0,width:640,height:793}),preSrc:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABDElEQVR4nG2P226DMBBEeQ7XgC9gm0swEAKFpKRpq1Zqpf7/P01lFyFF6cNod7VHs7MOlxokPSAiCjSrQbIaEZHY+QncgGxy/H1qFzErEOwzeBGHF7I7yDVgGKcILKzgBvTPySePIE0LCFXbwTMK6aadn6w9gxMlAqkyOSvELN+U8MJGChOJIM7ghImAPi4o2wU078HU0YrKDlS2to95ZUCJafnE/PKN+ukDor5A1DN43oOKBkx1K0gkuvGGdrhC6RlpOYKXA5hqV8cVNN82pyvyZgEvR1DV2aWpd6A5fb59YXn/gbanz8gOE3hxenTs5zf00yuK9oKsGm02Az2Aul+g9DN4MYAIDfIP+AtBl50yVJl/EgAAAABJRU5ErkJggg=="}},1719:function(e,r,o){"use strict";o.d(r,{ZP:()=>c,d$:()=>t});var s=o(5893),n=o(65);let t=[];function i(e){let r={a:"a",code:"code",p:"p",pre:"pre",...(0,n.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(o,{children:[(0,s.jsx)("summary",{children:"Console Output Example"}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{className:"language-shell",children:"docker compose up --no-log-prefix\n"})}),(0,s.jsx)(r.pre,{children:(0,s.jsx)(r.code,{children:'INFO : [Init] Debug Mode: NO\nINFO : [App] Version: 0.1.0\nINFO : [App] Files On Server Dir ENV: /filesOnServer -> Resolved: /filesOnServer\nINFO : [App] [Files On Server] Processing Stacks for 2 folders:\n/filesOnServer/immich\n/filesOnServer/plex\n/filesOnServer/uptime-kuma\nINFO : [App] [Files On Server] Compose File Glob: **/{compose,docker-compose}*.y?(a)ml\nINFO : [App] [Files On Server] Env Glob: **/.env\nINFO : [App] [Files On Server] [compose] Found Stack \'compose\' at dir /filesOnServer/compose.yaml\nWARN : [App] [Files On Server] [compose] Did not find any files patterns matching compose glob\nINFO : [App] [Files On Server] [compose] Stack config complete\n\n...\n\nINFO : [App] [Files On Server] Built Stack configs for 3 folders\nINFO : [App] Copy the text between the scissors to use as the *Resource File* contents within your Resource Sync\n\n\u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F\n\n[[stack]]\nname = "immich"\n\n[stack.config]\nserver = "my-cool-server"\nrun_directory = "/home/myUser/homelab/immich"\nfiles_on_host = true\nauto_update = false\npoll_for_updates = false\nfile_paths = [ "docker/docker-compose.yaml" ]\n\n[[stack]]\nname = "plex"\n\n[stack.config]\nserver = "my-cool-server"\nrun_directory = "/home/myUser/homelab/plex"\nfiles_on_host = true\nauto_update = false\npoll_for_updates = false\n\n[[stack]]\nname = "uptime-kuma"\n\n[stack.config]\nserver = "my-cool-server"\nrun_directory = "/home/myUser/homelab/uptime-kuma"\nfiles_on_host = true\nauto_update = false\npoll_for_updates = false\nenv_file_path = ".komodoEnv"\nadditional_env_files = [ ".env" ]\n\u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F \u2702\uFE0F\nINFO : [App] Done!\n'})}),(0,s.jsxs)(r.p,{children:["Copy the text between the scissors and ",(0,s.jsx)(r.a,{href:"../usage/resourceSync/#create-sync-resource",children:"create a new Sync Resource in Komodo"})]})]})}function c(e={}){let{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(i,{...e})}):i(e)}},58:function(e,r,o){"use strict";o.r(r),o.d(r,{frontMatter:()=>T,default:()=>L,toc:()=>G,metadata:()=>s,assets:()=>B,contentTitle:()=>U});var s=JSON.parse('{"id":"quickstart","title":"Quickstart","description":"Prerequisites","source":"@site/docs/quickstart.mdx","sourceDirName":".","slug":"/quickstart","permalink":"/komodo-import/docs/quickstart","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/quickstart.mdx","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"Quickstart","sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"Installation","permalink":"/komodo-import/docs/category/installation"}}'),n=o(5893),t=o(65);o(7057),o(4250);var i=o(7294),c=o(2292),l=o.n(c),a=o(9999),d=o(2575),m=o(461),p=o(5756),h=o(7026),u=o(1183);function x({size:e=null,outline:r=!1,variant:o="primary",block:s=!1,disabled:t=!1,className:i,style:c={},link:l,label:a,onClick:d=()=>null,...m}){let p=e?({sm:"sm",small:"sm",lg:"lg",large:"lg",medium:null})[e]:"",x=p?`button--${p}`:"",f=o?`button--${o}`:"";return(0,n.jsx)(u.Z,{to:t?null:l,children:(0,n.jsx)("button",{className:(0,h.Z)("button",x,r?"button--outline":"",f,s?"button--block":"",t?"disabled":"",i),style:c,role:"button","aria-disabled":t,onClick:e=>{e.preventDefault(),d()},...m,children:a})})}let f={borderRadius:"var(--ifm-button-border-radius) 0 0 var(--ifm-button-border-radius)"},j={borderRadius:"0 var(--ifm-button-border-radius) var(--ifm-button-border-radius) 0"},g={borderRadius:"0"};function y({size:e=null,variant:r="primary",block:o=!1,disabled:s=!1,className:t,style:i,options:c,value:l,defaultValue:a,onChange:d=()=>null}){if(void 0===c||0===c.length)return null;let m=c.map((o,s)=>{let t={style:g,outline:!0,size:e,variant:r,label:o[1],link:"#",onClick:()=>d(o[0])};return 0===s?t.style=f:s===c.length-1&&(t.style=j),(l??a)===o[0]&&(t.outline=!1),(0,n.jsx)(x,{...t},s)});return(0,n.jsx)("span",{children:m})}var v=o(6370),S=o(4697);function k(e){let r={code:"code",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(r.p,{children:["When using ",(0,n.jsx)(r.code,{children:"STACKS_FROM=compose"})," this should be the the most top-level directory that all projects are contained within, at some level."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"Example"}),(0,n.jsxs)(r.p,{children:[(0,n.jsx)(r.code,{children:"docker compose ls"})," reveals these projects:"]}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:"NAME STATUS CONFIG FILES\nimmich running /home/myUser/homelab/immich/compose.yaml\nplex running /home/myUser/homelab/plex/docker-compose.yaml\nproject1 running /home/myUser/localDev/myProjects/project1/compose.yaml\n"})}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:".\n\u2514\u2500\u2500 /home/myUser\n \u251C\u2500\u2500 homeLab\n \u2502 \u251C\u2500\u2500 immich\n \u2502 \u2502 \u2514\u2500\u2500 compose.yaml\n \u2502 \u2514\u2500\u2500 plex\n \u2502 \u251C\u2500\u2500 docker-compose.yaml\n \u2502 \u2514\u2500\u2500 .git\n \u2514\u2500\u2500 localDev\n \u2514\u2500\u2500 myProjects\n \u2514\u2500\u2500 project1\n \u2514\u2500\u2500 compose.yaml\n"})}),(0,n.jsxs)(r.p,{children:["Then ",(0,n.jsx)(r.strong,{children:"Host Directory"})," should be ",(0,n.jsx)(r.code,{children:"/home/myUser"})]})]})]})}function b(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(k,{...e})}):k(e)}function O(e){let r={code:"code",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(r.p,{children:["For ",(0,n.jsx)(r.code,{children:"STACKS_FROM=dir"})," this should be the immediate parent directory containing all your project folders."]}),"\n",(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"Example"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:".\n\u2514\u2500\u2500 /home/myUser/homelab/\n \u251C\u2500\u2500 immich/\n \u2502 \u2514\u2500\u2500 compose.yaml\n \u251C\u2500\u2500 plex/\n \u2502 \u251C\u2500\u2500 docker-compose.yaml\n \u2502 \u2514\u2500\u2500 .git\n \u2514\u2500\u2500 uptime-kuma/\n \u2514\u2500\u2500 compose.yaml\n"})}),(0,n.jsxs)(r.p,{children:["Then ",(0,n.jsx)(r.strong,{children:"Host Directory"})," should be ",(0,n.jsx)(r.code,{children:"/home/myUser/homelab"})]})]})]})}function A(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(O,{...e})}):O(e)}var F=o(1719),w=o(8494),N=o(4849),I=o.n(N);function E(e){let r={a:"a",code:"code",p:"p",pre:"pre",...(0,t.a)(),...e.components},{Details:o}=r;return o||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(o,{children:[(0,n.jsx)("summary",{children:"Komodo Example"}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-shell",children:"docker compose up --no-log-prefix\n"})}),(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{children:"INFO : [Init] Debug Mode: NO\nINFO : [App] Version: 0.1.0\nINFO : [App] Files On Server Dir ENV: /filesOnServer -> Resolved: /filesOnServer\nINFO : [App] [Files On Server] Processing Stacks for 2 folders:\n/filesOnServer/immich\n/filesOnServer/plex\n/filesOnServer/uptime-kuma\nINFO : [App] [Files On Server] Compose File Glob: **/{compose,docker-compose}*.y?(a)ml\nINFO : [App] [Files On Server] Env Glob: **/.env\nINFO : [App] [Files On Server] [compose] Found Stack 'compose' at dir /filesOnServer/compose.yaml\nWARN : [App] [Files On Server] [compose] Did not find any files patterns matching compose glob\nINFO : [App] [Files On Server] [compose] Stack config complete\n\n...\n\nINFO : [App] [Files On Server] Built Stack configs for 3 folders\nINFO : [App] Copy the text between the scissors to use as the *Resource File* contents within your Resource Sync\n\n...\n\nINFO : [App] [Sync API] Using 'komodo-import' as Sync Name\nVERBOSE: [App] [Sync API] KOMODO_URL: http://192.168.0.101:9120 | Normalized: http://192.168.0.101:9120/\nINFO : [App] [Sync API] Resource Sync created.\nINFO : [App] [Sync API] Resource Sync URL: http://192.168.0.101:9120/resource-syncs/689a41a04ed1b642f3053f57\n"})}),(0,n.jsxs)(r.p,{children:["The ",(0,n.jsx)(r.a,{href:"../usage/resourceSync#verify-sync-changes",children:"Sync Resource"})," is automatically created for you (but not executed!)"]}),(0,n.jsx)(w.Z,{img:I()})]})}function R(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(E,{...e})}):E(e)}let _=(0,v.wL)("services:\n komodo-import:\n image: foxxmd/komodo-import:latest\n restart: no\n volumes:\n - ./home/myUser/homelab:/filesOnServer\n environment:\n"),C=(0,v.wL)("socket-proxy:\n image: lscr.io/linuxserver/socket-proxy:latest\n environment:\n - CONTAINERS=1\n - INFO=1\n - POST=0\n - PING=1\n - VERSION=1\n volumes:\n - /var/run/docker.sock:/var/run/docker.sock:ro\n read_only: true\n tmpfs:\n - /run"),K=new RegExp(/(?:^|[\/\\])\.\S/),P=e=>{let{data:r,name:o,client:s=!1}=e,[t,c]=(0,i.useState)({stacksFrom:"dir",api:!1}),[p,h]=(0,i.useState)(_),[u,f]=i.useState(""),[j]=(0,S.Nr)(u,500),[g,k]=i.useState(""),[O]=(0,S.Nr)(g,500),[w,N]=i.useState(""),[I]=(0,S.Nr)(w,500),[E,P]=i.useState(""),[D]=(0,S.Nr)(E,500),[T,U]=i.useState(""),[B]=(0,S.Nr)(T,500),G=(0,i.useCallback)(()=>{c({...t,api:!t.api})},[t,c]);return(0,i.useEffect)(()=>{let e=_.clone(),r=void 0!==j&&""!==j.trim()?j:"/home/myUser/homelab",o=new v.Ru(`${r}:/filesOnServer`);o.commentBefore=`# ${"dir"===t.stacksFrom?"Parent directory where all subfolders are compose projects":"Top-most directory that contains all folders (at any level) that compose projects are found in"}`,e.setIn(["services","komodo-import","volumes",0],o),e.setIn(["services","komodo-import","environment"],new v.wr);let s=e.getIn(["services","komodo-import","environment"]),n=new v.Ru(`HOST_PARENT_PATH=${r}`);if(n.commentBefore="# Same as mounted directory above",s.add(n),K.test(r)){let e=new v.Ru("GLOB_DOT=true");e.commentBefore="# Forces glob to not ignore dot folders",s.add(e)}let i=new v.Ru(`STACKS_FROM=${t.stacksFrom}`);i.commentBefore="# Determines what sources to generate Stacks from",i.comment=`# ${"dir"===t.stacksFrom?"Generate stacks from subfolders in directory":"Generate stacks from compose projects"}`,s.add(i);let c=new v.Ru(`SERVER_NAME=${void 0!==O&&""!==O.trim()?O:"my-cool-server"}`);if(c.commentBefore="# Name of Server for this machine, in Komodo",s.add(c),t.api){let e=new v.Ru(`KOMODO_URL=${""===I?"http://192.168.KOMOMDO.IP:8120":I}`);e.spaceBefore=!0,e.commentBefore="# Configuration for interacting with Komodo API",s.add(e),s.add(`API_KEY=${""===D?"K-3A6btIPZYeBu_EXAMPLE_KEY":D}`),s.add(`API_SECRET=${""===B?"S-qnaXD1frutYlfC2ZYl_EXAMPLE_SECRET":B}`);let r=new v.Ru("OUTPUT_API_SYNC=true");r.comment="Create Sync Resource in Komodo",s.add(r)}if("compose"===t.stacksFrom){let r=new v.Ru("DOCKER_HOST=tcp://socket-proxy:2375");r.spaceBefore=!0,r.commentBefore="Tells Komodo Import how to connect to Docker",s.add(r);let o=new v.wr;o.add("socket-proxy"),e.setIn(["services","komodo-import","depends_on"],o),e.setIn(["services","socket-proxy"],C.get("socket-proxy")),e.getIn(["services","socket-proxy"]).commentBefore="# used to communicate with docker daemon"}h(e)},[t,j,O,D,B,I,h]),(0,n.jsxs)(i.Fragment,{children:[(0,n.jsxs)("h3",{children:["1. What ",(0,n.jsx)("a",{href:"../usage/overview#stack-sources",children:"Stack Sources"})," to generate Stacks from?"]}),(0,n.jsx)("p",{children:(0,n.jsx)(y,{options:[["dir","Directory"],["compose","Compose Projects"]],defaultValue:"dir",value:t.stacksFrom,variant:"primary",size:"lg",onChange:e=>c({...t,stacksFrom:e})})}),(0,n.jsx)("span",{style:{display:"dir"===t.stacksFrom?"inherit":"none"},children:(0,n.jsxs)(d.Z,{type:"info",children:["For ",(0,n.jsx)("strong",{children:"Directory"})," (",(0,n.jsx)(a.Z,{children:"STACKS_FROM=dir"}),") Komodo Import will try to generate Stacks from each ",(0,n.jsx)("strong",{children:"subfolder"})," inside the directory mounted into the container."]})}),(0,n.jsx)("span",{style:{display:"compose"===t.stacksFrom?"inherit":"none"},children:(0,n.jsxs)(d.Z,{type:"info",children:["For ",(0,n.jsx)("strong",{children:"Compose Projects"})," (",(0,n.jsx)(a.Z,{children:"STACKS_FROM=compose"}),") Komodo Import will try to generate Stacks from existing projects on your machine that were created with ",(0,n.jsx)(a.Z,{children:"docker compose up"})]})}),(0,n.jsx)("h3",{children:"2. Where are your existing projects located on your machine?"}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"hostDir",children:(0,n.jsx)("strong",{children:(0,n.jsx)("a",{href:"../usage/overview#host-directory",children:"Host Directory:"})})}),(0,n.jsx)("input",{id:"hostDir",type:"text",placeholder:"/home/myUser/homelab",onChange:e=>{f(e.target.value)},value:u})]}),"compose"===t.stacksFrom?(0,n.jsx)(m.Z,{children:(0,n.jsx)(b,{})}):(0,n.jsx)(m.Z,{children:(0,n.jsx)(A,{})}),(0,n.jsx)("h3",{children:"3. What is the name of this Komodo Server?"}),(0,n.jsxs)("p",{children:["Once Komodo Periphery agent was added to this machine you connected it to Komodo as a ",(0,n.jsx)("a",{href:"https://komo.do/docs/resources#server",children:(0,n.jsx)("strong",{children:"Server"})}),". Specify the name you gave it."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"serverName",children:(0,n.jsx)("strong",{children:"Server Name:"})}),(0,n.jsx)("input",{id:"serverName",type:"text",placeholder:"my-cool-server",onChange:e=>{k(e.target.value)},value:g})]}),(0,n.jsx)("h3",{children:"4. Where should generated Stacks be created?"}),(0,n.jsxs)("p",{children:["Choose one or more ",(0,n.jsx)("a",{href:"../usage/overview#outputs-1",children:"Outputs"}),":"]}),(0,n.jsxs)("p",{children:[(0,n.jsx)(x,{className:"margin-right--md",label:"Console",link:"#",variant:"primary",disabled:!0})," ",(0,n.jsx)(x,{label:"Komodo",link:"#",variant:"primary",outline:!t.api,onClick:G})]}),(0,n.jsxs)("div",{style:{display:t.api?"inherit":"none"},children:[(0,n.jsxs)("p",{children:["Komodo Import can create a ",(0,n.jsx)("a",{href:"../usage/resourceSync#create-sync-resource",children:"Sync Resource"})," with the generated Stacks in Komodo for you. This method ",(0,n.jsx)("strong",{children:"only"})," creates the Resource, it does not execute or change your existing Stacks."]}),(0,n.jsxs)("p",{children:["Create an ",(0,n.jsx)("a",{href:"../usage/overview#api-sync",children:"API Key and Secret"}),", then specify them below."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"url",children:(0,n.jsx)("strong",{children:"Komodo URL:"})}),(0,n.jsx)("input",{id:"url",type:"text",placeholder:"http://192.168.0.101:8120",onChange:e=>{N(e.target.value)},value:w})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"apiKey",children:(0,n.jsx)("strong",{children:"Komodo API Key:"})}),(0,n.jsx)("input",{id:"apiKey",type:"text",placeholder:"K-3A6btIPZYeBuD5ebSa9uD5ebuD5ebHIjYxT5sc",onChange:e=>{P(e.target.value)},value:E})]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("label",{className:"margin-right--sm",htmlFor:"apiSecret",children:(0,n.jsx)("strong",{children:"Komodo API Secret:"})}),(0,n.jsx)("input",{id:"apiSecret",type:"text",placeholder:"S-qnaXD1frutYlfC2ZYlfCSzqiYlfC1WYlfCVR34Yj4",onChange:e=>{U(e.target.value)},value:T})]}),(0,n.jsx)(m.Z,{children:(0,n.jsx)(R,{})})]}),(0,n.jsxs)("p",{children:["Generated Stacks are ",(0,n.jsx)("strong",{children:"always"})," output to docker logs as a ",(0,n.jsx)("a",{href:"../usage/resourceSync#create-sync-resource",children:"Sync Resource"}),"."]}),(0,n.jsx)(m.Z,{children:(0,n.jsx)(F.ZP,{})}),(0,n.jsx)("h3",{children:"5. Save your customized Compose file"}),(0,n.jsx)("p",{children:"The file below has been customized for your specific machine! Save this somewhere on the machine:"}),(0,n.jsx)(l(),{className:"rr-block .rr-block",title:"compose.yaml",language:"yaml",children:p.toString()})]})},D=e=>(0,n.jsx)(p.Z,{fallback:({error:e})=>(0,n.jsx)("div",{children:(0,n.jsxs)(d.Z,{type:"danger",children:[(0,n.jsx)("p",{children:"Interactive Quickstart crashed because of error! Sorry."}),(0,n.jsx)(l(),{children:e.stack})]})}),children:(0,n.jsx)(P,{...e})}),T={title:"Quickstart",sidebar_position:1},U=void 0,B={},G=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create Your Scenario",id:"create-your-scenario",level:2},{value:"Generate Stacks",id:"generate-stacks",level:2},{value:"Next Steps",id:"next-steps",level:2}];function M(e){let r={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"You have Komodo already setup"}),"\n",(0,n.jsxs)(r.li,{children:["You have installed ",(0,n.jsx)(r.a,{href:"https://komo.do/docs/connect-servers",children:"Periphery"})," on a machine","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["The Komodo ",(0,n.jsx)(r.a,{href:"https://komo.do/docs/resources#server",children:"Server"})," name is ",(0,n.jsx)(r.code,{children:"my-cool-server"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"create-your-scenario",children:"Create Your Scenario"}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.strong,{children:"Follow the directions below, select your options, and fill in all fields to generate a customized Docker Compose file for your specific scenario."})}),"\n",(0,n.jsx)(D,{}),"\n",(0,n.jsx)(r.h2,{id:"generate-stacks",children:"Generate Stacks"}),"\n",(0,n.jsxs)(r.p,{children:["Run the customized ",(0,n.jsx)(r.code,{children:"compose.yaml"})," from above with ",(0,n.jsx)(r.code,{children:"docker compose"})," to generate Komodo Stacks from existing projects on your machine!"]}),"\n",(0,n.jsx)(r.pre,{children:(0,n.jsx)(r.code,{className:"language-bash",children:"# in the same directory as compose.yaml...\ndocker compose up --no-log-prefix\n"})}),"\n",(0,n.jsxs)(r.p,{children:["How the Stacks will be generated is determined by what you chose in ",(0,n.jsx)(r.strong,{children:"Step 4"}),". Refer to the expandable ",(0,n.jsx)(r.strong,{children:"Examples"})," in that step."]}),"\n",(0,n.jsx)(r.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,n.jsxs)(r.p,{children:["There are many more options (environmental variables) that can be used to customize how Stacks are generated, all found in ",(0,n.jsx)(r.a,{href:"../usage/overview#stacks",children:"Usage"})," docs. Some customizations that might interest you:"]}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:[(0,n.jsx)(r.a,{href:"../usage/overview#stack-configuration",children:"Common Stack options"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Set image registry provider/account"}),"\n",(0,n.jsxs)(r.li,{children:["Set defaults for polling for new images (",(0,n.jsx)(r.code,{children:"POLL_FOR_UPDATE"}),") and auto updating (",(0,n.jsx)(r.code,{children:"AUTO_UPDATE"}),")"]}),"\n",(0,n.jsxs)(r.li,{children:["Set what compose files (",(0,n.jsx)(r.code,{children:"COMPOSE_FILE_GLOB"}),") and .env files (",(0,n.jsx)(r.code,{children:"ENV_FILE_GLOB"}),") to include, per Stack"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["For ",(0,n.jsx)(r.strong,{children:"Directory"})," generated stacks...","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsxs)(r.li,{children:["Include (",(0,n.jsx)(r.code,{children:"FOLDER_GLOB"}),") or exclude (",(0,n.jsx)(r.code,{children:"FOLDER_IGNORE_GLOB"}),") folders based on patterns"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.li,{children:["Configure Komodo Import to use the ",(0,n.jsx)(r.a,{href:"../usage/overview#komodo-api",children:"Komodo API"})," for better integration","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Uses existing Linked Repos for Git Based Stacks"}),"\n",(0,n.jsx)(r.li,{children:"Automatically configures Git Based Stacks to use existing, private Git Provider if git URL domains match"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(r.p,{children:["Additionally, review the ",(0,n.jsx)(r.a,{href:"../usage/resourceSync",children:"Sync Resource"})," guide to learn how to use them for creating Stacks in Komodo."]})]})}function L(e={}){let{wrapper:r}={...(0,t.a)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(M,{...e})}):M(e)}}}]);