Files
weiyu/docs/assets/js/b48830f7.b5451608.js
jack ning 412643f18f update
2025-01-03 07:31:48 +08:00

1 line
4.1 KiB
JavaScript

"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4549],{8231:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"deploy/cluster","title":"Cluster Deployment","description":"- Operating System: Ubuntu 20.04 LTS","source":"@site/i18n/en/docusaurus-plugin-content-docs/current/deploy/cluster.md","sourceDirName":"deploy","slug":"/deploy/cluster","permalink":"/docs/docs/deploy/cluster","draft":false,"unlisted":false,"editUrl":"https://github.com/bytedesk/bytedesk/docs/deploy/cluster.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_label":"Cluster","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Desktop Client","permalink":"/docs/docs/deploy/desktop"},"next":{"title":"Server","permalink":"/docs/docs/deploy/cicd/server"}}');var t=r(5723),l=r(6246);const i={sidebar_label:"Cluster",sidebar_position:5},d="Cluster Deployment",o={},c=[{value:"Architecture",id:"architecture",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Load Balancer",id:"load-balancer",level:3},{value:"Application Node",id:"application-node",level:3},{value:"Database Cluster",id:"database-cluster",level:3},{value:"Redis Cluster",id:"redis-cluster",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"cluster-deployment",children:"Cluster Deployment"})}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Operating System: Ubuntu 20.04 LTS"}),"\n",(0,t.jsx)(n.li,{children:"Server Requirements: Minimum 4 cores 8GB RAM per node, Recommended 8 cores 16GB RAM per node"}),"\n"]})}),"\n",(0,t.jsx)(n.h2,{id:"architecture",children:"Architecture"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Load Balancer (Nginx)"}),"\n",(0,t.jsx)(n.li,{children:"Multiple Application Nodes"}),"\n",(0,t.jsx)(n.li,{children:"Database Cluster (MySQL/PostgreSQL)"}),"\n",(0,t.jsx)(n.li,{children:"Redis Cluster"}),"\n",(0,t.jsx)(n.li,{children:"File Storage (MinIO)"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.h3,{id:"load-balancer",children:"Load Balancer"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-nginx",children:"upstream bytedesk {\n server 192.168.1.10:9003;\n server 192.168.1.11:9003;\n server 192.168.1.12:9003;\n}\n\nserver {\n listen 80;\n server_name api.example.com;\n\n location / {\n proxy_pass http://bytedesk;\n }\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"application-node",children:"Application Node"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"spring:\n datasource:\n url: jdbc:mysql://db.example.com:3306/bytedesk_im\n redis:\n cluster:\n nodes: redis1.example.com:6379,redis2.example.com:6379\n minio:\n url: https://minio.example.com\n"})}),"\n",(0,t.jsx)(n.h3,{id:"database-cluster",children:"Database Cluster"}),"\n",(0,t.jsxs)(n.p,{children:["Refer to ",(0,t.jsx)(n.a,{href:"/docs/deploy/depend/mysql",children:"MySQL Cluster"})," or ",(0,t.jsx)(n.a,{href:"/docs/deploy/depend/postgresql",children:"PostgreSQL Cluster"})," documentation."]}),"\n",(0,t.jsx)(n.h3,{id:"redis-cluster",children:"Redis Cluster"}),"\n",(0,t.jsxs)(n.p,{children:["Refer to ",(0,t.jsx)(n.a,{href:"/docs/deploy/depend/redis",children:"Redis Cluster"})," documentation."]})]})}function u(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},6246:(e,n,r)=>{r.d(n,{R:()=>i,x:()=>d});var s=r(2155);const t={},l=s.createContext(t);function i(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]);