[{"data":1,"prerenderedAt":195},["ShallowReactive",2],{"doc:self-host\u002Fvps":3},{"title":4,"description":5,"url":6,"markdownPath":7,"file":8,"section":9,"sectionTitle":10,"html":11,"toc":12,"navigation":54,"previous":193,"next":194},"Run a Server on a VPS","Operator reference for the L4 VPS installer and the llll command, from install and addresses to backups, upgrades, restore and uninstall.","\u002Fdocs\u002Fself-host\u002Fvps","\u002Fdocs\u002Fself-host\u002Fvps.md","docs\u002Fself-host\u002Fvps.md","self-host","Self-host","\u003Cp>The VPS installer runs one standalone L4 Server on a Linux machine you control. It uses Docker Compose to run the Server on a single \u003Ca href=\"https:\u002F\u002Fcelld.dev\" rel=\"noopener\">celld\u003C\u002Fa> node, a private \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Frustfs\u002Frustfs\" rel=\"noopener\">RustFS\u003C\u002Fa> bucket for storage and Caddy for public HTTPS. The Server&#39;s Accounts, UUID, files and realtime all stay on that machine.\u003C\u002Fp>\n\u003Cp>This page is the operator reference. For a short first install, see \u003Ca href=\"\u002Fdocs\u002Fget-started\u002Finstall-on-a-vps\">Install on a VPS\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cblockquote class=\"callout callout-note\">\u003Cp class=\"callout-title\">Note\u003C\u002Fp>\u003Cp>The Cloudflare path is verified first. The VPS path is newer: fresh-VM HTTPS and browser acceptance are still being recorded. Test your Server (claim, invite, chat, files) before you invite many people.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"requirements\">\u003Ca class=\"heading-anchor\" href=\"#requirements\">Requirements\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>A dedicated \u003Cstrong>amd64\u003C\u002Fstrong> VPS running Debian 12 or 13, or Ubuntu 22.04 or 24.04. VPS releases support Linux amd64 only.\u003C\u002Fli>\n\u003Cli>At least 2 GiB RAM and 5 GiB free disk.\u003C\u002Fli>\n\u003Cli>A domain whose A\u002FAAAA records point at the VPS. A domain is required; there is no automatic IP-based hostname.\u003C\u002Fli>\n\u003Cli>Inbound TCP 80 and 443 open. UDP 443 is optional (HTTP\u002F3).\u003C\u002Fli>\n\u003Cli>\u003Ccode>bash\u003C\u002Fcode>, \u003Ccode>curl\u003C\u002Fcode>, CA certificates and the standard core utilities.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The script installs missing \u003Ccode>jq\u003C\u002Fcode>, OpenSSL and iproute2. If Docker is missing, it installs Docker Engine and Compose from Docker&#39;s official apt repository. An existing Docker must be Engine 24 or newer with Compose 2.24.4 or newer; it is never replaced. Snap Docker and remote Docker daemons are refused.\u003C\u002Fp>\n\u003Cp>Caddy gets and renews certificates itself. Its \u003Ca href=\"https:\u002F\u002Fcaddyserver.com\u002Fdocs\u002Fautomatic-https\" rel=\"noopener\">HTTPS requirements\u003C\u002Fa> need correct DNS and reachable ports. If the VPS already runs another reverse proxy, use \u003Ca href=\"\u002Fdocs\u002Fself-host\u002Fdocker\">Docker Compose\u003C\u002Fa> instead.\u003C\u002Fp>\n\u003Ch2 id=\"install\">\u003Ca class=\"heading-anchor\" href=\"#install\">Install\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Run as root on the VPS:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">curl -fsSL https:\u002F\u002Fllll.gg\u002Finstall.sh | sudo env \\\n  LLLL_DOMAIN=chat.example.com \\\n  LLLL_ADMIN_EMAIL=owner@example.com \\\n  bash\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The \u003Cstrong>VPS\u003C\u002Fstrong> tab on the \u003Ca href=\"https:\u002F\u002Fllll.gg\u002Fcreate?tab=vps\">Create page\u003C\u002Fa> builds the same command from your domain and Owner email.\u003C\u002Fp>\n\u003Cp>The downloaded script pins its exact version, Git commit and the SHA-256 of the runtime image and Compose files. It never builds source on the VPS. A checksum failure stops the script before it installs packages, loads an image or writes any installation files.\u003C\u002Fp>\n\u003Cp>When it finishes, the installer waits for the Server to be healthy and checks its public address, version and UUID. If the Server has no Owner yet, it prints a private link ending in \u003Ccode>\u002Fsetup#claim=…\u003C\u002Fcode>. Open it, choose the Owner password, then invite a member.\u003C\u002Fp>\n\u003Cblockquote class=\"callout callout-warning\">\u003Cp class=\"callout-title\">Warning\u003C\u002Fp>\u003Cp>The setup link is printed only to your terminal. It is not written to a log or a file. Do not paste terminal output into shared logs.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3 id=\"inspect-the-script-first\">\u003Ca class=\"heading-anchor\" href=\"#inspect-the-script-first\">Inspect the script first\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>To download and check a named release before running it:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">version=&#39;&lt;published-version&gt;&#39;\nbase=&quot;https:\u002F\u002Fgithub.com\u002Finchidev\u002Fllll\u002Freleases\u002Fdownload\u002Fv${version}&quot;\ncurl -fSLO &quot;$base\u002Finstall.sh&quot;\ncurl -fSLO &quot;$base\u002FSHA256SUMS&quot;\nawk &#39;$2 == &quot;install.sh&quot;&#39; SHA256SUMS | sha256sum --check\nless install.sh\nsudo env LLLL_DOMAIN=chat.example.com LLLL_ADMIN_EMAIL=owner@example.com bash install.sh\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>For a prerelease (alpha, beta or rc), add \u003Ccode>LLLL_CHANNEL=prerelease\u003C\u002Fcode>. Checksums and provenance come from GitHub over HTTPS; releases are not cryptographically signed.\u003C\u002Fp>\n\u003Ch3 id=\"what-the-installer-creates\">\u003Ca class=\"heading-anchor\" href=\"#what-the-installer-creates\">What the installer creates\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Ccode>\u002Fopt\u002Fllll\u003C\u002Fcode>, mode 0700, with the private \u003Ccode>.env\u003C\u002Fcode> (mode 0600).\u003C\u002Fli>\n\u003Cli>A private copy of the CLI and \u003Ccode>\u002Fusr\u002Flocal\u002Fbin\u002Fllll\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>A generated \u003Ccode>SERVER_ID\u003C\u002Fcode> UUIDv4 in \u003Ccode>.env\u003C\u002Fcode>. It names the Server, its resources and its backups.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Running the same installer again restarts and verifies the Server without changing \u003Ccode>.env\u003C\u002Fcode>, credentials, volumes or UUID. To move to another version, use \u003Ccode>llll upgrade\u003C\u002Fcode>. If an install fails, the private configuration is kept so you can fix DNS, firewall or settings and rerun the same script.\u003C\u002Fp>\n\u003Ch2 id=\"everyday-commands\">\u003Ca class=\"heading-anchor\" href=\"#everyday-commands\">Everyday commands\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">sudo llll status\nsudo llll logs\nsudo llll stop\nsudo llll start\nsudo llll backup\nsudo llll upgrade\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>status\u003C\u002Fcode> shows the containers, version and primary address. \u003Ccode>logs\u003C\u002Fcode> follows the last 100 lines.\u003C\u002Fp>\n\u003Ch2 id=\"server-addresses\">\u003Ca class=\"heading-anchor\" href=\"#server-addresses\">Server addresses\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A Server can answer at several addresses. One is the \u003Cstrong>primary address\u003C\u002Fstrong>; the others are \u003Cstrong>aliases\u003C\u002Fstrong>. All of them reach the same Server, Accounts and content.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">sudo llll domain list\nsudo llll domain add chat.example.com\nsudo llll domain primary chat.example.com\nsudo llll domain remove old.example.com\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>To add an address:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Point the new hostname&#39;s DNS at the VPS.\u003C\u002Fli>\n\u003Cli>Run \u003Ccode>sudo llll domain add &lt;hostname&gt;\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The command adds the origin to \u003Ccode>LLLL_ORIGINS\u003C\u002Fcode>, adds the name to Caddy, restarts the stack, waits for a certificate and checks discovery at every address. If any check fails, it restores the previous \u003Ccode>.env\u003C\u002Fcode> and configuration.\u003C\u002Fp>\n\u003Cp>\u003Ccode>domain primary\u003C\u002Fcode> changes the primary address (\u003Ccode>PUBLIC_ORIGIN\u003C\u002Fcode>) and keeps the old one as an alias. You cannot remove the primary address; promote another one first.\u003C\u002Fp>\n\u003Ch2 id=\"backups\">\u003Ca class=\"heading-anchor\" href=\"#backups\">Backups\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">sudo llll backup\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>A backup stops the stack for consistency, archives \u003Ccode>.env\u003C\u002Fcode>, the deployment and CLI files, and the RustFS, celld and Caddy volumes, then starts the stack again (also when the archive fails). Archives are mode 0600 under \u003Ccode>\u002Fvar\u002Fbackups\u002Fllll\u002F&lt;installation-key&gt;\u003C\u002Fcode>. The latest seven are kept; set \u003Ccode>LLLL_BACKUP_KEEP\u003C\u002Fcode> on first install to change this.\u003C\u002Fp>\n\u003Cblockquote class=\"callout callout-important\">\u003Cp class=\"callout-title\">Important\u003C\u002Fp>\u003Cp>celld stores the Server&#39;s Worker variables, including \u003Ccode>AUTH_SECRET\u003C\u002Fcode>, in plaintext inside its private bucket. Treat the VPS disk and every backup archive as secrets. Copy backups off the host, encrypted, and test a restore.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Scheduled backups are not supported yet. Run \u003Ccode>llll backup\u003C\u002Fcode> yourself or from your own scheduler.\u003C\u002Fp>\n\u003Ch2 id=\"upgrade\">\u003Ca class=\"heading-anchor\" href=\"#upgrade\">Upgrade\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">sudo llll upgrade                                         # latest stable release\nsudo env LLLL_CHANNEL=prerelease llll upgrade &lt;version&gt;   # a named prerelease\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>An upgrade:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Downloads the selected release&#39;s installer and verifies it.\u003C\u002Fli>\n\u003Cli>Refuses a downgrade.\u003C\u002Fli>\n\u003Cli>Verifies and loads the new runtime image.\u003C\u002Fli>\n\u003Cli>Takes a mandatory backup.\u003C\u002Fli>\n\u003Cli>Starts the new version and checks it.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>If startup or discovery fails, it stops the failed stack, restores the previous Compose files, \u003Ccode>.env\u003C\u002Fcode>, CLI and all four volumes, and checks the old version again. The old image stays on the machine. Expect a short outage, because a single node restarts. If the rollback itself fails, the backup is kept and the command fails; read \u003Ccode>llll logs\u003C\u002Fcode> before you change anything else.\u003C\u002Fp>\n\u003Cp>Automatic updates are not supported yet.\u003C\u002Fp>\n\u003Ch2 id=\"restore\">\u003Ca class=\"heading-anchor\" href=\"#restore\">Restore\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Restore onto a fresh host that uses the same DNS name, with a published \u003Ccode>install.sh\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">sudo env LLLL_DIR=\u002Fopt\u002Fllll bash install.sh restore \u002Fprivate\u002Fllll-backup-….tar.gz\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The target directory must not exist and the four volumes must be empty. Restore verifies the archive, downloads and checks the runtime version that made the backup, restores the original secrets and UUID, and checks discovery. Point DNS at the restored host. Check that existing Accounts, sessions and private files work before switching traffic.\u003C\u002Fp>\n\u003Cblockquote class=\"callout callout-warning\">\u003Cp class=\"callout-title\">Warning\u003C\u002Fp>\u003Cp>Never run two active copies of the same Server at once.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"uninstall\">\u003Ca class=\"heading-anchor\" href=\"#uninstall\">Uninstall\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">sudo llll uninstall           # confirms the project and backs up first\nsudo llll uninstall --purge   # also removes this Server&#39;s live volumes\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Ccode>--yes\u003C\u002Fcode> confirms without a prompt; \u003Ccode>--no-backup\u003C\u002Fcode> explicitly skips the backup. Uninstall keeps the configuration, the CLI, all backup archives, Docker and shared images. It never prunes Docker. After a plain uninstall, \u003Ccode>llll start\u003C\u002Fcode> brings the Server back. After \u003Ccode>--purge\u003C\u002Fcode>, restore from a backup.\u003C\u002Fp>\n\u003Ch2 id=\"configuration\">\u003Ca class=\"heading-anchor\" href=\"#configuration\">Configuration\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Inputs apply on first install. Reruns keep the saved values.\u003C\u002Fp>\n\u003Cdiv class=\"table-wrap\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Input\u003C\u002Fth>\n\u003Cth>Default and meaning\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_DOMAIN\u003C\u002Fcode>, \u003Ccode>LLLL_ADMIN_EMAIL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Required on first install. Domain without scheme or path; email of the first Owner.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_ADMIN_PASSWORD\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Optional, at least 12 characters. Creates the first Owner with this password, so no claim link is printed. It is stored in \u003Ccode>.env\u003C\u002Fcode>; change it after signing in.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PUBLIC_ORIGIN\u003C\u002Fcode>, \u003Ccode>LLLL_ORIGINS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Primary origin and comma-separated aliases. Managed by \u003Ccode>llll domain\u003C\u002Fcode>; do not edit by hand.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_DIR\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fopt\u002Fllll\u003C\u002Fcode>. Use the same value with every CLI command if you change it.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_CHANNEL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>stable\u003C\u002Fcode>. Set \u003Ccode>prerelease\u003C\u002Fcode> to install or upgrade to an alpha, beta or rc.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_ACME_EMAIL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The Owner email; used for Caddy&#39;s ACME account.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_HTTP_PORT\u003C\u002Fcode>, \u003Ccode>LLLL_HTTPS_PORT\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>80\u003C\u002Fcode> and \u003Ccode>443\u003C\u002Fcode>. Custom ports need public ACME challenge ports forwarded.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_NO_TLS\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>false\u003C\u002Fcode>. \u003Ccode>true\u003C\u002Fcode> serves plain HTTP, for isolated tests only.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_SKIP_DOCKER_INSTALL\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>false\u003C\u002Fcode>. \u003Ccode>true\u003C\u002Fcode> requires an existing local Docker Engine and Compose.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_BACKUP_DIR\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fvar\u002Fbackups\u002Fllll\u002F&lt;installation-key&gt;\u003C\u002Fcode>. Must be outside \u003Ccode>LLLL_DIR\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_BACKUP_KEEP\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>7\u003C\u002Fcode>.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>LLLL_FACTORY\u003C\u002Fcode>, \u003Ccode>LLLL_SHARED_KERNEL_TRUSTED\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Set both (\u003Ccode>true\u003C\u002Fcode>, \u003Ccode>1\u003C\u002Fcode>) to add a \u003Ca href=\"\u002Fdocs\u002Fself-host\u002Fcompute-nodes\">Compute Node\u003C\u002Fa> during install.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>The version is chosen by the installer or \u003Ccode>llll upgrade\u003C\u002Fcode>, never by editing an environment variable.\u003C\u002Fp>\n\u003Ch3 id=\"optional-providers\">\u003Ca class=\"heading-anchor\" href=\"#optional-providers\">Optional providers\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Mail, AI models, page reading and calls are optional. To add them, edit the private \u003Ccode>\u002Fopt\u002Fllll\u002F.env\u003C\u002Fcode> using the keys listed in \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Finchidev\u002Fllll\u002Fblob\u002Fmain\u002Fself-host\u002F.env.example\" rel=\"noopener\">\u003Ccode>self-host\u002F.env.example\u003C\u002Fcode>\u003C\u002Fa>, then run \u003Ccode>sudo llll start\u003C\u002Fcode>. See \u003Ca href=\"\u002Fdocs\u002Fself-host\u002Fdocker#optional-providers\">Providers off Cloudflare\u003C\u002Fa> for what each key does.\u003C\u002Fp>\n\u003Ch2 id=\"related\">\u003Ca class=\"heading-anchor\" href=\"#related\">Related\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Fdocs\u002Fself-host\u002Fdocker\">Docker Compose\u003C\u002Fa> for a manual stack behind your own proxy.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fdocs\u002Fself-host\u002Fcompute-nodes\">Compute Nodes\u003C\u002Fa> to let Agents work on repositories on this VPS.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fdocs\u002Fconcepts\u002Freleases-and-updates\">Releases and updates\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fdocs\u002Freference\u002Ftroubleshooting\">Troubleshooting\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n",[13,17,20,24,27,30,33,36,39,42,45,48,51],{"id":14,"text":15,"depth":16},"requirements","Requirements",2,{"id":18,"text":19,"depth":16},"install","Install",{"id":21,"text":22,"depth":23},"inspect-the-script-first","Inspect the script first",3,{"id":25,"text":26,"depth":23},"what-the-installer-creates","What the installer creates",{"id":28,"text":29,"depth":16},"everyday-commands","Everyday commands",{"id":31,"text":32,"depth":16},"server-addresses","Server addresses",{"id":34,"text":35,"depth":16},"backups","Backups",{"id":37,"text":38,"depth":16},"upgrade","Upgrade",{"id":40,"text":41,"depth":16},"restore","Restore",{"id":43,"text":44,"depth":16},"uninstall","Uninstall",{"id":46,"text":47,"depth":16},"configuration","Configuration",{"id":49,"text":50,"depth":23},"optional-providers","Optional providers",{"id":52,"text":53,"depth":16},"related","Related",[55,80,108,120,139,161,183],{"id":56,"title":57,"pages":58},"get-started","Get started",[59,62,65,68,71,74,77],{"title":60,"url":61},"What is L4","\u002Fdocs\u002Fget-started\u002Fwhat-is-l4",{"title":63,"url":64},"Choose how to run your Server","\u002Fdocs\u002Fget-started\u002Fchoose-how-to-run",{"title":66,"url":67},"Create a Server on Cloudflare","\u002Fdocs\u002Fget-started\u002Fcreate-on-cloudflare",{"title":69,"url":70},"Install on a VPS","\u002Fdocs\u002Fget-started\u002Finstall-on-a-vps",{"title":72,"url":73},"Connect to a Server","\u002Fdocs\u002Fget-started\u002Fconnect-a-server",{"title":75,"url":76},"Invite your team","\u002Fdocs\u002Fget-started\u002Finvite-your-team",{"title":78,"url":79},"Create your first Agent","\u002Fdocs\u002Fget-started\u002Ffirst-agent",{"id":81,"title":82,"pages":83},"cloudflare","Cloudflare",[84,87,90,93,96,99,102,105],{"title":85,"url":86},"L4 on Cloudflare","\u002Fdocs\u002Fcloudflare\u002Foverview",{"title":88,"url":89},"Cloudflare access","\u002Fdocs\u002Fcloudflare\u002Faccess",{"title":91,"url":92},"Costs and limits","\u002Fdocs\u002Fcloudflare\u002Fcosts-and-limits",{"title":94,"url":95},"Custom domain","\u002Fdocs\u002Fcloudflare\u002Fcustom-domain",{"title":97,"url":98},"Mail on Cloudflare","\u002Fdocs\u002Fcloudflare\u002Fmail",{"title":100,"url":101},"Update a Cloudflare Server","\u002Fdocs\u002Fcloudflare\u002Fupdates",{"title":103,"url":104},"Backups on Cloudflare","\u002Fdocs\u002Fcloudflare\u002Fbackups",{"title":106,"url":107},"Remove a Cloudflare Server","\u002Fdocs\u002Fcloudflare\u002Fremove-a-server",{"id":9,"title":10,"pages":109},[110,111,114,117],{"title":4,"url":6},{"title":112,"url":113},"Run a Server with Docker Compose","\u002Fdocs\u002Fself-host\u002Fdocker",{"title":115,"url":116},"Run a Server on Coolify","\u002Fdocs\u002Fself-host\u002Fcoolify",{"title":118,"url":119},"Compute Nodes","\u002Fdocs\u002Fself-host\u002Fcompute-nodes",{"id":121,"title":122,"pages":123},"concepts","Concepts",[124,127,130,133,136],{"title":125,"url":126},"Servers and the Shell","\u002Fdocs\u002Fconcepts\u002Fserver-and-shell",{"title":128,"url":129},"Accounts, Members and Roles","\u002Fdocs\u002Fconcepts\u002Faccounts-members-roles",{"title":131,"url":132},"Agents, Tasks and Runs","\u002Fdocs\u002Fconcepts\u002Fagents-tasks-runs",{"title":134,"url":135},"Files and backups","\u002Fdocs\u002Fconcepts\u002Ffiles-and-backups",{"title":137,"url":138},"Releases and updates","\u002Fdocs\u002Fconcepts\u002Freleases-and-updates",{"id":140,"title":141,"pages":142},"agents","Agents and MCP",[143,146,149,152,155,158],{"title":144,"url":145},"Agents overview","\u002Fdocs\u002Fagents\u002Foverview",{"title":147,"url":148},"Models and Providers","\u002Fdocs\u002Fagents\u002Fmodels-and-providers",{"title":150,"url":151},"Connect an MCP client","\u002Fdocs\u002Fagents\u002Fmcp",{"title":153,"url":154},"External agents","\u002Fdocs\u002Fagents\u002Fexternal-agents",{"title":156,"url":157},"Repositories and code work","\u002Fdocs\u002Fagents\u002Frepositories",{"title":159,"url":160},"Schedules","\u002Fdocs\u002Fagents\u002Fschedules",{"id":162,"title":163,"pages":164},"guides","Guides",[165,168,171,174,177,180],{"title":166,"url":167},"Chat","\u002Fdocs\u002Fguides\u002Fchat",{"title":169,"url":170},"Projects and Tasks","\u002Fdocs\u002Fguides\u002Fprojects-and-tasks",{"title":172,"url":173},"Mail","\u002Fdocs\u002Fguides\u002Fmail",{"title":175,"url":176},"Calls and Live","\u002Fdocs\u002Fguides\u002Fcalls",{"title":178,"url":179},"Notifications","\u002Fdocs\u002Fguides\u002Fnotifications",{"title":181,"url":182},"Telegram","\u002Fdocs\u002Fguides\u002Ftelegram",{"id":184,"title":185,"pages":186},"reference","Reference",[187,190],{"title":188,"url":189},"Glossary","\u002Fdocs\u002Freference\u002Fglossary",{"title":191,"url":192},"Troubleshooting","\u002Fdocs\u002Freference\u002Ftroubleshooting",{"title":106,"url":107},{"title":112,"url":113},1793304298230]