[{"data":1,"prerenderedAt":357},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fengineering\u002Fdeployment":180,"\u002Fdocs\u002Fengineering\u002Fdeployment-surround":352},[4,8,20,24,59,65,69,73,77,100,104,108,112,116,120,124,128,160,164,168,172,176],{"title":5,"path":6,"stem":7},"","\u002Fdocs","1.docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12,"icon":19},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F01.getting-started\u002F1.index",[13,15],{"title":14,"path":10,"stem":11},"Bosca",{"title":16,"path":17,"stem":18},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","1.docs\u002F01.getting-started\u002F2.quickstart",false,{"title":21,"path":22,"stem":23},"Kit","\u002Fdocs\u002Fkit","1.docs\u002F01.kit",{"title":25,"path":26,"stem":27,"children":28},"Content","\u002Fdocs\u002Fcontent","1.docs\u002F02.content\u002F1.index",[29,31,53],{"title":30,"path":26,"stem":27},"Content Strategy",{"title":32,"path":33,"stem":34,"children":35},"Metadata","\u002Fdocs\u002Fcontent\u002Fmetadata","1.docs\u002F02.content\u002F1.metadata\u002F1.index",[36,37,41,45,49],{"title":32,"path":33,"stem":34},{"title":38,"path":39,"stem":40},"Supplementary","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fsupplementary","1.docs\u002F02.content\u002F1.metadata\u002F2.supplementary",{"title":42,"path":43,"stem":44},"Documents","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fdocuments","1.docs\u002F02.content\u002F1.metadata\u002F3.documents",{"title":46,"path":47,"stem":48},"Guides","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fguides","1.docs\u002F02.content\u002F1.metadata\u002F4.guides",{"title":50,"path":51,"stem":52},"Bible","\u002Fdocs\u002Fcontent\u002Fmetadata\u002Fbible","1.docs\u002F02.content\u002F1.metadata\u002F5.bible",{"title":54,"path":55,"stem":56,"children":57},"Collections","\u002Fdocs\u002Fcontent\u002Fcollections","1.docs\u002F02.content\u002F2.collections\u002F1.index",[58],{"title":54,"path":55,"stem":56},{"title":60,"path":61,"stem":62,"children":63},"Workflows","\u002Fdocs\u002Fworkflows","1.docs\u002F03.workflows\u002F1.index",[64],{"title":60,"path":61,"stem":62},{"title":66,"path":67,"stem":68},"Search","\u002Fdocs\u002Fsearch","1.docs\u002F04.search",{"title":70,"path":71,"stem":72},"Profiles","\u002Fdocs\u002Fprofiles","1.docs\u002F05.profiles",{"title":74,"path":75,"stem":76},"Organizations","\u002Fdocs\u002Forganizations","1.docs\u002F06.organizations",{"title":78,"path":79,"stem":80,"children":81,"icon":99},"Engineering","\u002Fdocs\u002Fengineering","1.docs\u002F07.engineering\u002F1.index",[82,83,87,91,95],{"title":78,"path":79,"stem":80},{"title":84,"path":85,"stem":86},"Infrastructure","\u002Fdocs\u002Fengineering\u002Finfrastructure","1.docs\u002F07.engineering\u002F2.infrastructure",{"title":88,"path":89,"stem":90},"Backend Services","\u002Fdocs\u002Fengineering\u002Fservices","1.docs\u002F07.engineering\u002F3.services",{"title":92,"path":93,"stem":94},"Deployment","\u002Fdocs\u002Fengineering\u002Fdeployment","1.docs\u002F07.engineering\u002F4.deployment",{"title":96,"path":97,"stem":98},"Framework Modules","\u002Fdocs\u002Fengineering\u002Fframework","1.docs\u002F07.engineering\u002F5.framework","i-heroicons-wrench-screwdriver",{"title":101,"path":102,"stem":103},"Identity Management","\u002Fdocs\u002Fidentity","1.docs\u002F07.identity",{"title":105,"path":106,"stem":107},"Localization","\u002Fdocs\u002Flocalization","1.docs\u002F08.localization",{"title":109,"path":110,"stem":111},"Analytics","\u002Fdocs\u002Fanalytics","1.docs\u002F09.analytics",{"title":113,"path":114,"stem":115},"AI & Agents","\u002Fdocs\u002Fai","1.docs\u002F10.ai",{"title":117,"path":118,"stem":119},"Messaging & Email","\u002Fdocs\u002Fmessages","1.docs\u002F11.messages",{"title":121,"path":122,"stem":123},"Scheduler","\u002Fdocs\u002Fscheduler","1.docs\u002F12.scheduler",{"title":125,"path":126,"stem":127},"Backup & Restore","\u002Fdocs\u002Fbackup","1.docs\u002F13.backup",{"title":129,"path":130,"stem":131,"children":132},"Architecture","\u002Fdocs\u002Farchitecture","1.docs\u002F14.architecture\u002F1.index",[133,134,137,141,145,149,153,157],{"title":129,"path":130,"stem":131},{"title":92,"path":135,"stem":136},"\u002Fdocs\u002Farchitecture\u002Fdeployment","1.docs\u002F14.architecture\u002F2.deployment",{"title":138,"path":139,"stem":140},"Security","\u002Fdocs\u002Farchitecture\u002Fsecurity","1.docs\u002F14.architecture\u002F3.security",{"title":142,"path":143,"stem":144},"Telemetry","\u002Fdocs\u002Farchitecture\u002Ftelemetry","1.docs\u002F14.architecture\u002F4.telemetry",{"title":146,"path":147,"stem":148},"Administration","\u002Fdocs\u002Farchitecture\u002Fadministration","1.docs\u002F14.architecture\u002F5.administration",{"title":150,"path":151,"stem":152},"GraphQL Schema","\u002Fdocs\u002Farchitecture\u002Fgraphql","1.docs\u002F14.architecture\u002F6.graphql",{"title":154,"path":155,"stem":156},"Storage","\u002Fdocs\u002Farchitecture\u002Fstorage","1.docs\u002F14.architecture\u002F7.storage",{"title":105,"path":158,"stem":159},"\u002Fdocs\u002Farchitecture\u002Flocalization","1.docs\u002F14.architecture\u002F8.localization",{"title":161,"path":162,"stem":163},"Scripting","\u002Fdocs\u002Fscripting","1.docs\u002F15.scripting",{"title":165,"path":166,"stem":167},"Configuration","\u002Fdocs\u002Fconfiguration","1.docs\u002F16.configuration",{"title":169,"path":170,"stem":171},"Forms","\u002Fdocs\u002Fforms","1.docs\u002F17.forms",{"title":173,"path":174,"stem":175},"Segmentation & Campaigns","\u002Fdocs\u002Fsegmentation","1.docs\u002F18.segmentation",{"title":177,"path":178,"stem":179},"Devices & Push","\u002Fdocs\u002Fdevices","1.docs\u002F19.devices",{"id":181,"title":92,"body":182,"description":192,"extension":347,"meta":348,"navigation":349,"path":93,"seo":350,"stem":94,"__hash__":351},"docs\u002F1.docs\u002F07.engineering\u002F4.deployment.md",{"type":183,"value":184,"toc":338},"minimark",[185,189,193,198,206,209,236,239,272,275,279,282,287,301,304,307,310,334],[186,187,92],"h1",{"id":188},"deployment",[190,191,192],"p",{},"Bosca is designed to be cloud-native and deployable in various environments, from local development machines to large-scale Kubernetes clusters.",[194,195,197],"h2",{"id":196},"docker-compose","Docker Compose",[190,199,200,201,205],{},"For development, testing, and small deployments, we provide a ",[202,203,204],"code",{},"docker-compose.yaml"," file that orchestrates all necessary dependencies.",[190,207,208],{},"To start the infrastructure:",[210,211,215],"pre",{"className":212,"code":213,"language":214,"meta":5,"style":5},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker compose up -d\n","bash",[202,216,217],{"__ignoreMap":5},[218,219,222,226,230,233],"span",{"class":220,"line":221},"line",1,[218,223,225],{"class":224},"sBMFI","docker",[218,227,229],{"class":228},"sfazB"," compose",[218,231,232],{"class":228}," up",[218,234,235],{"class":228}," -d\n",[190,237,238],{},"This commands spins up the following services:",[240,241,242,250,255,261,266],"ul",{},[243,244,245,249],"li",{},[246,247,248],"strong",{},"Data Stores",": PostgreSQL (Main & Warehouse)",[243,251,252,254],{},[246,253,66],{},": Meilisearch",[243,256,257,260],{},[246,258,259],{},"Cache \u002F PubSub \u002F Job Queue",": Redis or NATS",[243,262,263,265],{},[246,264,154],{},": S3Proxy (simulating AWS S3)",[243,267,268,271],{},[246,269,270],{},"Utilities",": Text Extractor, Jaeger, etc.",[190,273,274],{},"Once the infrastructure is up, you can run the Bosca application services (Server, Analytics, etc.) as standalone processes or containerized services.",[194,276,278],{"id":277},"production-guidelines","Production Guidelines",[190,280,281],{},"For production environments, we recommend a container-orchestrated setup (like Kubernetes).",[283,284,286],"h3",{"id":285},"scalability","Scalability",[240,288,289,295],{},[243,290,291,294],{},[246,292,293],{},"Stateless Services",": Bosca Server and Analytics Collector are stateless. They can be scaled horizontally behind a load balancer.",[243,296,297,300],{},[246,298,299],{},"Stateful Infrastructure",": Databases, Search Engines, and Message Queues should be managed as stateful sets or improved using managed cloud services (e.g., AWS RDS, Amazon SQS\u002FSNS, ElasticSearch).",[283,302,165],{"id":303},"configuration",[190,305,306],{},"Services are configured primarily via Environment Variables, making them 12-factor app compliant.",[190,308,309],{},"Key configurations include:",[240,311,312,322,328],{},[243,313,314,317,318,321],{},[202,315,316],{},"POSTGRES_USER"," \u002F ",[202,319,320],{},"POSTGRES_PASSWORD",": Database credentials.",[243,323,324,327],{},[202,325,326],{},"MEILI_MASTER_KEY",": Search engine security key.",[243,329,330,333],{},[202,331,332],{},"S3PROXY_IDENTITY",": Object storage access key.",[335,336,337],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":5,"searchDepth":339,"depth":339,"links":340},2,[341,342],{"id":196,"depth":339,"text":197},{"id":277,"depth":339,"text":278,"children":343},[344,346],{"id":285,"depth":345,"text":286},3,{"id":303,"depth":345,"text":165},"md",{},true,{"title":92,"description":192},"UJekFn5FZpYReshOQ_VsnQjY6NbiOhv_-xVCZHIv2JU",[353,355],{"title":88,"path":89,"stem":90,"description":354,"children":-1},"The backend logic is distributed across several key services, each responsible for a specific domain of the Bosca Framework.",{"title":96,"path":97,"stem":98,"description":356,"children":-1},"The Bosca Framework is composed of a rich set of modules, primarily split between the backend and general framework libraries. Each domain follows a pattern of a core-* module (interfaces and models) paired with an implementation module.",1775372112859]