1"use strict";(self.webpackChunktwingate_homepage=self.webpackChunktwingate_homepage||[]).push([[2376],{31875:function(e,n,l){var t=l(28453),r=l(96540);function a(e){const n=Object.assign({h2:"h2",a:"a",span:"span",p:"p",strong:"strong",ul:"ul",li:"li",hr:"hr",h3:"h3",pre:"pre",code:"code",ol:"ol"},(0,t.RP)(),e.components),{Callout:l}=n;return l||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Callout",!0),r.createElement(r.Fragment,null,r.createElement(n.h2,{id:"overview",style:{position:"relative"}},r.createElement(n.a,{href:"#overview","aria-label":"overview permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Overview"),"\n",r.createElement(n.p,null,"This guide walks you through deploying OpenClaw (formerly ClawdBot and MoltBot), an AI-powered WhatsApp/Telegram assistant, using Docker Compose on any Docker hostâlocal machine, homelab server, VPS, or cloud VM. Youâll start with local-only deployment, then optionally add Twingate for secure remote access without SSH tunneling or public port exposure."),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why Secure with Twingate?")," By default, OpenClaw is only accessible on the machine where it runs. When you need remote or team access, exposing ports publicly or setting up SSH tunnels introduces risk and complexity. Adding Twingate gives you:"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Zero Trust access control")," â authenticate and authorize every connection with per-user policies"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"No public ports")," â the gateway stays completely off the internet"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Audit logging")," â track who accessed what and when"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"MFA enforcement")," â require multi-factor authentication for every session"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"No VPN complexity")," â teammates connect with a lightweight client instead of managing VPN credentials"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"What Youâll Build:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"OpenClaw Gateway running in Docker with Caddy reverse proxy (local access)"),"\n",r.createElement(n.li,null,"Optional: Twingate Connector for secure remote/team access"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Infrastru
1cture:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Any Docker host (local machine, homelab, VPS, cloud VM)"),"\n",r.createElement(n.li,null,"Docker Compose for infrastructure-as-code deployment"),"\n",r.createElement(n.li,null,"Optional: Twingate for Zero Trust remote access (no VPN or public ports)"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Who This Is For:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Developers wanting local AI assistant deployment"),"\n",r.createElement(n.li,null,"Homelab users and self-hosters"),"\n",r.createElement(n.li,null,"Teams needing secure remote access without exposing ports"),"\n",r.createElement(n.li,null,"Anyone wanting infrastructure-as-code deployment"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Time to Complete:")," 10 minutes (local only), 20 minutes (with remote access)"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Note:")," This guide focuses on deployment and secure remote access. For overall security best practices, see the ",r.createElement(n.a,{href:"https://docs.openclaw.ai/security"},"OpenClaw documentation"),"."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"architecture-overview",style:{position:"relative"}},r.createElement(n.a,{href:"#architecture-overview","aria-label":"architecture overview permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Architecture Overview"),"\n",r.createElement(n.h3,{id:"base-deployment-steps-1-3",style:{position:"relative"}},r.createElement(n.a,{href:"#base-deployment-steps-1-3","aria-label":"base deployment steps 1 3 permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.
11639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Base Deployment (Steps 1-3)"),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,"[Docker Host]\n â\n[Caddy Reverse Proxy] â HTTP on port 80 (host-local only)\n â â Shares the gateway's network namespace\n[OpenClaw Gateway] â Binds to localhost:18789 inside container\n â â Never exposed directly to host or network\n[Claude/OpenAI APIs] â AI providers\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Use this for:")," Local development, single-user deployment, testing"),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"remoteteam-access-deployment-step-4---optional",style:{position:"relative"}},r.createElement(n.a,{href:"#remoteteam-access-deployment-step-4---optional","aria-label":"remoteteam access deployment step 4 optional permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Remote/Team Access Deployment (Step 4 - Optional)"),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,"[Docker Host]\n â\n[Caddy Reverse Proxy] â HTTP on port 80\n â â Shares the gateway's network namespace\n[OpenClaw Gateway] â Binds to localhost:18789 inside container\n â\n[Claude/OpenAI APIs]\n\nSecurity Layer:\n[Twingate Connector] â Runs on host network\n â\n[Twingate Cloud] â Enforces Zero Trust policies\n â\n[Team Members] â Twingate Client enables secure remote access\n (no VPN, no SSH tunneling, no public ports)\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Use this for:")," Remote access, team collaboration, accessing from multiple devices"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why Caddy?")," The gateway binds to ",r.createElement(n.code,null,"localhost")," inside the container by defaultâit isnât reachable from the host or Docker network directly. Caddy shares the gatewayâs network namespace (",r.createElement(n.code,null,"network_mode: service:openclaw-gateway"),"), so it can reach ",r.createElement(n.code,null,"localhost:18789")," and expose it as port 80."),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Why Twingate?")," Provides Zero Trust securityâcontrol who accesses the gateway, get audit logs, enforce MFA. Enables secure remote access without exposing ports or managing VPN credentials."),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Network Architecture:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Shared Network Namespace"),": Caddy and the CLI share the gateway containerâs network namespace, so they can reach the gateway on ",r.createElement(n.code,null,"localhost:18789")," without exposing that port to the host or Docker network."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Port 80")," is the only port mapped to the host (bound to ",r.createElement(n.code,null,"127.0.0.1")," by default)."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Host Network"),": Twingate Connector uses host network mode (required for proper operation)."),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Benefits of Remote Access Setup:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"â
",r.createElement(n.strong,null,"Zero Trust Access")," â Authenticate and authorize every connection"),"\n",r.createElement(n.li,null,"â
",r.createElement(n.strong,null,"No Public Ports")," â Complete network lockdown with
1no inbound access"),"\n",r.createElement(n.li,null,"â
",r.createElement(n.strong,null,"No SSH Tunneling")," â Caddy provides HTTP access through Twingate"),"\n",r.createElement(n.li,null,"â
",r.createElement(n.strong,null,"No VPN Required")," â Twingate Client replaces traditional VPN"),"\n",r.createElement(n.li,null,"â
",r.createElement(n.strong,null,"Audit Logging")," â Track all connections and resource access"),"\n",r.createElement(n.li,null,"â
",r.createElement(n.strong,null,"MFA Enforcement")," â Require multi-factor authentication"),"\n"),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"prerequisites",style:{position:"relative"}},r.createElement(n.a,{href:"#prerequisites","aria-label":"prerequisites permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Prerequisites"),"\n",r.createElement(n.h3,{id:"required-all-deployments",style:{position:"relative"}},r.createElement(n.a,{href:"#required-all-deployments","aria-label":"required all deployments permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Required (All Deployments)"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Docker Engine 20.10+ or Docker Desktop"),"\n",r.createElement(n.li,null,"Docker Compose v2 (",r.createElement(n.code,null,"docker compose")," command, not legacy ",r.createElement(n.code,null,"docker-compose"),")"),"\n",r.createElement(n.li,null,"4GB+ RAM available for containers"),"\n",r.createElement(n.li,null,"10GB+ disk space"),"\n",r.createElement(n.li,null,"AI provider API key:","\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Anthropic Claude (recommended): ",r.createElement(n.a,{href:"https://console.anthropic.com/"},"Get API key")),"\n",r.createElement(n.li,null,"OpenAI: ",r.createElement(n.a,{href:"https://platform.openai.com/api-keys"},"Get API key")),"\n"),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Docker installation:")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker --version\n# Should show: Docker version 20.10+ or higher\n\ndocker compose version\n# Should show: Docker Compose version v2.x.x or higher\n")),"\n",r.createElement(n.h3,{id:"required-for-remoteteam-access-only-step-4",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#required-for-remoteteam-access-only-step-4","aria-label":"required for remoteteam access only step 4 permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Required for Remote/Team Access Only (Step 4)"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"A Twingate account (",r.createElement(n.a,{href:"https://www.twingate.com/signup"},"sign up here")," - free for small teams)"),"\n"),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"step-1-prepare-docker-environment-2-minutes",style:{position:"relative"}},r.createElement(n.a,{href:"#step-1-prepare-docker-environment-2-minutes","aria-label":"step 1 prepare docker environment 2 minutes permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Step 1: Prepare Docker Environment (~2 minutes)"),"\n",r.createElement(n.h3,{id:"11-create-project-directory",style:{position:"relative"}},r.createElement(n.a,{href:"#11-create-project-directory","aria-label":"11 create project directory permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.
11313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"1.1 Create Project Directory"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Create project directory\nmkdir -p ~/openclaw-docker\ncd ~/openclaw-docker\n\n# Create subdirectories for volumes\nmkdir -p config workspace\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"What this does:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.code,null,"~/openclaw-docker"),": Main project directory"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"config/"),": Stores gateway token, user preferences, channel configurations"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"workspace/"),": Stores agent workspace files and persistent data"),"\n"),"\n",r.createElement(n.h3,{id:"12-verify-docker-installation",style:{position:"relative"}},r.createElement(n.a,{href:"#12-verify-docker-installation","aria-label":"12 verify docker installation permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"1.2 Verify Docker Installation"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Check Docker is running\ndocker info\n\n# Check Docker Compose is available\ndocker compose version\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Expected output:")," Docker info displays system information, Docker Compose shows v2.x.x or higher."),"\n",r.createElement(n.p,null,"â
",r.createElement(n.strong,null,"Checkpoint:")," Docker environment is ready. Next, weâll configure Docker Compose."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"step-2-configure-docker-compose-3-minutes",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#step-2-configure-docker-compose-3-minutes","aria-label":"step 2 configure docker compose 3 minutes permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Step 2: Configure Docker Compose (~3 minutes)"),"\n",r.createElement(n.h3,{id:"21-create-caddyfile",style:{position:"relative"}},r.createElement(n.a,{href:"#21-create-caddyfile","aria-label":"21 create caddyfile permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"2.1 Create Caddyfile"),"\n",r.createElement(n.p,null,"Create ",r.createElement(n.code,null,"Caddyfile")," in your project directory:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,":80 {\n reverse_proxy localhost:18789\n}\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"What this does:")," Caddy shares the gatewayâs network namespace, so it can reach the gateway on ",r.createElement(n.code,null,"localhost:18789")," and serve it on port 80."),"\n",r.createElement(n.h3,{id:"22-create-docker-composeyml",style:{position:"relative"}},r.createElement(n.a,{href:"#22-create-docker-composeyml","aria-label":"22 create docker
1composeyml permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"2.2 Create docker-compose.yml"),"\n",r.createElement(n.p,null,"Create ",r.createElement(n.code,null,"docker-compose.yml")," in your project directory:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-yaml"},'services:\n # OpenClaw Gateway â binds to localhost only inside the container.\n # All access goes through the Caddy reverse proxy on port 80.\n openclaw-gateway:\n image: ghcr.io/openclaw/openclaw:latest\n container_name: openclaw-gateway\n restart: unless-stopped\n ports:\n - "127.0.0.1:80:80" # Caddy reverse proxy (host-local only)\n volumes:\n - ./config:/home/node/.openclaw\n - ./workspace:/home/node/.openclaw/workspace\n environment:\n - CLAUDE_AI_SESSION_KEY=${CLAUDE_AI_SESSION_KEY:-}\n - OPENAI_API_KEY=${OPENAI_API_KEY:-}\n - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}\n networks:\n - openclaw-network\n healthcheck:\n test: ["CMD", "curl", "-f", "http://localhost:18789/health"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 40s\n\n # OpenClaw CLI â on-demand interactive CLI for onboarding, config, and diagnostics.\n # Shares the gateway\'s network namespace so it can reach localhost:18789.\n openclaw-cli:\n image: ghcr.io/openclaw/openclaw:latest\n container_name: openclaw-cli\n entrypoint: ["node", "openclaw.mjs"]\n profiles: ["cli"] # Only runs when explicitly invoked\n volumes:\n - ./config:/home/node/.openclaw\n - ./workspace:/home/node/.openclaw/workspace\n environment:\n - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}\n network_mode: "service:openclaw-gateway"\n stdin_open: true\n tty: true\n depends_on:\n - openclaw-gateway\n\n # Caddy reverse proxy â provides HTTP access to the gateway.\n # Shares the gateway\'s network namespace so it can proxy localhost:18789 â port 80.\n caddy:\n image: caddy:latest\n container_name: caddy\n restart: unless-stopped\n network_mode: "service:openclaw-gateway"\n volumes:\n - ./Caddyfile:/etc/caddy/Caddyfile:ro\n depends_on:\n - openclaw-gateway\n\nnetworks:\n openclaw-network:\n driver: bridge\n')),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Configuration explained:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Port binding")," ",r.createElement(n.code,null,"127.0.0.1:80:80"),": Caddyâs port 80 is mapped to the host, bound to localhost only. This is the sole entry point to the gateway."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Shared network namespace"),": Caddy and the CLI use ",r.createElement(n.code,null,'network_mode: "service:openclaw-gateway"')," to share the gatewayâs network namespace. This lets them reach the gateway on ",r.createElement(n.code,null,"localhost:18789")," without exposing that port."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"CLI entrypoint"),": Overrides the default gateway command so the CLI accepts subcommands like ",r.createElement(n.code,null,"onboard"),", ",r.createElement(n.code,null,"health"),", and ",r.createElement(n.code,null,"dashboard"),"."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Volumes"),": Bind mounts for easy access and backup (not named volumes)"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Health check"),": Monitors gateway container health"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"CLI profile"),": Prevents CLI container from auto-starting (used for manual commands only)"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Restart policy"),": Gateway and Caddy restart automatically if they crash"),"\n"),"\n",r.createElement(n.h3,{id:"23-create-env-file",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#23-create-env-file","aria-label":"23 create env file permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"2.3 Create .env File"),"\n",r.createElement(n.p,null,"Create ",r.createElement(n.code,null,".env")," in your project directory:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# AI Provider Configuration\n# Choose ONE provider and uncomment/set the appropriate API key:\n\n# Option 1: Anthropic Claude (recommended)\nCLAUDE_AI_SESSION_KEY=your-claude-api-key-here\n\n# Option 2: OpenAI\n# OPENAI_API_KEY=your-openai-api-key-here\n\n# Gateway Token (generated in Step 3)\nOPENCLAW_GATEWAY_TOKEN=\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Important:")," Replace ",r.createElement(n.code,null,"your-claude-api-key-here")," or ",r.createElement(n.code,null,"your-openai-api-key-here")," with your actual API key. The ",r.createElement(n.code,null,"OPENCLAW_GATEWAY_TOKEN")," will be generated in the next step."),"\n",r.createElement(n.p,null,"â
",r.createElement(n.strong,null,"Checkpoint:")," Docker Compose configuration is ready. Next, weâll configure and start OpenClaw."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"step-3-configure-and-start-openclaw-5-minutes",style:{position:"relative"}},r.createElement(n.a,{href:"#step-3-configure-and-start-openclaw-5-minutes","aria-label":"step 3 configure and start openclaw 5 minutes permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Step 3: Configure and Start OpenClaw (~5 minutes)"),"\n",r.createElement(n.h3,{id:"31-run-onboarding-wizard",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#31-run-onboarding-wizard","aria-label":"31 run onboarding wizard permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"3.1 Run Onboarding Wizard"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Run interactive onboarding wizard\ndocker compose run --rm openclaw-cli onboard\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Follow the prompts:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Select your AI provider (Claude, OpenAI, etc.)"),"\n",r.createElement(n.li,null,"Enter your API key (from your AI provider console)"),"\n",r.createElement(n.li,null,"Configure default settings (model, temperature, etc.)"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"What this does:")," Creates initial configuration files in ",r.createElement(n.code,null,"./config")," directory."),"\n",r.createElement(n.h3,{id:"32-generate-gateway-token",style:{position:"relative"}},r.createElement(n.a,{href:"#32-generate-gateway-token","aria-label":"32 generate gateway token permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"3.2 Generate Gateway Token"),"\n",r.createElement(n.p,null,"OpenClaw automatically generates a secure gateway token during onboarding. To retrieve it, run:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Display the auto-generated gateway token and dashboard URL\ndocker compose run --rm openclaw-cli dashboard --no-open\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Expected output:")),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,"Gateway Token: abc123def456...\nDashboard URL: http://localhost/?token=abc123def456...\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Copy the token")," from the output. Youâll need it in the next step."),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Canât find your token later?")," Re-run the command above at any time to display the current token. The token is also stored in ",r.createElement(n.code,null,"./config/gateway-token")," if you need to retrieve it directly."),"\n",r.createElement(n.h3,{id:"33-update-env-with-gateway-token",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#33-update-env-with-gateway-token","aria-label":"33 update env with gateway token permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"3.3 Update .env with Gateway Token"),"\n",r.createElement(n.p,null,"Edit ",r.createElement(n.code,null,".env")," and add your generated token:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"OPENCLAW_GATEWAY_TOKEN=abc123def456...\n")),"\n",r.createElement(n.p,null,"Replace ",r.createElement(n.code,null,"abc123def456...")," with your actual token from Step 3.2."),"\n",r.createElement(n.h3,{id:"34-start-openclaw",style:{position:"relative"}},r.createElement(n.a,{href:"#34-start-openclaw","aria-label":"34 start openclaw permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"3.4 Start OpenClaw"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Start gateway and Caddy\ndocker compose up -d\n\n# Verify services are running\ndocker compose ps\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Expected output:")),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,"NAME IMAGE STATUS\ncaddy caddy:latest Up About a minute\nopenclaw-gateway ghcr.io/openclaw/openclaw:latest Up About a minute (healthy)\n")),"\n",r.createElement(n.h3,{id:"35-view-gateway-logs",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#35-view-gateway-logs","aria-label":"35 view gateway logs permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"3.5 View Gateway Logs"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# View logs to confirm successful startup\ndocker compose logs openclaw-gateway\n\n# Follow logs in real-time\ndocker compose logs -f openclaw-gateway\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Look for:")," Messages indicating successful startup and API provider connection."),"\n",r.createElement(n.h3,{id:"36-access-gateway-locally",style:{position:"relative"}},r.createElement(n.a,{href:"#36-access-gateway-locally","aria-label":"36 access gateway locally permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"3.6 Access Gateway Locally"),"\n",r.createElement(n.p,null,"Open your browser and navigate to:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,"http://localhost/?token=<your-token>\n")),"\n",r.createElement(n.p,null,"Replace ",r.createElement(n.code,null,"<your-token>")," with your gateway token from Step 3.2."),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Expected result:")," OpenClaw dashboard loads successfully via Caddy reverse proxy."),"\n",r.createElement(n.p,null,"â
",r.createElement(n.strong,null,"Checkpoint:")," OpenClaw is running and accessible locally! You can now use it from your machine. To enable remote/team access, continue to Step 4. Otherwise, skip to Step 5 for messaging channel configuration."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"step-4-enable-remote-access-with-twingate-optional-10-minutes",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#step-4-enable-remote-access-with-twingate-optional-10-minutes","aria-label":"step 4 enable remote access with twingate optional 10 minutes permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Step 4: Enable Remote Access with Twingate (Optional, ~10 minutes)"),"\n",r.createElement(l,{severity:"info"},r.createElement(n.p,null,r.createElement(n.strong,null,"When do you need this?")," Enable remote access if you want to:"),r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Access your OpenClaw instance from other machines (laptop, phone, etc.)"),"\n",r.createElement(n.li,null,"Share access with team members"),"\n",r.createElement(n.li,null,"Access while traveling without exposing ports publicly"),"\n"),r.createElement(n.p,null,"If you only need local access on the same machine, you can skip this step.")),"\n",r.createElement(n.p,null,"This section adds a Twingate Connector to your deployment for secure remote access without SSH tunneling or public port exposure. Caddy is already part of the base deployment from Step 2."),"\n",r.createElement(n.h3,{id:"41-update-docker-composeyml",style:{position:"relative"}},r.createElement(n.a,{href:"#41-update-docker-composeyml","aria-label":"41 update docker composeyml permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.1 Update docker-compose.yml"),"\n",r.createElement(n.p,null,"Add the Twingate Connector service to your existing ",r.createElement(n.code,null,"docker-compose.yml"),":"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-yaml"},' # Twingate Connector â optional, for secure remote access.\n # Comment out this section if you only need local access.\n twingate-connector:\n image: twingate/connector:latest\n container_name: twingate-connector\n restart: unless-stopped\n environment:\n - TWINGATE_NETWORK=${TWINGATE_NETWORK}\n - TWINGATE_ACCESS_TOKEN=${TWINGATE_ACCESS_TOKEN}\n - TWINGATE_REFRESH_TOKEN=${TWINGATE_REFRESH_TOKEN}\n - TWINGATE_LOG_LEVEL=3\n - TWINGATE_LOG_ANALYTICS=v3\n network_mode: host\n sysctls:\n net.ipv4.ping_group_range: "0 2147483647"\n')),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Configuration explained:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Twingate Connector"),": Uses host network mode (required for proper operation)"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Connector sysctls"),": Enables ICMP/ping support for connectivity testing"),"\n"),"\n",r.createElement(n.h3,{id:"42-create-twingate-account-and-remote-network",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#42-create-twingate-account-and-remote-network","aria-label":"42 create twingate account and remote network permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.2 Create Twingate Account and Remote Network"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Sign up at ",r.createElement(n.a,{href:"https://www.twingate.com/signup"},"twingate.com/signup")),"\n",r.createElement(n.li,null,"Create your Twingate network: ",r.createElement(n.code,null,"yourcompany.twingate.com")),"\n",r.createElement(n.li,null,"Navigate to ",r.createElement(n.strong,null,"Admin Console â Remote Networks")),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Add Remote Network")),"\n",r.createElement(n.li,null,"Configure:","\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Name"),": ",r.createElement(n.code,null,"OpenClaw Docker")),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Location"),": Match your Docker host location (optional)"),"\n"),"\n"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Create")),"\n"),"\n",r.createElement(n.h3,{id:"43-generate-connector-tokens",style:{position:"relative"}},r.createElement(n.a,{href:"#43-generate-connector-tokens","aria-label":"43 generate connector tokens permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.3 Generate Connector Tokens"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"In your Remote Network, click ",r.createElement(n.strong,null,"Add Connector")),"\n",r.createElement(n.li,null,"Select ",r.createElement(n.strong,null,"Docker")," as the deployment method"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Generate Tokens")),"\n",r.createElement(n.li,null,"Copy the ",r.createElement(n.strong,null,"Access Token")," and ",r.createElement(n.strong,null,"Refresh Token")," (youâll need these in the next step)"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Important:")," Keep these tokens secure. They provide access to your Twingate network."),"\n",r.createElement(n.h3,{id:"44-update-env-with-twingate-credentials",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#44-update-env-with-twingate-credentials","aria-label":"44 update env with twingate credentials permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.4 Update .env with Twingate Credentials"),"\n",r.createElement(n.p,null,"Edit your ",r.createElement(n.code,null,".env")," file and add Twingate configuration:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# AI Provider Configuration\nCLAUDE_AI_SESSION_KEY=your-claude-api-key-here\n\n# Gateway Token\nOPENCLAW_GATEWAY_TOKEN=abc123def456...\n\n# Twingate Configuration\nTWINGATE_NETWORK=yourcompany # Without .twingate.com\nTWINGATE_ACCESS_TOKEN=your-access-token-here\nTWINGATE_REFRESH_TOKEN=your-refresh-token-here\n")),"\n",r.createElement(n.p,null,"Replace:"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.code,null,"yourcompany")," with your Twingate network name (the ",r.createElement(n.code,null,"<name>")," in ",r.createElement(n.code,null,"<name>.twingate.com"),")"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"your-access-token-here")," with your Access Token from Step 4.3"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"your-refresh-token-here")," with your Refresh Token from Step 4.3"),"\n"),"\n",r.createElement(n.h3,{id:"45-start-twingate-connector",style:{position:"relative"}},r.createElement(n.a,{href:"#45-start-twingate-connector","aria-label":"45 start twingate connector permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.5 Start Twingate Connector"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Start the Twingate Connector\ndocker compose up -d twingate-connector\n\n# Verify all services are running\ndocker compose ps\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Expected output:")),"\n",r.createElement(n.pre,null,r.createElement(n.code,null,"NAME IMAGE STATUS\ncaddy caddy:latest Up 10 minutes\nopenclaw-gateway ghcr.io/openclaw/openclaw:latest Up 10 minutes (healthy)\ntwingate-connector twingate/connector:latest Up About a minute\n")),"\n",r.createElement(n.h3,{id:"46-verify-connector-is-online",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#46-verify-connector-is-online","aria-label":"46 verify connector is online permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.6 Verify Connector is Online"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Go to ",r.createElement(n.strong,null,"Admin Console â Remote Networks")),"\n",r.createElement(n.li,null,"Select your Remote Network"),"\n",r.createElement(n.li,null,"Click on ",r.createElement(n.strong,null,"Connectors")),"\n",r.createElement(n.li,null,"Your connector should show status: ",r.createElement(n.strong,null,"Connected")),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"If status shows âDisconnectedâ:")," Check connector logs:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose logs twingate-connector\n")),"\n",r.createElement(n.h3,{id:"47-create-twingate-resource",style:{position:"relative"}},r.createElement(n.a,{href:"#47-create-twingate-resource","aria-label":"47 create twingate resource permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.7 Create Twingate Resource"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"Go to ",r.createElement(n.strong,null,"Admin Console â Resources")),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Add Resource")),"\n",r.createElement(n.li,null,"Configure:","\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Name"),": ",r.createElement(n.code,null,"OpenClaw Gateway")),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Address"),": Enter your Docker host IP address:","\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Local/homelab"),": Use your machineâs local IP (e.g., ",r.createElement(n.code,null,"192.168.1.100"),")"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"VPS/cloud"),": Use the hostâs private IP (e.g., ",r.createElement(n.code,null,"10.0.0.5"),")"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Docker Desktop"),": Use ",r.createElement(n.code,null,"host.docker.internal")," (macOS/Windows) or host machine IP (Linux)"),"\n"),"\n"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Protocols"),": HTTP"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Port"),": ",r.createElement(n.code,null,"80")," (Caddy reverse proxy)"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Remote Network"),": Select the Remote Network where you deployed the Connector"),"\n"),"\n"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Add Resource")),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Finding your Docker host IP:")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},'# macOS/Linux\nip addr show | grep "inet " | grep -v 127.0.0.1\n\n# Alternative (works on most systems)\nhostname -I\n')),"\n",r.createElement(n.h3,{id:"48-configure-resource-access",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#48-configure-resource-access","aria-label":"48 configure resource access permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.8 Configure Resource Access"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"In the ",r.createElement(n.strong,null,"Resources")," tab, select your ",r.createElement(n.strong,null,"OpenClaw Gateway")," resource"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Access")," tab"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Add Access")),"\n",r.createElement(n.li,null,"Select the groups or users who should have access"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Add")),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Recommended:")," Create a dedicated group (e.g., âOpenClaw Usersâ) for easier access management."),"\n",r.createElement(n.h3,{id:"49-test-remote-access",style:{position:"relative"}},r.createElement(n.a,{href:"#49-test-remote-access","aria-label":"49 test remote access permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"4.9 Test Remote Access"),"\n",r.createElement(n.p,null,"On your laptop, p
1hone, or another device:"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Install Twingate Client")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Download from ",r.createElement(n.a,{href:"https://www.twingate.com/download"},"twingate.com/download")),"\n",r.createElement(n.li,null,"Available for macOS, Windows, Linux, iOS, Android"),"\n"),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Connect to Twingate")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Open Twingate Client"),"\n",r.createElement(n.li,null,"Sign in with your Twingate account"),"\n",r.createElement(n.li,null,"Connect to your network"),"\n"),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Access OpenClaw Gateway")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Open browser and navigate to: ",r.createElement(n.code,null,"http://<docker-host-ip>/?token=<your-token>")),"\n",r.createElement(n.li,null,"Replace ",r.createElement(n.code,null,"<docker-host-ip>")," with the IP address you used in Step 4.7"),"\n",r.createElement(n.li,null,"Replace ",r.createElement(n.code,null,"<your-token>")," with your gateway token from Step 3.2"),"\n"),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Expected result:")," OpenClaw dashboard loads successfully from your remote device!"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Troubleshooting:")," If connection fails, see the Troubleshooting section below."),"\n",r.createElement(n.p,null,"â
",r.createElement(n.strong,null,"Checkpoint:")," Remote access is enabled! You and your team can now securely access OpenClaw through Twingate without SSH tunneling or public port exposure."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"troubleshooting",style:{position:"relative"}},r.createElement(n.a,{href:"#troubleshooting","aria-label":"troubleshooting permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Troubleshooting"),"\n",r.createElement(n.h3,{id:"issue-gateway-not-accessible-locally",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-gateway-not-accessible-locally","aria-label":"issue gateway not accessible locally permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.
11313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: Gateway not accessible locally"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Browser shows âConnection refusedâ at ",r.createElement(n.code,null,"http://localhost")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify gateway and Caddy are running")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose ps\n# Both openclaw-gateway and caddy should show: Up\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check gateway logs")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},'docker compose logs openclaw-gateway\n# Look for: "listening on ws://127.0.0.1:18789"\n')),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check Caddy logs")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose logs caddy\n# Look for: Configuration errors or startup failures\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify port binding")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose port openclaw-gateway 80\n# Should show: 127.0.0.1:80\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check for port conflicts")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# macOS/Linux\nlsof -i :80\n\n# If another process is using port 80, stop it or change the port in docker-compose.yml\n")),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," If gateway wonât start, check environment variables in ",r.createElement(n.code,null,".env")," are correct, especially ",r.createElement(n.code,null,"OPENCLAW_GATEWAY_TOKEN"),"."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"issue-gateway-not-accessible-via-twingate-remote-access",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-gateway-not-accessible-via-twingate-remote-access","aria-label":"issue gateway not accessible via twingate remote access permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.
11639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: Gateway not accessible via Twingate (remote access)"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Timeout or connection refused when accessing via Twingate"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Twingate Client is connected")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},'# Check client status\n# macOS/Linux: Menu bar icon should show "Connected"\n# Windows: System tray icon should show "Connected"\n')),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Connector is online")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Go to ",r.createElement(n.strong,null,"Admin Console â Remote Networks â Connectors")),"\n",r.createElement(n.li,null,"Status should show: ",r.createElement(n.strong,null,"Connected")),"\n",r.createElement(n.li,null,"Check âLast Seenâ timestamp (should be recent)"),"\n"),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check Connector logs")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose logs twingate-connector\n# Look for: Connection errors or authentication failures\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Caddy is running")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose ps caddy\n# Should show: Up\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Test Caddy locally")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# From Docker host machine\ncurl http://localhost/?token=<your-token>\n# Should return: OpenClaw dashboard HTML\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Resource configuration")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Admin Console â Resources â OpenClaw Gateway")),"\n",r.createElement(n.li,null,"Check Address matches your Docker host IP"),"\n",r.createElement(n.li,null,"Check Port is set to ",r.createElement(n.code,null,"80")," (not 18789)"),"\n",r.createElement(n.li,null,"Check Protocol is HTTP"),"\n",r.createElement(n.li,null,"Check Remote Network matches where Connector is deployed"),"\n"),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify user has access")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Admin Console â Resources â OpenClaw Gateway â Access")),"\n",r.createElement(n.li,null,"Confirm your user or group is listed"),"\n"),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," Most common issue is incorrect Resource address. Ensure youâre using the correct Docker host IP address that the Connector can reach."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"issue-caddy-reverse-proxy-not-working",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-caddy-reverse-proxy-not-working","aria-label":"issue caddy reverse proxy not working permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.
11313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: Caddy reverse proxy not working"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Caddy container is running but requests fail"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check Caddy logs")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose logs caddy\n# Look for: Configuration errors or reverse proxy failures\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Caddyfile syntax")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Check Caddyfile exists and has correct content\ncat Caddyfile\n\n# Should show:\n# :80 {\n# reverse_proxy localhost:18789\n# }\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Test connectivity via shared namespace")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Verify Caddy can reach gateway on shared localhost\ndocker compose exec caddy curl http://localhost:18789/health\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Restart Caddy")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose restart caddy\n")),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," Caddy shares the gatewayâs network namespace (",r.createElement(n.code,null,"network_mode: service:openclaw-gateway"),"). If it canât reach the gateway, ensure the gateway container is running and healthy first."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"issue-twingate-connector-offline",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-twingate-connector-offline","aria-label":"issue twingate connector offline permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.
11639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: Twingate Connector offline"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Connector shows âDisconnectedâ in Admin Console"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check Connector service")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose ps twingate-connector\n# Should show: Up\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Review Connector logs")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose logs twingate-connector\n# Look for: Authentication errors, network connectivity issues\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify environment variables")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Check .env has correct values\ncat .env | grep TWINGATE\n\n# Should show:\n# TWINGATE_NETWORK=yourcompany\n# TWINGATE_ACCESS_TOKEN=...\n# TWINGATE_REFRESH_TOKEN=...\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Test network connectivity")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Verify host can reach Twingate Cloud\nping yourcompany.twingate.com\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Regenerate tokens if needed")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Admin Console â Remote Networks â Connectors")),"\n",r.createElement(n.li,null,"Click on your Connector"),"\n",r.createElement(n.li,null,"Click ",r.createElement(n.strong,null,"Regenerate Tokens")),"\n",r.createElement(n.li,null,"Update ",r.createElement(n.code,null,".env")," with new tokens"),"\n",r.createElement(n.li,null,"Restart Connector: ",r.createElement(n.code,null,"docker compose restart twingate-connector")),"\n"),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," If tokens are expired or incorrect, regenerate them in Admin Console and update your ",r.createElement(n.code,null,".env")," file."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"issue-authentication-failing",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-authentication-failing","aria-label":"issue authentication failing permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.
11639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: Authentication failing"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Gateway returns 401 Unauthorized or âInvalid tokenâ errors"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify Gateway token is set")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"cat .env | grep OPENCLAW_GATEWAY_TOKEN\n# Should show: OPENCLAW_GATEWAY_TOKEN=abc123def456...\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Regenerate Gateway token if needed")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose run --rm openclaw-cli dashboard --no-open\n# Copy new token and update .env\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Restart gateway after token change")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose restart openclaw-gateway\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Clear browser cache")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Old tokens may be cached"),"\n",r.createElement(n.li,null,"Try incognito/private browsing mode"),"\n"),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," Ensure youâre using the token from the URL parameter: ",r.createElement(n.code,null,"?token=<your-token>")),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"issue-ai-provider-errors",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-ai-provider-errors","aria-label":"issue ai provider errors permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: AI provider errors"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Gateway runs but AI requests fail"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Verify API key is set")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},'cat .env | grep -E "(CLAUDE|OPENAI)"\n# Should show your API key\n')),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check API key validity")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Anthropic"),": ",r.createElement(n.a,{href:"https://console.anthropic.com/"},"console.anthropic.com")),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"OpenAI"),": ",r.createElement(n.a,{href:"https://platform.openai.com/api-keys"},"platform.openai.com/api-keys")),"\n",r.createElement(n.li,null,"Verify key is active and has available credits"),"\n"),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Review gateway logs for API errors")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},'docker compose logs openclaw-gateway | grep -i "error\\|api"\n')),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Test API key directly")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},'# Anthropic\ncurl https://api.anthropic.com/v1/messages \\\n -H "x-api-key: $CLAUDE_AI_SESSION_KEY" \\\n -H "anthropic-version: 2023-06-01" \\\n -H "content-type: application/json" \\\n -d \'{"model":"claude-3-5-sonnet-20241022","max_tokens":1024,"messages":[{"role":"user","content":"Hello"}]}
1\'\n\n# OpenAI\ncurl https://api.openai.com/v1/chat/completions \\\n -H "Authorization: Bearer $OPENAI_API_KEY" \\\n -H "Content-Type: application/json" \\\n -d \'{"model":"gpt-4","messages":[{"role":"user","content":"Hello"}]}\'\n')),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," If API key is invalid, generate a new one and update ",r.createElement(n.code,null,".env"),", then restart gateway."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h3,{id:"issue-volume-permission-errors-linux",style:{position:"relative"}},r.createElement(n.a,{href:"#issue-volume-permission-errors-linux","aria-label":"issue volume permission errors linux permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Issue: Volume permission errors (Linux)"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Symptoms:")," Gateway fails to start with permission denied errors"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Debug Steps:")),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Check volume permissions")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"ls -la config/ workspace/\n# Should show: Your user owns the directories\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Fix permissions")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Option 1: Change ownership to your user\nsudo chown -R $(id -u):$(id -g) config/ workspace/\n\n# Option 2: Make directories world-writable (less secure)\nchmod 777 config/ workspace/\n")),"\n"),"\n",r.createElement(n.li,null,"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Restart gateway")),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"docker compose restart openclaw-gateway\n")),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Note:")," macOS and Windows Docker Desktop handle permissions automatically. This is primarily a Linux issue."),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Solution:")," Ensure your user has read/write permissions on ",r.createElement(n.code,null,"config/")," and ",r.createElement(n.code,null,"workspace/")," directories."),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"managing-your-deployment",style:{position:"relative"}},r.createElement(n.a,{href:"#managing-your-deployment","aria-label":"managing your deployment permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.
11313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Managing Your Deployment"),"\n",r.createElement(n.h3,{id:"startstop-commands",style:{position:"relative"}},r.createElement(n.a,{href:"#startstop-commands","aria-label":"startstop commands permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Start/Stop Commands"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Start all services\ndocker compose up -d\n\n# Stop all services\ndocker compose down\n\n# Stop but keep volumes\ndocker compose stop\n\n# Restart a specific service\ndocker compose restart openclaw-gateway\n")),"\n",r.createElement(n.h3,{id:"view-logs",style:{position:"relative"}},r.createElement(n.a,{href:"#view-logs","aria-label":"view logs permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.
11639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"View Logs"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# View all logs\ndocker compose logs\n\n# View logs for specific service\ndocker compose logs openclaw-gateway\ndocker compose logs caddy\ndocker compose logs twingate-connector\n\n# Follow logs in real-time\ndocker compose logs -f openclaw-gateway\n\n# View last 100 lines\ndocker compose logs --tail=100 openclaw-gateway\n")),"\n",r.createElement(n.h3,{id:"monitor-container-health",style:{position:"relative"}},r.createElement(n.a,{href:"#monitor-container-health","aria-label":"monitor container health permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Monitor Container Health"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Check all services status\ndocker compose ps\n\n# Check specific service health\ndocker compose ps openclaw-gateway\n\n# View health check status\ndocker inspect openclaw-gateway | grep -A 10 Health\n")),"\n",r.createElement(n.h3,{id:"backup-configuration",style:{position:"relative"}},r.createElement(n.a,{href:"#backup-configuration","aria-label":"backup configuration permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.
11639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Backup Configuration"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Important:")," Always back up your configuration before updates or major changes."),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Create backup with timestamp\ntar -czf openclaw-backup-$(date +%Y%m%d-%H%M%S).tar.gz \\\n config/ workspace/ .env docker-compose.yml Caddyfile\n\n# Restore from backup\ntar -xzf openclaw-backup-20260213-143000.tar.gz\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"What gets backed up:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.code,null,"config/"),": Gateway token, user preferences, channel configurations"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"workspace/"),": Agent workspace files, persistent data"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,".env"),": Environment variables (API keys, tokens)"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"docker-compose.yml"),": Service configuration"),"\n",r.createElement(n.li,null,r.createElement(n.code,null,"Caddyfile"),": Reverse proxy configuration"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Recommended:")," Set up automated backups with cron:"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Add to crontab (daily backup at 2 AM)\n0 2 * * * cd ~/openclaw-docker && tar -czf ~/backups/openclaw-backup-$(date +\\%Y\\%m\\%d).tar.gz config/ workspace/ .env docker-compose.yml Caddyfile\n")),"\n",r.createElement(n.h3,{id:"update-openclaw",style:{position:"relative"}},r.createElement(n.a,{href:"#update-openclaw","aria-label":"update openclaw permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Update OpenClaw"),"\n",r.createElement(n.pre,null,r.createElement(n.code,{className:"language-bash"},"# Pull latest images\ndocker compose pull\n\n# Recreate containers with new images\ndocker compose up -d --force-recreate\n\n# View updated versions\ndocker compose images\n")),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Note:")," Always back up before updating."),"\n",r.createElement(n.h3,{id:"monitor-connector-health",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#monitor-connector-health","aria-label":"monitor connector health permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Monitor Connector Health"),"\n",r.createElement(n.ol,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Admin Console â Remote Networks â Connectors")),"\n",r.createElement(n.li,null,"Check Connector status:","\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Connected"),": Healthy and operational"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Disconnected"),": Check logs and troubleshooting section"),"\n"),"\n"),"\n",r.createElement(n.li,null,"Review connection metrics:","\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,"Last Seen timestamp"),"\n",r.createElement(n.li,null,"Active connections"),"\n",r.createElement(n.li,null,"Data transferred"),"\n"),"\n"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Set up alerts:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Admin Console â Settings â Notifications")),"\n",r.createElement(n.li,null,"Enable âConnector offlineâ alerts"),"\n",r.createElement(n.li,null,"Add email or Slack webhook"),"\n"),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"support--resources",style:{position:"relative"}},r.createElement(n.a,{href:"#support--resources","aria-label":"support resources permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}}
1)),"Support & Resources"),"\n",r.createElement(n.h3,{id:"twingate-resources",style:{position:"relative"}},r.createElement(n.a,{href:"#twingate-resources","aria-label":"twingate resources permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Twingate Resources"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/docs-assets/5f397c1/docs/connector-deployment"},"Connector Deployment Options")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"/docs-assets/5f397c1/docs/remote-network-best-practices"},"Remote Network Best Practices")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://www.reddit.com/r/Twingate/"},"Twingate Subreddit")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://github.com/Twingate-Community/openclaw-secure-access/tree/main/docker-compose"},"Docker Compose Source Files")),"\n"),"\n",r.createElement(n.h3,{id:"openclaw-resources",style:{position:"relative"}},r.createElement(n.a,{href:"#openclaw-resources","aria-label":"openclaw resources permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"OpenClaw Resources"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://docs.openclaw.ai"},"Documentation")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://docs.openclaw.ai/start/getting-started"},"Getting Started")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://docs.openclaw.ai/concepts/model-providers"},"Model Providers")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://github.com/openclaw/openclaw"},"GitHub")),"\n"),"\n",r.createElement(n.h3,{id:"docker-resources",style:{position:"relative"}}
1,r.createElement(n.a,{href:"#docker-resources","aria-label":"docker resources permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Docker Resources"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://docs.docker.com/compose/"},"Docker Compose Documentation")),"\n",r.createElement(n.li,null,r.createElement(n.a,{href:"https://docs.docker.com/network/"},"Docker Networking")),"\n"),"\n",r.createElement(n.hr),"\n",r.createElement(n.h2,{id:"conclusion",style:{position:"relative"}},r.createElement(n.a,{href:"#conclusion","aria-label":"conclusion permalink",className:"remark-autolink-anchor before"},r.createElement(n.span,{dangerouslySetInnerHTML:{__html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.3771 7.86873C14.1377 7.10819 15.3708 7.10819 16.1313 7.86873C16.8918 8.62927 16.8918 9.86235 16.1313 10.6229L14.2952 12.459C14.0417 12.7125 14.0417 13.1235 14.2952 13.3771C14.5487 13.6306 14.9597 13.6306 15.2132 13.3771L17.0493 11.5409C18.3169 10.2734 18.3169 8.21824 17.0493 6.95068C15.7818 5.68311 13.7266 5.68311 12.4591 6.95068L10.623 8.78678C10.3695 9.0403 10.3695 9.45132 10.623 9.70484C10.8765 9.95835 11.2875 9.95835 11.541 9.70484L13.3771 7.86873Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M10.1639 13.8361C9.9104 13.5826 9.9104 13.1716 10.1639 12.9181L12.9181 10.1639C13.1716 9.9104 13.5826 9.9104 13.8361 10.1639C14.0896 10.4174 14.0896 10.8285 13.8361 11.082L11.082 13.8361C10.8285 14.0896 10.4174 14.0896 10.1639 13.8361Z" fill="#A1A1AA"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7.86873 13.3771C7.10819 14.1377 7.10819 15.3707 7.86873 16.1313C8.62927 16.8918 9.86235 16.8918 10.6229 16.1313L12.459 14.2952C12.7125 14.0417 13.1235 14.0417 13.3771 14.2952C13.6306 14.5487 13.6306 14.9597 13.3771 15.2132L11.5409 17.0493C10.2734 18.3169 8.21824 18.3169 6.95068 17.0493C5.68311 15.7818 5.68311 13.7266 6.95068 12.4591L8.78678 10.623C9.0403 10.3694 9.45132 10.3694 9.70484 10.623C9.95835 10.8765 9.95835 11.2875 9.70484 11.541L7.86873 13.3771Z" fill="#A1A1AA"/></svg>'}})),"Conclusion"),"\n",r.createElement(n.p,null,"You now have a production-ready OpenClaw deployment with Docker Compose that provides:"),"\n",r.createElement(n.p,null,"â
",r.createElement(n.strong,null,"Flexible Deployment:")," Runs on any Docker hostâlocal, homelab, VPS, or cloud\nâ
",r.createElement(n.strong,null,"Infrastructure as Code:")," Reproducible deployment with docker-compose.yml\nâ
",r.createElement(n.strong,null,"Private by Default:")," Gateway on localhost, secure by design\nâ
",r.createElement(n.strong,null,"Optional Remote Access:")," Caddy + Twingate for secure remote/team access\nâ
",r.createElement(n.strong,null,"No Public Ports:")," Zero Trust access without exposing infrastru
1cture\nâ ",r.createElement(n.strong,null,"No SSH Tunneling:")," HTTP access through Caddy reverse proxy\nâ ",r.createElement(n.strong,null,"Easy Management:")," Docker Compose commands for all operations"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Next Steps:")),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Configure custom skills")," for your use cases"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Set up automated backups")," with cron or scheduled tasks"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Add team members")," via Twingate groups and policies"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Enable MFA")," for production deployments"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Explore messaging integrations")," (WhatsApp, Telegram, Discord)"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Monitor logs and health")," for proactive maintenance"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Deployment Flexibility:")),"\n",r.createElement(n.p,null,"This Docker Compose setup works anywhere Docker runs:"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Local development"),": Laptop or desktop"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Homelab"),": Raspberry Pi, NAS, dedicated server"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"VPS"),": DigitalOcean, Linode, Vultr, etc."),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Cloud VMs"),": AWS EC2, GCP Compute Engine, Azure VM"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Multi-cloud"),": Deploy across providers with same configuration"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Security Benefits of Zero Trust Architecture:")),"\n",r.createElement(n.p,null,"By adding Twingate, you get:"),"\n",r.createElement(n.ul,null,"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Granular access control"),": Per-resource, per-user policies"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Audit logging"),": Track all connections and access attempts"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"MFA enforcement"),": Require multi-factor authentication"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"No VPN complexity"),": Modern alternative to traditional VPN"),"\n",r.createElement(n.li,null,r.createElement(n.strong,null,"Defense in depth"),": Even if server is compromised, gateway remains protected"),"\n"),"\n",r.createElement(n.p,null,r.createElement(n.strong,null,"Questions?")," Check the troubleshooting section above or reach out on our ",r.createElement(n.a,{href:"https://www.reddit.com/r/Twingate/"},"Twingate Subreddit"),"."),"\n",r.createElement(n.p,null,"Happy deploying! ð"))}n.A=function(e){void 0===e&&(e={});const{wrapper:n}=Object.assign({},(0,t.RP)(),e.components);return n?r.createElement(n,e,r.createElement(a,e)):a(e)}}}]); 2//# sourceMappingURL=a0d8d651-46aa9d911d3b9fd7dde2.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.