[{"data":1,"prerenderedAt":1627},["ShallowReactive",2],{"nav-docs":3,"page-/docs/getting-started/access-domain":880,"surround-/docs/getting-started/access-domain":1621,"raw-/docs/getting-started/access-domain":1624},[4,56,226,546,634,773,806,863],{"title":5,"path":6,"stem":7,"children":8,"page":55},"Space Builder","/getting-started","00.getting-started",[9,13,17,23,29,33,38,42,46,50],{"title":10,"path":11,"stem":12,"children":-1},"Introducing SpaceBuilder","/getting-started/overview","00.getting-started/00.overview",{"title":14,"path":15,"stem":16,"children":-1},"Create a SetFN Account","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account",{"title":18,"path":19,"stem":20,"tags":21,"children":-1},"Installing on Linux","/getting-started/install-linux","00.getting-started/10.install-linux",[22],"recommended",{"title":24,"path":25,"stem":26,"tags":27,"children":-1},"Installing with Docker","/getting-started/install-docker","00.getting-started/12.install-docker",[28],"preparing",{"title":30,"path":31,"stem":32,"children":-1},"Installing on Windows","/getting-started/install-windows","00.getting-started/14.install-windows",{"title":34,"path":35,"stem":36,"tags":37,"children":-1},"Installing on macOS","/getting-started/install-macos","00.getting-started/16.install-macos",[28],{"title":39,"path":40,"stem":41,"children":-1},"Initial Setup","/getting-started/initial-setup","00.getting-started/20.initial-setup",{"title":43,"path":44,"stem":45,"children":-1},"License Activation","/getting-started/license-activation","00.getting-started/30.license-activation",{"title":47,"path":48,"stem":49,"children":-1},"Checking Your Access Address (Local/Internal Network)","/getting-started/access-url","00.getting-started/35.access-url",{"title":51,"path":52,"stem":53,"tags":54,"children":-1},"Choosing an External Access Method","/getting-started/access-domain","00.getting-started/40.access-domain",[22],false,{"title":57,"path":58,"stem":59,"children":60,"page":55},"Space management","/admin","10.admin",[61,74,107,136,171,184,209],{"title":62,"path":63,"stem":64,"children":65,"page":55},"Admin Home","/admin/home","10.admin/00.home",[66,70],{"title":67,"path":68,"stem":69,"children":-1},"Accessing the Admin Page","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access",{"title":71,"path":72,"stem":73,"children":-1},"License Management","/admin/home/license","10.admin/00.home/20.license",{"title":75,"path":76,"stem":77,"children":78,"page":55},"User management","/admin/user-management","10.admin/10.user-management",[79,83,87,91,95,99,103],{"title":80,"path":81,"stem":82,"children":-1},"Setting Signup Policy and Default Permissions","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy",{"title":84,"path":85,"stem":86,"children":-1},"Creating a User Account","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member",{"title":88,"path":89,"stem":90,"children":-1},"Editing a User Account","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member",{"title":92,"path":93,"stem":94,"children":-1},"Adding an Admin","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin",{"title":96,"path":97,"stem":98,"children":-1},"Team Management","/admin/user-management/team","10.admin/10.user-management/22.team",{"title":100,"path":101,"stem":102,"children":-1},"Level Management","/admin/user-management/level","10.admin/10.user-management/24.level",{"title":104,"path":105,"stem":106,"children":-1},"Checking Access Logs","/admin/user-management/access-log","10.admin/10.user-management/30.access-log",{"title":108,"path":109,"stem":110,"children":111,"page":55},"Service Configuration","/admin/service-config","10.admin/20.service-config",[112,116,120,124,128,132],{"title":113,"path":114,"stem":115,"children":-1},"File Area Settings","/admin/service-config/file-area","10.admin/20.service-config/10.file-area",{"title":117,"path":118,"stem":119,"children":-1},"Webhook Settings","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings",{"title":121,"path":122,"stem":123,"children":-1},"Community Settings","/admin/service-config/community-space","10.admin/20.service-config/22.community-space",{"title":125,"path":126,"stem":127,"children":-1},"AI Chatbot Policy Settings","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot",{"title":129,"path":130,"stem":131,"children":-1},"Email Settings","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings",{"title":133,"path":134,"stem":135,"children":-1},"Branding Settings","/admin/service-config/brand","10.admin/20.service-config/40.brand",{"title":137,"path":138,"stem":139,"children":140,"page":55},"Intelligent Service (AI)","/admin/ai","10.admin/30.ai",[141,145,149,153,159,163,167],{"title":142,"path":143,"stem":144,"children":-1},"AI Model Settings","/admin/ai/ai-model-setting","10.admin/30.ai/10.ai-model-setting",{"title":146,"path":147,"stem":148,"children":-1},"AI DB Settings","/admin/ai/ai-db-setting","10.admin/30.ai/20.ai-db-setting",{"title":150,"path":151,"stem":152,"children":-1},"Setting Up a Qdrant Server","/admin/ai/qdrant-server-setup","10.admin/30.ai/25.qdrant-server-setup",{"title":154,"path":155,"stem":156,"children":157},"Knowledge Indexing","/admin/ai/knowledge-indexing","10.admin/30.ai/30.knowledge-indexing",[158],{"title":154,"path":155,"stem":156,"children":-1},{"title":160,"path":161,"stem":162,"children":-1},"AI Integration and Policy Settings","/admin/ai/ai-link","10.admin/30.ai/40.ai-link",{"title":164,"path":165,"stem":166,"children":-1},"MCP Server Management","/admin/ai/mcp-server","10.admin/30.ai/50.mcp-server",{"title":168,"path":169,"stem":170,"children":-1},"Search Management","/admin/ai/search-management","10.admin/30.ai/60.search-management",{"title":172,"path":173,"stem":174,"children":175,"page":55},"plugin","/admin/plugin","10.admin/40.plugin",[176,180],{"title":177,"path":178,"stem":179,"children":-1},"Managing Plugins","/admin/plugin/overview","10.admin/40.plugin/00.overview",{"title":181,"path":182,"stem":183,"children":-1},"Extension Plugin Settings","/admin/plugin/settings","10.admin/40.plugin/10.settings",{"title":185,"path":186,"stem":187,"children":188,"page":55},"Security Management","/admin/security","10.admin/50.security",[189,193,197,201,205],{"title":190,"path":191,"stem":192,"children":-1},"Security Overview","/admin/security/overview","10.admin/50.security/00.overview",{"title":194,"path":195,"stem":196,"children":-1},"Checking the Audit Log","/admin/security/audit-log","10.admin/50.security/05.audit-log",{"title":198,"path":199,"stem":200,"children":-1},"Block Management","/admin/security/block-management","10.admin/50.security/10.block-management",{"title":202,"path":203,"stem":204,"children":-1},"Security Settings","/admin/security/security-setting","10.admin/50.security/12.security-setting",{"title":206,"path":207,"stem":208,"children":-1},"IP Access Restriction","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction",{"title":210,"path":211,"stem":212,"children":213,"page":55},"System management","/admin/system-admin","10.admin/60.system-admin",[214,218,222],{"title":215,"path":216,"stem":217,"children":-1},"Device Information","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info",{"title":219,"path":220,"stem":221,"children":-1},"Server Restart and System Maintenance","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart",{"title":223,"path":224,"stem":225,"children":-1},"Background Services","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service",{"title":227,"path":228,"stem":229,"children":230,"page":55},"Use workspace","/workspace","20.workspace",[231,264,281,337,448,495,527],{"title":232,"path":233,"stem":234,"children":235,"page":55},"menu","/workspace/menu","20.workspace/05.menu",[236,240,244,248,252,256,260],{"title":237,"path":238,"stem":239,"children":-1},"Workspace Overview","/workspace/menu/overview","20.workspace/05.menu/00.overview",{"title":241,"path":242,"stem":243,"children":-1},"Team Space","/workspace/menu/team-space","20.workspace/05.menu/05.team-space",{"title":245,"path":246,"stem":247,"children":-1},"Client Space","/workspace/menu/client-space","20.workspace/05.menu/06.client-space",{"title":249,"path":250,"stem":251,"children":-1},"Favorites","/workspace/menu/favorites","20.workspace/05.menu/10.favorites",{"title":253,"path":254,"stem":255,"children":-1},"Recent Documents","/workspace/menu/recent","20.workspace/05.menu/20.recent",{"title":257,"path":258,"stem":259,"children":-1},"External Share","/workspace/menu/external-share","20.workspace/05.menu/30.external-share",{"title":261,"path":262,"stem":263,"children":-1},"Trash","/workspace/menu/trash","20.workspace/05.menu/40.trash",{"title":265,"path":266,"stem":267,"children":268,"page":55},"Account","/workspace/account","20.workspace/10.account",[269,273,277],{"title":270,"path":271,"stem":272,"children":-1},"Sign Up and Log In","/workspace/account/signup","20.workspace/10.account/10.signup",{"title":274,"path":275,"stem":276,"children":-1},"Resetting Your Password","/workspace/account/reset-password","20.workspace/10.account/20.reset-password",{"title":278,"path":279,"stem":280,"children":-1},"Account Settings","/workspace/account/account-settings","20.workspace/10.account/30.account-settings",{"title":282,"path":283,"stem":284,"children":285,"page":55},"folder","/workspace/folder","20.workspace/20.folder",[286,290,294,298,302,308,312,316,321,325,329,333],{"title":287,"path":288,"stem":289,"children":-1},"Folder Basics","/workspace/folder/basic","20.workspace/20.folder/10.basic",{"title":291,"path":292,"stem":293,"children":-1},"Creating Multiple Folders at Once","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation",{"title":295,"path":296,"stem":297,"children":-1},"Filter","/workspace/folder/filter","20.workspace/20.folder/13.filter",{"title":299,"path":300,"stem":301,"children":-1},"Configuring Folder View Options","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options",{"title":303,"path":304,"stem":305,"tags":306,"children":-1},"Folder Web View","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view",[307],"hot",{"title":309,"path":310,"stem":311,"children":-1},"Folder Organization","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize",{"title":313,"path":314,"stem":315,"children":-1},"Folder Notice (README)","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme",{"title":317,"path":318,"stem":319,"tags":320,"children":-1},"Exporting Folder/File Lists","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export",[307],{"title":322,"path":323,"stem":324,"children":-1},"Setting Level-Based Access Permissions","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions",{"title":326,"path":327,"stem":328,"children":-1},"Setting Team-Based Access Permissions","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions",{"title":330,"path":331,"stem":332,"children":-1},"Folder Webhooks","/workspace/folder/webhook","20.workspace/20.folder/30.webhook",{"title":334,"path":335,"stem":336,"children":-1},"Work Automation Folder","/workspace/folder/automation","20.workspace/20.folder/40.automation",{"title":338,"path":339,"stem":340,"children":341,"page":55},"file","/workspace/file","20.workspace/30.file",[342,346,351,355,359,363,367,371,375,379,384,388,392,396,400,404,408,412,416,420,424,428,432,436,440,444],{"title":343,"path":344,"stem":345,"children":-1},"File Management Basics","/workspace/file/overview","20.workspace/30.file/00.overview",{"title":347,"path":348,"stem":349,"tags":350,"children":-1},"Checking the List While Viewing a File","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file",[307],{"title":352,"path":353,"stem":354,"children":-1},"Register disk files","/workspace/file/disk-file-registration","20.workspace/30.file/06.disk-file-registration",{"title":356,"path":357,"stem":358,"children":-1},"Viewing and Editing Text Files","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer",{"title":360,"path":361,"stem":362,"children":-1},"Viewing HTML Files","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer",{"title":364,"path":365,"stem":366,"children":-1},"Viewing and Editing CSV Files","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer",{"title":368,"path":369,"stem":370,"children":-1},"Viewing Image/Video Files","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer",{"title":372,"path":373,"stem":374,"children":-1},"Viewing Office/PDF Files","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer",{"title":376,"path":377,"stem":378,"children":-1},"Pasting Web Pages (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html",{"title":380,"path":381,"stem":382,"tags":383,"children":-1},"Pasting Screenshots","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot",[307],{"title":385,"path":386,"stem":387,"children":-1},"Pasting Markdown (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md",{"title":389,"path":390,"stem":391,"children":-1},"Screen Recording","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording",{"title":393,"path":394,"stem":395,"children":-1},"File Tags","/workspace/file/file-tag","20.workspace/30.file/33.file-tag",{"title":397,"path":398,"stem":399,"children":-1},"Bulk Renaming Files","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise",{"title":401,"path":402,"stem":403,"children":-1},"File Conversion","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview",{"title":405,"path":406,"stem":407,"children":-1},"Template Files","/workspace/file/templates","20.workspace/30.file/41.templates",{"title":409,"path":410,"stem":411,"children":-1},"To-Do List","/workspace/file/template-todo","20.workspace/30.file/42.template-todo",{"title":413,"path":414,"stem":415,"children":-1},"Approval Form","/workspace/file/template-approval","20.workspace/30.file/43.template-approval",{"title":417,"path":418,"stem":419,"children":-1},"Kanban Board","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban",{"title":421,"path":422,"stem":423,"children":-1},"Timeline","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline",{"title":425,"path":426,"stem":427,"children":-1},"Memo","/workspace/file/template-memo","20.workspace/30.file/46.template-memo",{"title":429,"path":430,"stem":431,"children":-1},"AI Chat File","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":433,"path":434,"stem":435,"children":-1},"Checking the File Change History","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail",{"title":437,"path":438,"stem":439,"children":-1},"File Version Control","/workspace/file/version-trail","20.workspace/30.file/51.version-trail",{"title":441,"path":442,"stem":443,"children":-1},"Edit Lock","/workspace/file/file-lock","20.workspace/30.file/52.file-lock",{"title":445,"path":446,"stem":447,"children":-1},"File Encryption","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt",{"title":449,"path":450,"stem":451,"children":452,"page":55},"Collaboration","/workspace/cooperation","20.workspace/35.cooperation",[453,457,461,465,470,474,478,482,487,491],{"title":454,"path":455,"stem":456,"children":-1},"File/Folder Comments","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments",{"title":458,"path":459,"stem":460,"children":-1},"Chat","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat",{"title":462,"path":463,"stem":464,"children":-1},"Collaboration Chat and Edit Lock","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat",{"title":466,"path":467,"stem":468,"tags":469,"children":-1},"Following a Team Member's Location","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location",[307],{"title":471,"path":472,"stem":473,"children":-1},"Mentions","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention",{"title":475,"path":476,"stem":477,"children":-1},"Direct Messages","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm",{"title":479,"path":480,"stem":481,"children":-1},"Notification Inbox","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox",{"title":483,"path":484,"stem":485,"tags":486,"children":-1},"Checking Team Activity","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity",[307],{"title":488,"path":489,"stem":490,"children":-1},"Creating an External Share Link","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",{"title":492,"path":493,"stem":494,"children":-1},"Sending an External Share Link by Email","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email",{"title":496,"path":497,"stem":498,"children":499,"page":55},"Search","/workspace/search","20.workspace/40.search",[500,504,509,515,519,523],{"title":501,"path":502,"stem":503,"children":-1},"File Search","/workspace/search/search","20.workspace/40.search/00.search",{"title":505,"path":506,"stem":507,"tags":508,"children":-1},"Context Search (AI Search)","/workspace/search/context-search","20.workspace/40.search/10.context-search",[307],{"title":510,"path":511,"stem":512,"tags":513,"children":-1},"Image Search","/workspace/search/image-search","20.workspace/40.search/20.image-search",[514],"new",{"title":516,"path":517,"stem":518,"children":-1},"Chat Search","/workspace/search/chat-search","20.workspace/40.search/30.chat-search",{"title":520,"path":521,"stem":522,"children":-1},"Comment Search","/workspace/search/comment-search","20.workspace/40.search/40.comment-search",{"title":524,"path":525,"stem":526,"children":-1},"Synonym Search","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search",{"title":528,"path":529,"stem":530,"children":531,"page":55},"AI","/workspace/ai","20.workspace/50.ai",[532,536,541],{"title":533,"path":534,"stem":535,"children":-1},"AI Features Summary","/workspace/ai/overview","20.workspace/50.ai/00.overview",{"title":537,"path":538,"stem":539,"tags":540,"children":-1},"Requesting Work from the Local AI","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[307],{"title":542,"path":543,"stem":544,"tags":545,"children":-1},"Using External AI","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai",[514],{"title":547,"path":548,"stem":549,"children":550,"page":55},"Webspace","/webspace","40.webspace",[551,555,559,563,567,571,576,580,584,588,592,621],{"title":552,"path":553,"stem":554,"children":-1},"What is WebSpace?","/webspace/overview","40.webspace/00.overview",{"title":556,"path":557,"stem":558,"children":-1},"Deploying a Website","/webspace/website-release","40.webspace/10.website-release",{"title":560,"path":561,"stem":562,"children":-1},"Create a schema file (.sfn)","/webspace/create-database","40.webspace/20.create-database",{"title":564,"path":565,"stem":566,"children":-1},"Build APIs and deploy a database","/webspace/api-overview","40.webspace/24.api-overview",{"title":568,"path":569,"stem":570,"children":-1},"Checking the Frontend Sample","/webspace/frontend-example","40.webspace/26.frontend-example",{"title":572,"path":573,"stem":574,"tags":575,"children":-1},"Building an Internal Team Web Service","/webspace/internal-webservice","40.webspace/32.internal-webservice",[307],{"title":577,"path":578,"stem":579,"children":-1},"Building a Publicly Accessible Web Service","/webspace/external-webservice","40.webspace/34.external-webservice",{"title":581,"path":582,"stem":583,"children":-1},"Import and export SQL","/webspace/sql-converter","40.webspace/42.sql-converter",{"title":585,"path":586,"stem":587,"children":-1},"Developer Tip 2: Code Converter","/webspace/code-converter","40.webspace/44.code-converter",{"title":589,"path":590,"stem":591,"children":-1},"Performance and scaling","/webspace/performance","40.webspace/48.performance",{"title":593,"path":594,"stem":595,"children":596,"page":55},"Webspace Management","/webspace/admin","40.webspace/50.admin",[597,601,605,609,613,617],{"title":598,"path":599,"stem":600,"children":-1},"Get started with WebSpace administration","/webspace/admin/overview","40.webspace/50.admin/00.overview",{"title":602,"path":603,"stem":604,"children":-1},"Operations","/webspace/admin/operations","40.webspace/50.admin/10.operations",{"title":606,"path":607,"stem":608,"children":-1},"Workspace access","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access",{"title":610,"path":611,"stem":612,"children":-1},"API & site security","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security",{"title":614,"path":615,"stem":616,"children":-1},"Services and capacity","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity",{"title":618,"path":619,"stem":620,"children":-1},"Deployment management and frontend releases","/webspace/admin/deployments","40.webspace/50.admin/50.deployments",{"title":622,"path":623,"stem":624,"children":625,"page":55},"Try WebSpace","/webspace/examples","40.webspace/60.examples",[626,630],{"title":627,"path":628,"stem":629,"children":-1},"WebSpace examples","/webspace/examples/overview","40.webspace/60.examples/00.overview",{"title":631,"path":632,"stem":633,"children":-1},"Build a real-time Gomoku game","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",{"title":635,"path":636,"stem":637,"children":638,"page":55},"Using plugin","/plugin","50.plugin",[639,643,660,704,722,752],{"title":640,"path":641,"stem":642,"children":-1},"Plugin Overview","/plugin/overview","50.plugin/00.overview",{"title":644,"path":645,"stem":646,"children":647,"page":55},"Calendar","/plugin/calendar","50.plugin/10.calendar",[648,652,656],{"title":649,"path":650,"stem":651,"children":-1},"Calendar Introduction","/plugin/calendar/overview","50.plugin/10.calendar/00.overview",{"title":653,"path":654,"stem":655,"children":-1},"Creating, Editing, and Deleting Events","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event",{"title":657,"path":658,"stem":659,"children":-1},"Checking Activity History","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity",{"title":661,"path":662,"stem":663,"children":664,"page":55},"Email","/plugin/email","50.plugin/20.email",[665,669,672,676,680,684,688,692,696,700],{"title":666,"path":667,"stem":668,"children":-1},"Email Introduction","/plugin/email/overview","50.plugin/20.email/00.overview",{"title":129,"path":670,"stem":671,"children":-1},"/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting",{"title":673,"path":674,"stem":675,"children":-1},"Connect an External Email Account","/plugin/email/external-email","50.plugin/20.email/07.external-email",{"title":677,"path":678,"stem":679,"children":-1},"Basic Email Functionality","/plugin/email/email-basic","50.plugin/20.email/10.email-basic",{"title":681,"path":682,"stem":683,"children":-1},"Composing and Sending Email","/plugin/email/email-compose","50.plugin/20.email/20.email-compose",{"title":685,"path":686,"stem":687,"children":-1},"Attaching Files","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment",{"title":689,"path":690,"stem":691,"children":-1},"Mail Folder Management","/plugin/email/email-folders","50.plugin/20.email/40.email-folders",{"title":693,"path":694,"stem":695,"children":-1},"Automatic Email Classification","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify",{"title":697,"path":698,"stem":699,"children":-1},"Email File Archiving and Sharing","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space",{"title":701,"path":702,"stem":703,"children":-1},"Email Security","/plugin/email/email-security","50.plugin/20.email/70.email-security",{"title":705,"path":706,"stem":707,"children":708,"page":55},"Workflow","/plugin/workflow","50.plugin/30.workflow",[709,713,718],{"title":710,"path":711,"stem":712,"children":-1},"Workflow Introduction","/plugin/workflow/overview","50.plugin/30.workflow/00.overview",{"title":714,"path":715,"stem":716,"tags":717,"children":-1},"Creating a New Workflow","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[307],{"title":719,"path":720,"stem":721,"children":-1},"Checking Execution History","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history",{"title":723,"path":724,"stem":725,"children":726,"page":55},"Pinetuning (AI learning)","/plugin/fine-tuning","50.plugin/40.fine-tuning",[727,732,736,740,744,748],{"title":728,"path":729,"stem":730,"tags":731,"children":-1},"Fine-tuning Introduction","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview",[307],{"title":733,"path":734,"stem":735,"children":-1},"Preprocessing Training Data","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing",{"title":737,"path":738,"stem":739,"children":-1},"Training","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training",{"title":741,"path":742,"stem":743,"children":-1},"Evaluation","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation",{"title":745,"path":746,"stem":747,"children":-1},"Chat Test","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test",{"title":749,"path":750,"stem":751,"children":-1},"Export","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export",{"title":753,"path":754,"stem":755,"children":756,"page":55},"EDC (data collection)","/plugin/edc","50.plugin/50.edc",[757,761,765,769],{"title":758,"path":759,"stem":760,"children":-1},"EDC Introduction","/plugin/edc/overview","50.plugin/50.edc/00.overview",{"title":762,"path":763,"stem":764,"children":-1},"Data Entry, Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry",{"title":766,"path":767,"stem":768,"children":-1},"Builder","/plugin/edc/builder","50.plugin/50.edc/20.builder",{"title":770,"path":771,"stem":772,"children":-1},"User/Site Settings","/plugin/edc/account","50.plugin/50.edc/30.account",{"title":774,"path":775,"stem":776,"children":777,"page":55},"FAQ","/faq","99.FAQ",[778,782,786,790,794,798,802],{"title":779,"path":780,"stem":781,"children":-1},"SetFN vs Cloud Services Comparison","/faq/comparison-cloud","99.FAQ/10.comparison-cloud",{"title":783,"path":784,"stem":785,"children":-1},"SetFN vs NAS Comparison","/faq/comparison-nas","99.FAQ/20.comparison-nas",{"title":787,"path":788,"stem":789,"children":-1},"Security Policy","/faq/security-policy","99.FAQ/30.security-policy",{"title":791,"path":792,"stem":793,"children":-1},"Why Is SetFN Fast","/faq/why-fast","99.FAQ/40.why-fast",{"title":795,"path":796,"stem":797,"children":-1},"License FAQ","/faq/license-faq","99.FAQ/50.license-faq",{"title":799,"path":800,"stem":801,"children":-1},"AI Features FAQ","/faq/ai-faq","99.FAQ/60.ai-faq",{"title":803,"path":804,"stem":805,"children":-1},"Troubleshooting Guide","/faq/troubleshooting","99.FAQ/70.troubleshooting",{"title":807,"path":808,"stem":809,"children":810,"page":55},"Applied (draft)","/draft","draft",[811,815,819,823,827,831,835,839,843,847,851,855,859],{"title":812,"path":813,"stem":814,"children":-1},"Example 1. Building an Introduction Page","/draft/static-intro","draft/05.static-intro",{"title":816,"path":817,"stem":818,"children":-1},"Example 2. Building a Notice Board","/draft/public-notice-board","draft/07.public-notice-board",{"title":820,"path":821,"stem":822,"children":-1},"Example 3. Building a Coffee Chat Booking System","/draft/coffee-chat-booking","draft/08.coffee-chat-booking",{"title":824,"path":825,"stem":826,"children":-1},"Example 4. Building a Leave Request System","/draft/leave-request","draft/09.leave-request",{"title":828,"path":829,"stem":830,"children":-1},"Example 5. Building Real-Time Team Chat","/draft/team-chat","draft/10.team-chat",{"title":832,"path":833,"stem":834,"children":-1},"Example 6. Building a Job Application Intake","/draft/client-submission","draft/11.client-submission",{"title":836,"path":837,"stem":838,"children":-1},"Example 7. Building an Issue Tracker with Team and Level Conditions","/draft/crm-basic","draft/12.crm-basic",{"title":840,"path":841,"stem":842,"children":-1},"Example 8. Building a Status Filter and Stats Summary Screen","/draft/crm-search-filter","draft/13.crm-search-filter",{"title":844,"path":845,"stem":846,"children":-1},"Example 9. Building Real-Time Community Chat with Moderation","/draft/community-moderation","draft/14.community-moderation",{"title":848,"path":849,"stem":850,"children":-1},"Example 10. Building a Real-Time Attendance Check / Poll","/draft/attendance-poll","draft/15.attendance-poll",{"title":852,"path":853,"stem":854,"children":-1},"Example 11. Building a Debate Battle","/draft/debate-battle","draft/16.debate-battle",{"title":856,"path":857,"stem":858,"children":-1},"Example 13. Building an Announcement Read Receipt","/draft/announcement-read","draft/18.announcement-read",{"title":860,"path":861,"stem":862,"children":-1},"Example 14. Building an Inventory Management System","/draft/inventory-management","draft/19.inventory-management",{"title":864,"path":865,"stem":866,"children":867,"page":55},"SJAUTO","/sjauto","sjauto",[868,872,876],{"title":869,"path":870,"stem":871,"children":-1},"Access the Administrator Page","/sjauto/admin-page-access","sjauto/00.admin-page-access",{"title":873,"path":874,"stem":875,"children":-1},"Sign Up and Sign In","/sjauto/signup","sjauto/10.signup",{"title":877,"path":878,"stem":879,"children":-1},"AI Chat Files","/sjauto/ai-chat-file","sjauto/ai-chat-file",{"id":881,"title":51,"body":882,"cover":1602,"description":1603,"extension":1604,"image":1602,"meta":1605,"navigation":1373,"path":52,"seo":1607,"stem":53,"tags":1619,"thumbnail":1602,"__hash__":1620},"docs_en/00.getting-started/40.access-domain.md",{"type":883,"value":884,"toc":1582},"minimal",[885,889,893,896,907,910,915,924,927,943,947,1058,1068,1072,1077,1080,1090,1096,1100,1110,1116,1119,1123,1129,1132,1154,1160,1164,1191,1194,1238,1243,1247,1250,1291,1295,1298,1302,1305,1332,1340,1344,1347,1422,1430,1433,1441,1444,1464,1473,1476,1480,1486,1497,1501,1504,1527,1530,1534,1557,1561,1578],[886,887,51],"h1",{"id":888},"choosing-an-external-access-method",[890,891,892],"p",{},"SetFN SpaceBuilder can be used right away on the same network immediately after installation. To access it from outside the office or over a mobile network, you need to establish a secure connection path between the server and the outside internet.",[890,894,895],{},"This may sound complicated at first, but the goal is simple.",[897,898,904],"pre",{"className":899,"code":901,"language":902,"meta":903},[900],"language-text","https://space.example.com\n        ↓\nExternal access connection method\n        ↓\nhttp://localhost:8510\n","text","",[905,906,901],"code",{"__ignoreMap":903},[890,908,909],{},"Using Cloudflare Tunnel, you can set up this connection relatively easily. You don't need to expose the server's port directly to the internet, and Cloudflare handles the HTTPS certificate and domain connection for you.",[911,912,914],"h2",{"id":913},"first-check-whether-you-actually-need-external-access","First, check whether you actually need external access",[890,916,917,918,923],{},"If you'll only use it within the same office or Wi-Fi network, you don't need to configure external access. Connect using the internal IP address as described in ",[919,920,922],"a",{"href":921},"./access-url","Checking Your Space Access Address",".",[890,925,926],{},"External access configuration is needed in the following situations.",[928,929,930,934,937,940],"ul",{},[931,932,933],"li",{},"Accessing your space from home or while traveling",[931,935,936],{},"Accessing it over mobile data",[931,938,939],{},"Sharing a link with external partners or customers",[931,941,942],{},"Using a single space across multiple business locations or networks",[911,944,946],{"id":945},"which-method-should-you-choose","Which method should you choose?",[948,949,950,969],"table",{},[951,952,953],"thead",{},[954,955,956,960,963,966],"tr",{},[957,958,959],"th",{},"Method",[957,961,962],{},"Recommended for",[957,964,965],{},"Advantages",[957,967,968],{},"What you manage directly",[970,971,972,994,1010,1026,1042],"tbody",{},[954,973,974,981,984,987],{},[975,976,977],"td",{},[978,979,980],"strong",{},"Cloudflare Tunnel (recommended)",[975,982,983],{},"Users configuring external access for the first time, environments without a fixed public IP",[975,985,986],{},"No need to open router ports, keeps the origin server IP private, easy HTTPS and domain connection",[975,988,989,990,993],{},"Cloudflare account, domain, ",[905,991,992],{},"cloudflared"," service",[954,995,996,1001,1004,1007],{},[975,997,998],{},[978,999,1000],{},"Caddy reverse proxy",[975,1002,1003],{},"Users running their own server who want to keep the setup simple",[975,1005,1006],{},"Simple configuration, automatic HTTPS certificate issuance and renewal",[975,1008,1009],{},"DNS, public IP, firewall, port forwarding, Caddy",[954,1011,1012,1017,1020,1023],{},[975,1013,1014],{},[978,1015,1016],{},"NGINX reverse proxy",[975,1018,1019],{},"Organizations with existing NGINX infrastructure or a need for fine-grained control",[975,1021,1022],{},"Highly flexible configuration, easy integration with existing web infrastructure",[975,1024,1025],{},"DNS, certificates, firewall, port forwarding, NGINX",[954,1027,1028,1033,1036,1039],{},[975,1029,1030],{},[978,1031,1032],{},"Router port forwarding",[975,1034,1035],{},"Test environments, or users who can manage their network directly",[975,1037,1038],{},"Direct connection without a separate tunneling service",[975,1040,1041],{},"Public IP, router, firewall, HTTPS, security updates",[954,1043,1044,1049,1052,1055],{},[975,1045,1046],{},[978,1047,1048],{},"VPN/private network",[975,1050,1051],{},"Organizations that want to allow access only to their own members privately",[975,1053,1054],{},"Doesn't expose the service to the public internet",[975,1056,1057],{},"VPN server and client device configuration",[1059,1060,1061],"note",{},[890,1062,1063,1064,1067],{},"If you have no special infrastructure requirements, ",[978,1065,1066],{},"we recommend starting with Cloudflare Tunnel."," Running your own reverse proxy offers more flexibility, but the operator has to take on responsibility for the network, certificates, and security updates.",[911,1069,1071],{"id":1070},"understanding-tunneling-and-reverse-proxying","Understanding tunneling and reverse proxying",[1073,1074,1076],"h3",{"id":1075},"tunneling","Tunneling",[890,1078,1079],{},"A Connector running inside the server first establishes a secure connection to an external service. Incoming requests then reach the server by following this connection in reverse.",[890,1081,1082,1083,1085,1086,1089],{},"With Cloudflare Tunnel, ",[905,1084,992],{}," creates an ",[978,1087,1088],{},"outbound connection"," from the server to Cloudflare. As a result, in a typical setup you don't need to open ports 80, 443, or 8510 on your router to the outside.",[897,1091,1094],{"className":1092,"code":1093,"language":902,"meta":903},[900],"User → Cloudflare → Already-established Tunnel → SetFN :8510\n",[905,1095,1093],{"__ignoreMap":903},[1073,1097,1099],{"id":1098},"reverse-proxying","Reverse proxying",[890,1101,1102,1103,1106,1107,923],{},"Caddy or NGINX first receives external requests and then forwards them to the internal SetFN service. Users connect via ",[905,1104,1105],{},"https://space.example.com"," without needing to know about port ",[905,1108,1109],{},"8510",[897,1111,1114],{"className":1112,"code":1113,"language":902,"meta":903},[900],"User → Caddy or NGINX :443 → SetFN :8510\n",[905,1115,1113],{"__ignoreMap":903},[890,1117,1118],{},"A reverse proxy has the advantage of letting you manage HTTPS termination, domain routing, access logs, and rate limiting all in one place.",[911,1120,1122],{"id":1121},"recommended-method-cloudflare-tunnel","Recommended method: Cloudflare Tunnel",[890,1124,1125,1126,1128],{},"Cloudflare Tunnel connects an internal service to a public domain without requiring the origin server to have a publicly routable IP address. Because ",[905,1127,992],{}," initiates the connection to the Cloudflare network, it also reduces paths for direct bypass access to the origin server.",[890,1130,1131],{},"Here's what you can expect when setting it up for the first time.",[928,1133,1134,1137,1140,1145,1148,1151],{},[931,1135,1136],{},"No need to configure port forwarding in your router's admin screen",[931,1138,1139],{},"Relatively unaffected by dynamic public IPs or ISP network conditions",[931,1141,1142,1143],{},"Use an address in the form ",[905,1144,1105],{},[931,1146,1147],{},"Reduced burden of issuing and renewing external certificates",[931,1149,1150],{},"Optionally restrict allowed users or email domains with Cloudflare Access",[931,1152,1153],{},"A single Connector can connect multiple internal web services via separate subdomains",[1155,1156,1157],"warning",{},[890,1158,1159],{},"Adding only a Public Hostname to a Tunnel makes that address reachable from the internet. If you want to expose it only to organization members, also configure a Cloudflare Access application with an allow policy.",[911,1161,1163],{"id":1162},"cloudflare-tunnel-configuration-flow","Cloudflare Tunnel configuration flow",[1165,1166,1167,1170,1173,1179,1182,1185,1188],"ol",{},[931,1168,1169],{},"Connect the domain you want to use to Cloudflare.",[931,1171,1172],{},"Create a Tunnel in the Cloudflare dashboard.",[931,1174,1175,1176,1178],{},"Install ",[905,1177,992],{}," on the SpaceBuilder server.",[931,1180,1181],{},"Run the Connector using the command shown in the dashboard.",[931,1183,1184],{},"Connect the domain and SetFN address in the Published application.",[931,1186,1187],{},"Add a Cloudflare Access policy if needed.",[931,1189,1190],{},"Verify access from an external network.",[890,1192,1193],{},"Use the following values for the Service URL of the Published application.",[948,1195,1196,1206],{},[951,1197,1198],{},[954,1199,1200,1203],{},[957,1201,1202],{},"Field",[957,1204,1205],{},"Example",[970,1207,1208,1218,1228],{},[954,1209,1210,1213],{},[975,1211,1212],{},"Public hostname",[975,1214,1215],{},[905,1216,1217],{},"space.example.com",[954,1219,1220,1223],{},[975,1221,1222],{},"Service type",[975,1224,1225],{},[905,1226,1227],{},"HTTP",[954,1229,1230,1233],{},[975,1231,1232],{},"Service URL",[975,1234,1235],{},[905,1236,1237],{},"http://localhost:8510",[890,1239,1240,1241,923],{},"If you changed the SetFN port, enter the actual service port instead of ",[905,1242,1109],{},[911,1244,1246],{"id":1245},"official-cloudflare-guides","Official Cloudflare guides",[890,1248,1249],{},"Cloudflare's screens and installation commands may change, so also check the following official documentation when setting things up.",[928,1251,1252,1260,1267,1277,1284],{},[931,1253,1254],{},[919,1255,1259],{"href":1256,"rel":1257},"https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/",[1258],"nofollow","Cloudflare Tunnel overview",[931,1261,1262],{},[919,1263,1266],{"href":1264,"rel":1265},"https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/",[1258],"Creating a Tunnel from the dashboard",[931,1268,1269],{},[919,1270,1273,1274,1276],{"href":1271,"rel":1272},"https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/",[1258],"Installing ",[905,1275,992],{}," by operating system",[931,1278,1279],{},[919,1280,1283],{"href":1281,"rel":1282},"https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/",[1258],"Connecting a local service to a public domain",[931,1285,1286],{},[919,1287,1290],{"href":1288,"rel":1289},"https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/",[1258],"Adding user authentication with Cloudflare Access",[911,1292,1294],{"id":1293},"running-your-own-reverse-proxy","Running your own reverse proxy",[890,1296,1297],{},"If you already operate a public IP and server infrastructure, you can connect directly using Caddy or NGINX.",[1073,1299,1301],{"id":1300},"caddy","Caddy",[890,1303,1304],{},"Caddy can automatically issue and renew HTTPS certificates once your domain's DNS points to the server and ports 80/443 reach the server, making it a good fit for small self-hosted setups.",[897,1306,1310],{"className":1307,"code":1308,"language":1309,"meta":903,"style":903},"language-caddyfile shiki shiki-themes github-light github-dark monokai","space.example.com {\n    reverse_proxy 127.0.0.1:8510\n}\n","caddyfile",[905,1311,1312,1320,1326],{"__ignoreMap":903},[1313,1314,1317],"span",{"class":1315,"line":1316},"line",1,[1313,1318,1319],{},"space.example.com {\n",[1313,1321,1323],{"class":1315,"line":1322},2,[1313,1324,1325],{},"    reverse_proxy 127.0.0.1:8510\n",[1313,1327,1329],{"class":1315,"line":1328},3,[1313,1330,1331],{},"}\n",[890,1333,1334,1335,923],{},"For detailed configuration, see ",[919,1336,1339],{"href":1337,"rel":1338},"https://caddyserver.com/docs/quick-starts/reverse-proxy",[1258],"Caddy's reverse proxy quick start",[1073,1341,1343],{"id":1342},"nginx","NGINX",[890,1345,1346],{},"If you're already using NGINX, you can forward HTTPS requests to SetFN's local port.",[897,1348,1351],{"className":1349,"code":1350,"language":1342,"meta":903,"style":903},"language-nginx shiki shiki-themes github-light github-dark monokai","server {\n    listen 443 ssl;\n    server_name space.example.com;\n\n    location / {\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_pass http://127.0.0.1:8510;\n    }\n}\n",[905,1352,1353,1358,1363,1368,1375,1381,1387,1393,1399,1405,1411,1417],{"__ignoreMap":903},[1313,1354,1355],{"class":1315,"line":1316},[1313,1356,1357],{},"server {\n",[1313,1359,1360],{"class":1315,"line":1322},[1313,1361,1362],{},"    listen 443 ssl;\n",[1313,1364,1365],{"class":1315,"line":1328},[1313,1366,1367],{},"    server_name space.example.com;\n",[1313,1369,1371],{"class":1315,"line":1370},4,[1313,1372,1374],{"emptyLinePlaceholder":1373},true,"\n",[1313,1376,1378],{"class":1315,"line":1377},5,[1313,1379,1380],{},"    location / {\n",[1313,1382,1384],{"class":1315,"line":1383},6,[1313,1385,1386],{},"        proxy_set_header Host $host;\n",[1313,1388,1390],{"class":1315,"line":1389},7,[1313,1391,1392],{},"        proxy_set_header X-Real-IP $remote_addr;\n",[1313,1394,1396],{"class":1315,"line":1395},8,[1313,1397,1398],{},"        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n",[1313,1400,1402],{"class":1315,"line":1401},9,[1313,1403,1404],{},"        proxy_set_header X-Forwarded-Proto $scheme;\n",[1313,1406,1408],{"class":1315,"line":1407},10,[1313,1409,1410],{},"        proxy_pass http://127.0.0.1:8510;\n",[1313,1412,1414],{"class":1315,"line":1413},11,[1313,1415,1416],{},"    }\n",[1313,1418,1420],{"class":1315,"line":1419},12,[1313,1421,1331],{},[890,1423,1424,1425,923],{},"The example above shows only the core structure of the proxy. In actual production use, you should also review certificates, WebSocket support, upload size limits, timeouts, and access logging. For details, see the ",[919,1426,1429],{"href":1427,"rel":1428},"https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy",[1258],"official NGINX reverse proxy guide",[911,1431,1032],{"id":1432},"router-port-forwarding",[890,1434,1435,1436,1438,1439,923],{},"This method forwards external ports 80/443 from your router to a reverse proxy server. Rather than exposing SetFN's ",[905,1437,1109],{}," port directly to the internet, configure Caddy or NGINX to receive HTTPS requests on port 443 and forward them internally to ",[905,1440,1109],{},[890,1442,1443],{},"The following conditions are required.",[928,1445,1446,1449,1452,1455,1458,1461],{},[931,1447,1448],{},"An internet connection with a publicly accessible public IP",[931,1450,1451],{},"Router administrator privileges",[931,1453,1454],{},"A static IP or DHCP reservation so the server's internal IP doesn't change",[931,1456,1457],{},"A DNS record pointing to the public IP",[931,1459,1460],{},"Only the necessary ports allowed through the server firewall",[931,1462,1463],{},"HTTPS certificate issuance and automatic renewal configured",[1465,1466,1467],"danger",{},[890,1468,1469,1470,1472],{},"Do not expose your entire server using your router's DMZ feature, and do not expose SetFN's ",[905,1471,1109],{}," port directly to the internet. The admin screen and service could become a direct attack target. Forward only the necessary ports 80/443 through a reverse proxy, and keep the operating system and proxy continuously updated.",[890,1474,1475],{},"On connections where the ISP uses CGNAT, the WAN IP shown on the router may differ from the actual public IP, which can prevent port forwarding from working. In that case, use Cloudflare Tunnel or a VPN instead.",[911,1477,1479],{"id":1478},"preparing-a-domain","Preparing a domain",[890,1481,1482,1483,1485],{},"If you have a company domain, it's a good idea to use a subdomain such as ",[905,1484,1217],{},". If you don't have a domain, you can purchase one from a domain registrar.",[890,1487,1488,1489,1492,1493,1496],{},"To use Cloudflare Tunnel, that domain must be connected as an active Zone in your Cloudflare account. If you're using a reverse proxy directly, point the DNS ",[905,1490,1491],{},"A"," or ",[905,1494,1495],{},"AAAA"," record to your server's public IP.",[911,1498,1500],{"id":1499},"verifying-access","Verifying access",[890,1502,1503],{},"After configuration, verify access in the following order.",[1165,1505,1506,1512,1518,1521,1524],{},[931,1507,1508,1509,1511],{},"Access ",[905,1510,1237],{}," from the server",[931,1513,1508,1514,1517],{},[905,1515,1516],{},"http://\u003Cserver IP>:8510"," from the same network",[931,1519,1520],{},"Access via the domain over HTTPS",[931,1522,1523],{},"Access from a mobile data connection with Wi-Fi turned off",[931,1525,1526],{},"Verify login, file upload, and real-time notification or chat behavior",[890,1528,1529],{},"If internal access fails first, check the SetFN service status first. If internal access works but only the domain access fails, check in this order: Tunnel, DNS, reverse proxy, firewall.",[911,1531,1533],{"id":1532},"operations-checklist","Operations checklist",[928,1535,1536,1539,1542,1545,1548,1551,1554],{},[931,1537,1538],{},"Use long, unique passwords for administrators and users",[931,1540,1541],{},"Disable unnecessary accounts and share links",[931,1543,1544],{},"Register the Tunnel Connector or reverse proxy as a system service",[931,1546,1547],{},"Regularly update the Connector, operating system, and proxy",[931,1549,1550],{},"Check HTTPS certificate expiration and DNS status",[931,1552,1553],{},"Review external access and administrator activity logs",[931,1555,1556],{},"Prepare an operating procedure for connecting via the internal address in case of an outage",[911,1558,1560],{"id":1559},"related-documents","Related documents",[928,1562,1563,1567,1572],{},[931,1564,1565],{},[919,1566,922],{"href":921},[931,1568,1569],{},[919,1570,202],{"href":1571},"../admin/security/security-setting",[931,1573,1574],{},[919,1575,1577],{"href":1576},"../workspace/cooperation/share-link-creation","Creating a Share Link",[1579,1580,1581],"style",{},"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);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":903,"searchDepth":1322,"depth":1328,"links":1583},[1584,1585,1586,1590,1591,1592,1593,1597,1598,1599,1600,1601],{"id":913,"depth":1322,"text":914},{"id":945,"depth":1322,"text":946},{"id":1070,"depth":1322,"text":1071,"children":1587},[1588,1589],{"id":1075,"depth":1328,"text":1076},{"id":1098,"depth":1328,"text":1099},{"id":1121,"depth":1322,"text":1122},{"id":1162,"depth":1322,"text":1163},{"id":1245,"depth":1322,"text":1246},{"id":1293,"depth":1322,"text":1294,"children":1594},[1595,1596],{"id":1300,"depth":1328,"text":1301},{"id":1342,"depth":1328,"text":1343},{"id":1432,"depth":1322,"text":1032},{"id":1478,"depth":1322,"text":1479},{"id":1499,"depth":1322,"text":1500},{"id":1532,"depth":1322,"text":1533},{"id":1559,"depth":1322,"text":1560},null,"Explains how to choose the SetFN external access method that fits your environment among Cloudflare Tunnel, a reverse proxy, and router port forwarding.","md",{"slug":1606},"/getting-started/access-domain/",{"title":1608,"description":1609,"ogType":1610,"twitterCard":1611,"keywords":1612},"Choosing an External Access Method | SetFN Docs","Compares Cloudflare Tunnel, reverse proxy, and port forwarding methods for connecting a domain to SetFN SpaceBuilder.","article","summary_large_image",[1613,1614,1615,1616,1617,1618],"SetFN external access","Cloudflare Tunnel","Reverse proxy","Port forwarding","Domain connection","HTTPS",[22],"zfoivMxRLQxZ0qR4G64nyaA3Efo5R6Ob6Y7FnI8Qk_E",[1622,1623],{"title":47,"path":48,"stem":49,"children":-1},{"title":67,"path":68,"stem":69,"children":-1},{"title":51,"filename":1625,"content":1626},"access-domain","# Choosing an External Access Method\n\nSetFN SpaceBuilder can be used right away on the same network immediately after installation. To access it from outside the office or over a mobile network, you need to establish a secure connection path between the server and the outside internet.\n\nThis may sound complicated at first, but the goal is simple.\n\n```text\nhttps://space.example.com\n        ↓\nExternal access connection method\n        ↓\nhttp://localhost:8510\n```\n\nUsing Cloudflare Tunnel, you can set up this connection relatively easily. You don't need to expose the server's port directly to the internet, and Cloudflare handles the HTTPS certificate and domain connection for you.\n\n## First, check whether you actually need external access\n\nIf you'll only use it within the same office or Wi-Fi network, you don't need to configure external access. Connect using the internal IP address as described in [Checking Your Space Access Address](./35.access-url.md).\n\nExternal access configuration is needed in the following situations.\n\n- Accessing your space from home or while traveling\n- Accessing it over mobile data\n- Sharing a link with external partners or customers\n- Using a single space across multiple business locations or networks\n\n## Which method should you choose?\n\n| Method | Recommended for | Advantages | What you manage directly |\n| ---- | --------- | ---- | ---------------- |\n| **Cloudflare Tunnel (recommended)** | Users configuring external access for the first time, environments without a fixed public IP | No need to open router ports, keeps the origin server IP private, easy HTTPS and domain connection | Cloudflare account, domain, `cloudflared` service |\n| **Caddy reverse proxy** | Users running their own server who want to keep the setup simple | Simple configuration, automatic HTTPS certificate issuance and renewal | DNS, public IP, firewall, port forwarding, Caddy |\n| **NGINX reverse proxy** | Organizations with existing NGINX infrastructure or a need for fine-grained control | Highly flexible configuration, easy integration with existing web infrastructure | DNS, certificates, firewall, port forwarding, NGINX |\n| **Router port forwarding** | Test environments, or users who can manage their network directly | Direct connection without a separate tunneling service | Public IP, router, firewall, HTTPS, security updates |\n| **VPN/private network** | Organizations that want to allow access only to their own members privately | Doesn't expose the service to the public internet | VPN server and client device configuration |\n\n::note\nIf you have no special infrastructure requirements, **we recommend starting with Cloudflare Tunnel.** Running your own reverse proxy offers more flexibility, but the operator has to take on responsibility for the network, certificates, and security updates.\n::\n\n## Understanding tunneling and reverse proxying\n\n### Tunneling\n\nA Connector running inside the server first establishes a secure connection to an external service. Incoming requests then reach the server by following this connection in reverse.\n\nWith Cloudflare Tunnel, `cloudflared` creates an **outbound connection** from the server to Cloudflare. As a result, in a typical setup you don't need to open ports 80, 443, or 8510 on your router to the outside.\n\n```text\nUser → Cloudflare → Already-established Tunnel → SetFN :8510\n```\n\n### Reverse proxying\n\nCaddy or NGINX first receives external requests and then forwards them to the internal SetFN service. Users connect via `https://space.example.com` without needing to know about port `8510`.\n\n```text\nUser → Caddy or NGINX :443 → SetFN :8510\n```\n\nA reverse proxy has the advantage of letting you manage HTTPS termination, domain routing, access logs, and rate limiting all in one place.\n\n## Recommended method: Cloudflare Tunnel\n\nCloudflare Tunnel connects an internal service to a public domain without requiring the origin server to have a publicly routable IP address. Because `cloudflared` initiates the connection to the Cloudflare network, it also reduces paths for direct bypass access to the origin server.\n\nHere's what you can expect when setting it up for the first time.\n\n- No need to configure port forwarding in your router's admin screen\n- Relatively unaffected by dynamic public IPs or ISP network conditions\n- Use an address in the form `https://space.example.com`\n- Reduced burden of issuing and renewing external certificates\n- Optionally restrict allowed users or email domains with Cloudflare Access\n- A single Connector can connect multiple internal web services via separate subdomains\n\n::warning\nAdding only a Public Hostname to a Tunnel makes that address reachable from the internet. If you want to expose it only to organization members, also configure a Cloudflare Access application with an allow policy.\n::\n\n## Cloudflare Tunnel configuration flow\n\n1. Connect the domain you want to use to Cloudflare.\n2. Create a Tunnel in the Cloudflare dashboard.\n3. Install `cloudflared` on the SpaceBuilder server.\n4. Run the Connector using the command shown in the dashboard.\n5. Connect the domain and SetFN address in the Published application.\n6. Add a Cloudflare Access policy if needed.\n7. Verify access from an external network.\n\nUse the following values for the Service URL of the Published application.\n\n| Field | Example |\n| ---- | ---- |\n| Public hostname | `space.example.com` |\n| Service type | `HTTP` |\n| Service URL | `http://localhost:8510` |\n\nIf you changed the SetFN port, enter the actual service port instead of `8510`.\n\n## Official Cloudflare guides\n\nCloudflare's screens and installation commands may change, so also check the following official documentation when setting things up.\n\n- [Cloudflare Tunnel overview](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/)\n- [Creating a Tunnel from the dashboard](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/)\n- [Installing `cloudflared` by operating system](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/)\n- [Connecting a local service to a public domain](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/)\n- [Adding user authentication with Cloudflare Access](https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/)\n\n## Running your own reverse proxy\n\nIf you already operate a public IP and server infrastructure, you can connect directly using Caddy or NGINX.\n\n### Caddy\n\nCaddy can automatically issue and renew HTTPS certificates once your domain's DNS points to the server and ports 80/443 reach the server, making it a good fit for small self-hosted setups.\n\n```caddyfile\nspace.example.com {\n    reverse_proxy 127.0.0.1:8510\n}\n```\n\nFor detailed configuration, see [Caddy's reverse proxy quick start](https://caddyserver.com/docs/quick-starts/reverse-proxy).\n\n### NGINX\n\nIf you're already using NGINX, you can forward HTTPS requests to SetFN's local port.\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name space.example.com;\n\n    location / {\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_pass http://127.0.0.1:8510;\n    }\n}\n```\n\nThe example above shows only the core structure of the proxy. In actual production use, you should also review certificates, WebSocket support, upload size limits, timeouts, and access logging. For details, see the [official NGINX reverse proxy guide](https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy).\n\n## Router port forwarding\n\nThis method forwards external ports 80/443 from your router to a reverse proxy server. Rather than exposing SetFN's `8510` port directly to the internet, configure Caddy or NGINX to receive HTTPS requests on port 443 and forward them internally to `8510`.\n\nThe following conditions are required.\n\n- An internet connection with a publicly accessible public IP\n- Router administrator privileges\n- A static IP or DHCP reservation so the server's internal IP doesn't change\n- A DNS record pointing to the public IP\n- Only the necessary ports allowed through the server firewall\n- HTTPS certificate issuance and automatic renewal configured\n\n::danger\nDo not expose your entire server using your router's DMZ feature, and do not expose SetFN's `8510` port directly to the internet. The admin screen and service could become a direct attack target. Forward only the necessary ports 80/443 through a reverse proxy, and keep the operating system and proxy continuously updated.\n::\n\nOn connections where the ISP uses CGNAT, the WAN IP shown on the router may differ from the actual public IP, which can prevent port forwarding from working. In that case, use Cloudflare Tunnel or a VPN instead.\n\n## Preparing a domain\n\nIf you have a company domain, it's a good idea to use a subdomain such as `space.example.com`. If you don't have a domain, you can purchase one from a domain registrar.\n\nTo use Cloudflare Tunnel, that domain must be connected as an active Zone in your Cloudflare account. If you're using a reverse proxy directly, point the DNS `A` or `AAAA` record to your server's public IP.\n\n## Verifying access\n\nAfter configuration, verify access in the following order.\n\n1. Access `http://localhost:8510` from the server\n2. Access `http://\u003Cserver IP>:8510` from the same network\n3. Access via the domain over HTTPS\n4. Access from a mobile data connection with Wi-Fi turned off\n5. Verify login, file upload, and real-time notification or chat behavior\n\nIf internal access fails first, check the SetFN service status first. If internal access works but only the domain access fails, check in this order: Tunnel, DNS, reverse proxy, firewall.\n\n## Operations checklist\n\n- Use long, unique passwords for administrators and users\n- Disable unnecessary accounts and share links\n- Register the Tunnel Connector or reverse proxy as a system service\n- Regularly update the Connector, operating system, and proxy\n- Check HTTPS certificate expiration and DNS status\n- Review external access and administrator activity logs\n- Prepare an operating procedure for connecting via the internal address in case of an outage\n\n## Related documents\n\n- [Checking Your Space Access Address](./35.access-url.md)\n- [Security Settings](../10.admin/50.security/12.security-setting.md)\n- [Creating a Share Link](../20.workspace/35.cooperation/40.share-link-creation.md)\n",1789664752577]