Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.
Levelrail runs on ordinary Linux machines, so a spare computer at home is a fair place to try it. This page covers what the code supports, the install, and the one problem that most home connections have: no public address.
Nothing on this page has been run on a Raspberry Pi, an old laptop or a mini PC by the Levelrail team. Statements about the code are checked against the source. Anything about real hardware is marked “not yet verified on real hardware”.
Architectures: amd64 and arm64. The server readiness check fails any other architecture, and so does the node preflight (APP_NODE_PREFLIGHT_ARCHITECTURES defaults to amd64,arm64). A 64-bit Raspberry Pi OS or Ubuntu on a Pi 4 or Pi 5 reports arm64. A 32-bit OS reports armv7l and is not supported.
Operating system: Linux with systemd and root access, as in Getting started.
Memory: 1 vCPU and 1 GB of RAM boots the platform. 2 GB is more comfortable once you build images on the same machine. How much a given app needs on a Pi is not yet verified on real hardware.
Disk: the node preflight wants 5 GB free by default (APP_NODE_PREFLIGHT_MIN_DISK_FREE_MB). Prefer an SSD to an SD card for database and image storage. Whether an SD card holds up is not yet verified on real hardware.
Check the architecture before you start:
uname -m # x86_64 or aarch64 is fine, armv7l is not
curl -fsSL https://levelrail.com/install.sh | sudo sh
The install on a Pi 4 or Pi 5, an old laptop and a mini PC is the same command. It is not yet verified on real hardware for any of the three.For a laptop, turn off sleep on lid close and on idle, or the server stops when you walk away. Give the machine a fixed address on your router so the address you use does not change.
Run the control plane on a small public VPS and enroll the home machine as a node. The node dials out to the control plane, and the control plane never opens a connection to the node, so the home connection needs no inbound port for enrollment. See Multi-node for how enrollment works and Add a node anywhere for the guided flow, which treats a home server as a normal node.Cross-node networking uses the WireGuard mesh. Public traffic lands on the VPS, and the VPS reaches apps on the home node over the mesh. Whether the mesh data path works from behind CGNAT is not yet verified on real hardware. Set APP_AGENT_ADVERTISE_HOST to the VPS address, as Multi-node describes.
A wildcard host can get a trusted certificate with DNS-01 and a connected DNS provider (Cloudflare, Route53 or Google Cloud DNS), without any inbound port. Traffic still has to reach the machine, so this suits a home network you reach over a VPN or a LAN. See Domains and ingress.
An experimental Cloudflare Tunnel controller exists behind a flag and has not been run against a real account, so do not rely on it yet. An uploaded certificate works for any host you can reach, with no ACME traffic. See Domains and ingress.
Last modified on November 2, 2026
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Levelrail","description":"Self-hosted deployment platform. Push to git, get a running app with TLS, logs, metrics and rollback. One Go binary, no Kubernetes.","colors":{"primary":"#107292","light":"#2FB3DC","dark":"#084F67"},"logo":{"light":"https://mintcdn.com/levelrail/56HjW70mOjUmjIrm/assets/brand/wordmark-light.svg?fit=max\u0026auto=format\u0026n=56HjW70mOjUmjIrm\u0026q=85\u0026s=cbe02b3c3d17b11f9cc5a18551a30782","dark":"https://mintcdn.com/levelrail/56HjW70mOjUmjIrm/assets/brand/wordmark-dark.svg?fit=max\u0026auto=format\u0026n=56HjW70mOjUmjIrm\u0026q=85\u0026s=a4aa78b496c43e0a5edd9dffce778a45","href":"https://levelrail.com"},"favicon":"https://mintcdn.com/levelrail/zPhEnShTGkGFCjPc/public/favicon.svg?fit=max\u0026auto=format\u0026n=zPhEnShTGkGFCjPc\u0026q=85\u0026s=65f3143dd7539d4b1d34090204f05be0","appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#ffffff","dark":"#000000"}},"navbar":{"links":[{"icon":"globe","href":"https://levelrail.com","label":"Website"},{"icon":"clock-rotate-left","href":"/changelog","label":"Changelog"},{"icon":"github","href":"https://github.com/glincker/levelrail","label":"GitHub"}],"primary":{"type":"button","label":"Get started","href":"/getting-started"}},"footer":{"socials":{"github":"https://github.com/glincker/levelrail","x":"https://x.com/thegdsks","website":"https://levelrail.com"}},"search":{"prompt":"Search docs, CLI, API, guides"},"seo":{"metatags":{"og:site_name":"Levelrail Docs","og:type":"website","og:image":"https://docs.levelrail.com/public/og/default.png","og:image:width":"1200","og:image:height":"630","twitter:card":"summary_large_image","twitter:image":"https://docs.levelrail.com/public/og/default.png","twitter:site":"@thegdsks","keywords":"self-hosted PaaS, Coolify alternative, Docker deployment platform, self-hosted deploys, Levelrail"},"indexing":"navigable"},"fonts":{"heading":{"family":"Geist","weight":500},"body":{"family":"Geist"}},"styling":{"codeblocks":"dark","latex":true},"errors":{"404":{"redirect":false,"title":"Page not found","description":"This page moved or never existed. Try the [quickstart](/getting-started), the [all pages index](/all-pages) or search above."}},"contextual":{"options":["copy","view","chatgpt","claude","cursor","mcp"],"display":"header"},"interaction":{"drilldown":true},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"levelrail","hasAudioNarration":false,"actualSubdomain":"levelrail","customDomains":["docs.levelrail.com"],"gitSource":{"type":"github","owner":"glincker","repo":"levelrail","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae55b6d71e14ebd55e5e8d1","collectionId":"09587cf6-515d-45b3-aca7-851d8ce28357","liveDeploymentHistoryId":"6ae55b6d71e14ebd55e5e8d1","schemaVersion":"v3"},"entitlements":{},"buildId":"6ae8b11106138f92515e625a","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Self-host gallery","count":443},{"language":"default","tag":"How-to guides","count":217},{"language":"default","tag":"Productivity","count":82},{"language":"default","tag":"Developer Tools","count":67},{"language":"default","tag":"Deploying","count":47},{"language":"default","tag":"Get started","count":45},{"language":"default","tag":"Reference","count":42},{"language":"default","tag":"AI","count":36},{"language":"default","tag":"Monitoring","count":35},{"language":"default","tag":"Appendix","count":34}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--lr-live:#2fb3dc;--lr-soft:#58b1ce;--lr-teal:#107292;--lr-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--lr-r:12px;--lr-face:#0e0f11;--lr-face-2:#141617;--lr-text:#cfcfd3;--lr-link:#58b1ce;--lr-line:rgba(255, 255, 255, 0.08);--lr-ring:linear-gradient(180deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0.04) 40%, rgba(255, 255, 255, 0.06));--lr-ring-hot:linear-gradient(180deg, rgba(47, 179, 220, 0.55), rgba(47, 179, 220, 0.12) 45%, rgba(47, 179, 220, 0.2));--lr-sheen:linear-gradient(180deg, rgba(255, 255, 255, 0.035), rgba(255, 255, 255, 0));--lr-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 1px 1px rgba(0, 0, 0, 0.5), 0 8px 16px -4px rgba(0, 0, 0, 0.55), 0 24px 48px -12px rgba(0, 0, 0, 0.65);--lr-glow-op:1;--lr-grain:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 9 0 0 0 -4.3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\")}html:not(.dark){--lr-face:#ffffff;--lr-face-2:#f6f6f7;--lr-text:#3a3d40;--lr-link:#107292;--lr-line:rgba(14, 15, 17, 0.1);--lr-ring:linear-gradient(180deg, rgba(14, 15, 17, 0.2), rgba(14, 15, 17, 0.08) 40%, rgba(14, 15, 17, 0.1));--lr-ring-hot:linear-gradient(180deg, rgba(16, 114, 146, 0.6), rgba(16, 114, 146, 0.18) 45%, rgba(16, 114, 146, 0.26));--lr-sheen:linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0));--lr-shadow:0 1px 1px rgba(14, 15, 17, 0.06), 0 8px 16px -6px rgba(14, 15, 17, 0.1);--lr-glow-op:0.35}html.dark body{background-color:#000}body{position:relative;font-feature-settings:\"cv11\",\"ss03\";-webkit-font-smoothing:antialiased}body::after,body::before{content:\"\";position:absolute;inset:0 0 auto 0;height:440px;z-index:-1;pointer-events:none;background:radial-gradient(54% 92% at 50% 0,rgba(47,179,220,.42),transparent 72%),radial-gradient(38% 78% at 10% 0,rgba(31,200,176,.3),transparent 72%),radial-gradient(36% 70% at 92% 0,rgba(108,125,255,.3),transparent 72%)}body::before{opacity:calc(.4*var(--lr-glow-op))}body::after{opacity:calc(.9*var(--lr-glow-op));filter:saturate(1.2) brightness(1.25);-webkit-mask-image:var(--lr-grain),linear-gradient(to bottom,#000 0%,transparent 88%);-webkit-mask-size:220px 220px,100% 100%;-webkit-mask-composite:source-in;mask-image:var(--lr-grain),linear-gradient(to bottom,#000 0%,transparent 88%);mask-size:220px 220px,100% 100%;mask-composite:intersect}html{isolation:isolate}#content-area,#content-container{color:var(--lr-text)}#page-title{font-weight:300;letter-spacing:-.03em;line-height:1.08;text-wrap:balance}#content-area h2{font-weight:300;letter-spacing:-.025em}#content-area h3,#content-area h4{font-weight:500;letter-spacing:-.02em}#content-area p,#header p{text-wrap:pretty}#header>div>div:first-child:not(:has(h1)){font-family:var(--lr-mono);font-size:.75rem;letter-spacing:.08em;text-transform:uppercase;color:#8d8d96}#content-area a:not(.card):not([data-component-part]){color:var(--lr-link)}#content-area a[href]:not(.card){text-decoration-color:color-mix(in srgb,var(--lr-link) 40%,transparent)}#content-area a[href]:not(.card):hover{text-decoration-color:currentColor}code,kbd,pre,samp{font-family:var(--lr-mono)!important;font-feature-settings:\"calt\" 0}#content-area :not(pre)>code{background:var(--lr-face-2);border:1px solid var(--lr-line);border-radius:6px;padding:.1em .4em;font-size:.875em;color:inherit}html.dark #content-area :not(pre)>code{color:#e4e4e7}.code-block{border-radius:var(--lr-r);border:1px solid transparent;box-shadow:var(--lr-shadow);background:var(--lr-sheen) padding-box,linear-gradient(#08090a,#08090a) padding-box,var(--lr-ring) border-box}.code-block-background,.code-block>div{border-radius:var(--lr-r);background-color:transparent}#sidebar .sticky.pointer-events-none,.code-block [data-component-part=code-block-root],.code-block pre{background:0 0}.code-block code{font-size:.8125rem;line-height:1.7}.accordion,.accordion-group,.callout,.card{border:1px solid transparent;border-radius:var(--lr-r);box-shadow:var(--lr-shadow);background:var(--lr-sheen) padding-box,linear-gradient(var(--lr-face),var(--lr-face)) padding-box,var(--lr-ring) border-box}.card{transition:box-shadow .2s,transform .2s}.card:hover{transform:translateY(-1px)}html.dark .card:hover{border-color:rgba(47,179,220,.45)}.card [data-component-part=card-title]{font-weight:500;letter-spacing:-.01em}#navbar .nav-tabs-item[data-active=true],.card [data-component-part=card-icon]{color:var(--lr-live)}html:not(.dark) #navbar .nav-tabs-item[data-active=true],html:not(.dark) .card [data-component-part=card-icon]{color:#107292}.accordion{margin-bottom:.75rem}.accordion,.accordion-group{overflow:hidden}.callout{padding:1rem 1.25rem}.callout[class*=border-blue],.callout[class*=border-green],.callout[class*=border-red],.callout[class*=border-sky],.callout[class*=border-yellow]{background:var(--lr-sheen) padding-box,linear-gradient(var(--lr-face),var(--lr-face)) padding-box,var(--lr-ring) border-box}@media (prefers-reduced-motion:reduce){.card{transition:none}.card:hover{transform:none}}#content-area table{border-collapse:separate;border-spacing:0;border:1px solid var(--lr-line);border-radius:var(--lr-r);overflow:hidden;box-shadow:var(--lr-shadow)}#content-area thead th{font-family:var(--lr-mono);font-size:.75rem;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:#8d8d96;background:var(--lr-face-2)}#content-area tbody td,#content-area thead th{border-bottom:1px solid var(--lr-line)}#content-area tbody tr:last-child td{border-bottom:0}#navbar>div.absolute,#navbar>div>div.absolute{background:color-mix(in srgb,var(--lr-face) 38%,transparent);border-bottom-color:var(--lr-line);backdrop-filter:blur(20px) saturate(1.3);-webkit-backdrop-filter:blur(20px) saturate(1.3)}#navbar .nav-tabs-item[data-active=true]::after,#navbar .nav-tabs-item[data-active=true]>div{background:var(--lr-live)}html:not(.dark) #navbar .nav-tabs-item[data-active=true]::after,html:not(.dark) #navbar .nav-tabs-item[data-active=true]>div{background:#107292}#topbar-cta-button a>span.absolute{border-radius:50px;background:var(--lr-live);border:1px solid rgba(255,255,255,.35);box-shadow:inset 0 1px 0 rgba(255,255,255,.55),inset 0 -2px 0 rgba(0,0,0,.18),0 6px 14px -6px rgba(47,179,220,.45)}#topbar-cta-button a{padding-left:1rem;padding-right:.75rem}#topbar-cta-button a .text-white,#topbar-cta-button a svg{color:#000!important}html:not(.dark) #topbar-cta-button a>span.absolute{background:#06232c;border-color:transparent;box-shadow:0 1px 1px rgba(14,15,17,.3)}html:not(.dark) #topbar-cta-button a .text-white,html:not(.dark) #topbar-cta-button a svg{color:#2fb3dc!important}#search-bar-entry{border-radius:50px;border:1px solid transparent;box-shadow:var(--lr-shadow);background:var(--lr-sheen) padding-box,linear-gradient(var(--lr-face-2),var(--lr-face-2)) padding-box,var(--lr-ring) border-box}#search-bar-entry:hover{background:var(--lr-sheen) padding-box,linear-gradient(var(--lr-face-2),var(--lr-face-2)) padding-box,var(--lr-ring-hot) border-box}#sidebar .sidebar-group-header{font-family:var(--lr-mono);font-size:.6875rem;letter-spacing:.08em;text-transform:uppercase;font-weight:500;color:#8d8d96}#sidebar a[aria-current=page]{border-radius:50px;color:var(--lr-live);background:rgba(47,179,220,.08);box-shadow:inset 0 0 0 1px rgba(47,179,220,.2)}html:not(.dark) #sidebar a[aria-current=page]{color:#084f67;background:rgba(16,114,146,.09);box-shadow:inset 0 0 0 1px rgba(16,114,146,.25)}#sidebar a:not([aria-current=page]):hover{border-radius:50px}#table-of-contents .toc-item[data-active=true],#table-of-contents a[data-active=true]{color:var(--lr-live)}html:not(.dark) #table-of-contents a[data-active=true]{color:#107292}#footer{border-top:1px solid var(--lr-line)}#content-area table td,#content-area table th{padding:.75rem 1rem;vertical-align:top}#content-area table td:first-child{font-weight:500}#navbar .nav-tabs-item[data-active=true] img[src*=\"/assets/icons/\"],#sidebar a[aria-current=page] img[src*=\"/assets/icons/\"]{filter:brightness(0) saturate(100%) invert(58%) sepia(96%) saturate(237%) hue-rotate(148deg) brightness(81%) contrast(149%)}html:not(.dark) #navbar .nav-tabs-item[data-active=true] img[src*=\"/assets/icons/\"],html:not(.dark) #sidebar a[aria-current=page] img[src*=\"/assets/icons/\"]{filter:brightness(0) saturate(100%) invert(28%) sepia(90%) saturate(323%) hue-rotate(148deg) brightness(118%) contrast(123%)}"}],"page":{"pagePath":"home-hardware","slug":"/home-hardware","pageMetadata":{"title":"Run Levelrail on home hardware","sidebarTitle":"Home hardware","description":"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.","og:url":"https://docs.levelrail.com/home-hardware","href":"/home-hardware"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Levelrail runs on ordinary Linux machines, so a spare computer at home is a fair place to try it. This page covers what the code supports, the install, and the one problem that most home connections have: no public address.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Nothing on this page has been run on a Raspberry Pi, an old laptop or a mini PC by the Levelrail team. Statements about the code are checked against the source. Anything about real hardware is marked “not yet verified on real hardware”.`})}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-supported`,children:`What is supported`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Architectures: `,_jsx(_components.code,{children:`amd64`}),` and `,_jsx(_components.code,{children:`arm64`}),`.`]}),` The server readiness check fails any other architecture, and so does the node preflight (`,_jsx(_components.code,{children:`APP_NODE_PREFLIGHT_ARCHITECTURES`}),` defaults to `,_jsx(_components.code,{children:`amd64,arm64`}),`). A 64-bit Raspberry Pi OS or Ubuntu on a Pi 4 or Pi 5 reports `,_jsx(_components.code,{children:`arm64`}),`. A 32-bit OS reports `,_jsx(_components.code,{children:`armv7l`}),` and is not supported.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Operating system:`}),` Linux with systemd and root access, as in `,_jsx(_components.a,{href:`/getting-started`,children:`Getting started`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Memory:`}),` 1 vCPU and 1 GB of RAM boots the platform. 2 GB is more comfortable once you build images on the same machine. How much a given app needs on a Pi is not yet verified on real hardware.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Disk:`}),` the node preflight wants 5 GB free by default (`,_jsx(_components.code,{children:`APP_NODE_PREFLIGHT_MIN_DISK_FREE_MB`}),`). Prefer an SSD to an SD card for database and image storage. Whether an SD card holds up is not yet verified on real hardware.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Check the architecture before you start:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`uname`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` -m`}),_jsx(_components.span,{style:{color:`#6A9955`,\"--shiki-dark\":`#6A9955`},children:` # x86_64 or aarch64 is fine, armv7l is not`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`install`,children:`Install`}),`\n`,_jsxs(_components.p,{children:[`On the machine itself, as in `,_jsx(_components.a,{href:`/installing`,children:`Installing`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:` -fsSL`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` https://levelrail.com/install.sh`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` | `}),_jsx(_components.span,{style:{color:`#DCDCAA`,\"--shiki-dark\":`#DCDCAA`},children:`sudo`}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:` sh`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`The install on a Pi 4 or Pi 5, an old laptop and a mini PC is the same command. It is not yet verified on real hardware for any of the three.`}),`\n`,_jsx(_components.p,{children:`For a laptop, turn off sleep on lid close and on idle, or the server stops when you walk away. Give the machine a fixed address on your router so the address you use does not change.`}),`\n`,_jsx(Heading,{level:`2`,id:`the-public-address-problem`,children:`The public address problem`}),`\n`,_jsxs(_components.p,{children:[`Let’s Encrypt and the default `,_jsx(_components.code,{children:`sslip.io`}),` address need the internet to reach ports 80 and 443 on your machine. Many home connections cannot allow that:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The provider uses carrier-grade NAT (CGNAT), so your router has no public IPv4 address of its own.`}),`\n`,_jsx(_components.li,{children:`The provider blocks inbound ports 80 or 443.`}),`\n`,_jsx(_components.li,{children:`Your address changes and you have no hostname for it.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`Port forwarding does not help with CGNAT. You have three options.`}),`\n`,_jsx(Heading,{level:`3`,id:`option-1-public-vps-control-plane-home-node`,children:`Option 1: public VPS control plane, home node`}),`\n`,_jsxs(_components.p,{children:[`Run the control plane on a small public VPS and enroll the home machine as a node. The node dials out to the control plane, and the control plane never opens a connection to the node, so the home connection needs no inbound port for enrollment. See `,_jsx(_components.a,{href:`/multi-node`,children:`Multi-node`}),` for how enrollment works and `,_jsx(_components.a,{href:`/add-node-anywhere`,children:`Add a node anywhere`}),` for the guided flow, which treats a home server as a normal node.`]}),`\n`,_jsxs(_components.p,{children:[`Cross-node networking uses the `,_jsx(_components.a,{href:`/multi-node#wireguard-mesh-and-internal-dns`,children:`WireGuard mesh`}),`. Public traffic lands on the VPS, and the VPS reaches apps on the home node over the mesh. Whether the mesh data path works from behind CGNAT is not yet verified on real hardware. Set `,_jsx(_components.code,{children:`APP_AGENT_ADVERTISE_HOST`}),` to the VPS address, as `,_jsx(_components.a,{href:`/multi-node`,children:`Multi-node`}),` describes.`]}),`\n`,_jsx(Heading,{level:`3`,id:`option-2-wildcard-certificate`,children:`Option 2: wildcard certificate`}),`\n`,_jsxs(_components.p,{children:[`A wildcard host can get a trusted certificate with DNS-01 and a connected DNS provider (Cloudflare, Route53 or Google Cloud DNS), without any inbound port. Traffic still has to reach the machine, so this suits a home network you reach over a VPN or a LAN. See `,_jsx(_components.a,{href:`/domains-and-ingress`,children:`Domains and ingress`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`option-3-tunnel-or-uploaded-certificate`,children:`Option 3: tunnel or uploaded certificate`}),`\n`,_jsxs(_components.p,{children:[`An experimental Cloudflare Tunnel controller exists behind a flag and has not been run against a real account, so do not rely on it yet. An uploaded certificate works for any host you can reach, with no ACME traffic. See `,_jsx(_components.a,{href:`/domains-and-ingress`,children:`Domains and ingress`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Run Levelrail on home hardware","sidebarTitle":"Home hardware","description":"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.","og:url":"https://docs.levelrail.com/home-hardware","href":"/home-hardware"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"What is supported","slug":"what-is-supported","depth":2,"children":[]},{"title":"Install","slug":"install","depth":2,"children":[]},{"title":"The public address problem","slug":"the-public-address-problem","depth":2,"children":[{"title":"Option 1: public VPS control plane, home node","slug":"option-1-public-vps-control-plane-home-node","depth":3,"children":[]},{"title":"Option 2: wildcard certificate","slug":"option-2-wildcard-certificate","depth":3,"children":[]},{"title":"Option 3: tunnel or uploaded certificate","slug":"option-3-tunnel-or-uploaded-certificate","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/levelrail/34332f0f5f6180ce/public/deploy.js"],"subdomain":"levelrail","siteName":"Levelrail","title":"Run Levelrail on home hardware - Levelrail","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-02T15:50:46.125Z","gitLastModified":"2026-11-02T15:49:32.000Z","originalFileLocation":"home-hardware.md"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.\">\u003cmeta data-mint-head name=\"keywords\" content=\"self-hosted PaaS, Coolify alternative, Docker deployment platform, self-hosted deploys, Levelrail\">\u003cmeta data-mint-head name=\"application-name\" content=\"Levelrail\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Run Levelrail on home hardware - Levelrail\">\u003cmeta data-mint-head property=\"og:description\" content=\"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Levelrail Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.levelrail.com/home-hardware\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.levelrail.com/public/og/default.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Run Levelrail on home hardware - Levelrail\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.levelrail.com/public/og/default.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/levelrail/sfnZeja47AHfK8h4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Levelrail\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#107292\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.levelrail.com/home-hardware\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/home-hardware.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.levelrail.com/#organization\",\"name\":\"Levelrail\",\"url\":\"https://docs.levelrail.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/levelrail/56HjW70mOjUmjIrm/assets/brand/wordmark-light.svg?fit=max\u0026auto=format\u0026n=56HjW70mOjUmjIrm\u0026q=85\u0026s=cbe02b3c3d17b11f9cc5a18551a30782\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.levelrail.com#website\",\"name\":\"Levelrail\",\"url\":\"https://docs.levelrail.com\",\"publisher\":{\"@id\":\"https://docs.levelrail.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.levelrail.com/home-hardware#webpage\",\"url\":\"https://docs.levelrail.com/home-hardware\",\"name\":\"Run Levelrail on home hardware\",\"description\":\"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.\",\"dateModified\":\"2026-11-02T15:49:32.000Z\",\"isPartOf\":{\"@id\":\"https://docs.levelrail.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.levelrail.com/home-hardware#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.levelrail.com/home-hardware#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Networking and multi-node\",\"item\":\"https://docs.levelrail.com/domains-and-ingress\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Run Levelrail on home hardware\",\"item\":\"https://docs.levelrail.com/home-hardware\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.levelrail.com/home-hardware#article\",\"headline\":\"Run Levelrail on home hardware\",\"name\":\"Run Levelrail on home hardware\",\"description\":\"Install notes for a Raspberry Pi, an old laptop or a mini PC, and what to do when your home connection has no public address.\",\"url\":\"https://docs.levelrail.com/home-hardware\",\"mainEntityOfPage\":{\"@id\":\"https://docs.levelrail.com/home-hardware#webpage\"},\"image\":\"https://docs.levelrail.com/public/og/default.png\",\"dateModified\":\"2026-11-02T15:49:32.000Z\",\"publisher\":{\"@id\":\"https://docs.levelrail.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.levelrail.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Levelrail\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Levelrail","nav":{"global":null,"tabs":[{"tab":"Get started","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/rocket-launch.svg","pages":[{"title":"Get started","href":""}]},{"tab":"How-to guides","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/book-open.svg","groups":[{"group":"Essentials","pages":[{"title":"Troubleshooting","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/lifebuoy.svg","sidebarTitle":"Troubleshooting","href":"/troubleshooting"},{"title":"Doctor","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/lifebuoy.svg","sidebarTitle":"Doctor","href":"/doctor"},{"title":"Email notifications","href":"/email-notifications"},{"title":"Email templates and messages","href":"/email-templates"},{"title":"Alert inbox","href":"/alert-inbox"},{"title":"Event webhooks","href":"/event-webhooks"},{"title":"Off-host heartbeat","href":"/heartbeat"},{"title":"Attention center","href":"/attention-center"}]},{"group":"Deploying","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/cloud-arrow-up.svg","pages":[{"title":"Deploying and managing apps","sidebarTitle":"Deploying apps","href":"/deploying-apps"},{"title":"Deploy from your computer","sidebarTitle":"Deploy from CLI","href":"/deploy-from-cli"},{"title":"Drop deploy for static sites","sidebarTitle":"Drop deploy","href":"/drop-deploy"},{"title":"Compose apps","href":"/compose-apps"},{"title":"App files","href":"/app-files"},{"title":"UDP published ports","href":"/udp-ports"},{"title":"New app wizard","href":"/new-app-wizard"},{"title":"Importing apps","href":"/importing-apps"},{"title":"Static pages","sidebarTitle":"Pages","href":"/pages"},{"title":"Static site routing rules","sidebarTitle":"Static routing","href":"/static-routing"},{"title":"Deploy safety","href":"/deploy-safety"},{"title":"Publish lock","href":"/publish-lock"},{"title":"Deploy failures","href":"/deploy-failures"},{"title":"Deploying through git host outages","href":"/git-host-outages"},{"title":"Deploy trace","href":"/deploy-trace"},{"title":"Deploy event timeline","href":"/deploy-event-timeline"},{"title":"Build performance","href":"/build-performance"},{"title":"Build center","href":"/build-center"},{"title":"Scheduled deploys","href":"/scheduled-deploys"},{"title":"Pull request comment commands","href":"/pr-comment-commands"},{"title":"Scheduled jobs","href":"/scheduled-jobs"},{"title":"Scheduled and background functions","href":"/scheduled-functions"},{"title":"Jobs","href":"/jobs"},{"title":"Image auto-update","href":"/image-auto-update"},{"title":"Build hooks","href":"/build-hooks"},{"title":"Sleep when idle","href":"/sleep-when-idle"},{"title":"Functions","href":"/functions"},{"title":"Canary deploys","href":"/canary-deploys"},{"title":"Split testing","href":"/split-testing"},{"title":"Deployments page","href":"/deployments-page"},{"title":"Images","href":"/images"},{"title":"Deploy previews","href":"/deploy-previews"},{"title":"Framework presets","href":"/frameworks"},{"title":"Deploy URLs","href":"/deploy-urls"},{"title":"Deploy links and badge","href":"/deploy-link"},{"title":"Deploy timeline","href":"/deploy-timeline"},{"title":"Preview environments per pull request","sidebarTitle":"Preview environments","href":"/previews"},{"title":"Chat-interactive deploy approvals","sidebarTitle":"Chat approvals","href":"/chat-deploy-approvals"},{"title":"Supply chain visibility","href":"/supply-chain"},{"title":"Secret scanning","href":"/secret-scanning"},{"title":"Deploy status badge","href":"/deploy-status-badge"},{"title":"Dashboard screenshots","href":"/screenshots"},{"title":"Running Levelrail in Docker","href":"/docker"},{"title":"Zero-downtime deploys with Docker: readiness-gated cutover and rollback","href":"/zero-downtime-deploys"},{"title":"Rollout control","href":"/rollout-control"},{"title":"Preview environments per pull request on your own servers","href":"/preview-environments"},{"title":"Deploy contexts: env and build settings per kind of deploy","href":"/deploy-contexts"}]},{"group":"Networking and multi-node","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/globe-hemisphere-west.svg","pages":[{"title":"Domains and ingress","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/globe-hemisphere-west.svg","sidebarTitle":"Add a domain and HTTPS","href":"/domains-and-ingress"},{"title":"Standalone domains","href":"/standalone-domains"},{"title":"Domain setup stepper","href":"/domains"},{"title":"Dynamic DNS","href":"/dynamic-dns"},{"title":"DNS zones and records","href":"/dns"},{"title":"Mail DNS","tag":"Experimental","href":"/mail-dns"},{"title":"Mail server template","tag":"Experimental","href":"/mail-template"},{"title":"Mailboxes, aliases and the mail queue","tag":"Experimental","href":"/mail-mailboxes"},{"title":"Mail backup and restore","href":"/mail-backup"},{"title":"Mail storage","href":"/mail-storage"},{"title":"Diagnose a domain","href":"/domain-diagnosis"},{"title":"Domain traffic controls","href":"/domain-traffic-controls"},{"title":"Ingress abuse defense","href":"/abuse-defense"},{"title":"CDN and caching","href":"/cdn-and-caching"},{"title":"Forms","tag":"Beta","href":"/forms"},{"title":"Firewall","href":"/firewall"},{"title":"Verifying real ACME issuance against a live domain","href":"/acme-verification-runbook"},{"title":"Multi-node: adding and managing nodes","tag":"Beta","href":"/multi-node"},{"title":"Multi-node quickstart","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/hard-drives.svg","tag":"Beta","sidebarTitle":"Add a second server","href":"/multi-node-quickstart"},{"title":"Add a node anywhere","tag":"Beta","sidebarTitle":"Add a node anywhere","description":"Add an EC2 instance, Google Cloud VM, VPS or home server as a node in one guided flow, with zone auto-detect, preflight checks and failure-domain placement.","href":"/add-node-anywhere"},{"title":"Run Levelrail on home hardware","sidebarTitle":"Home hardware","href":"/home-hardware"},{"title":"Resource-aware placement","tag":"Beta","description":"How new apps and databases are placed on nodes with room for them, how to read the \"why here\" explanation, and how to set the overcommit policy.","href":"/resource-aware-placement"},{"title":"Autoscaling","tag":"Beta","href":"/autoscaling"},{"title":"Node provisioning","href":"/node-provisioning"},{"title":"Multi-cloud provisioning quickstart","href":"/multi-cloud-provisioning"},{"title":"Network topology view","href":"/network-topology"},{"title":"Private app tunnel","href":"/app-tunnel"},{"title":"Project topology graph","href":"/service-topology-graph"},{"title":"Canvas","href":"/canvas"},{"title":"Build node routing","href":"/build-node-routing"}]},{"group":"Databases and storage","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/database.svg","pages":[{"title":"Managing databases","href":"/managing-databases"},{"title":"Postgres connection pooler","href":"/postgres-pooler"},{"title":"Database upgrades","href":"/database-upgrades"},{"title":"Database version catalog","href":"/database-version-catalog"},{"title":"External databases","href":"/external-databases"},{"title":"Connecting apps to databases","href":"/connecting-apps-to-databases"},{"title":"Backup targets, registry credentials, and app volume backups","sidebarTitle":"Backups and storage","href":"/backups-and-storage"},{"title":"Backup copies","href":"/backup-copies"},{"title":"Volume files","href":"/volume-files"},{"title":"Prove your backups work","href":"/prove-your-backups-work"},{"title":"Object storage","href":"/object-storage"},{"title":"Network shares","href":"/network-shares"},{"title":"Log explorer","href":"/log-explorer"},{"title":"Custom dashboards","href":"/custom-dashboards"},{"title":"Tracing","href":"/tracing"},{"title":"Error tracking","href":"/error-tracking"},{"title":"Loki-compatible log API","href":"/loki-api"},{"title":"Log pipelines","href":"/log-pipelines"},{"title":"Log volume budgets","href":"/log-budgets"},{"title":"Data export","href":"/data-export"},{"title":"Traffic export","href":"/traffic-export"},{"title":"Audit event schema","href":"/audit-event-schema"},{"title":"Control plane backup and restore","sidebarTitle":"Control plane backup","href":"/control-plane-backup"},{"title":"Whole-server recovery","href":"/whole-server-recovery"},{"title":"Archives","href":"/archives"},{"title":"Disaster recovery","href":"/disaster-recovery"},{"title":"Control plane recovery","href":"/control-plane-recovery"},{"title":"Upgrade safely","href":"/upgrade-safely"},{"title":"Database access and network","href":"/database-access"},{"title":"Private networks and allow rules","href":"/private-networks"},{"title":"Database explorer and fleet overview","href":"/database-explorer"},{"title":"Database viewer","href":"/database-viewer"}]},{"group":"CI/CD and automation","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/git-branch.svg","pages":[{"title":"Deploying from GitHub Actions","href":"/github-actions"},{"title":"Use any CI","href":"/use-any-ci"},{"title":"Pipelines","href":"/pipelines"},{"title":"Pipelines: OIDC federation","href":"/pipelines-oidc"},{"title":"Git integrations","href":"/git-integrations"},{"title":"Git reliability","href":"/git-reliability"},{"title":"Wait for CI before deploying","href":"/ci-gate"},{"title":"Deploy with git push","href":"/git-push-deploy"},{"title":"Import a repository","sidebarTitle":"Import a repo","href":"/import-a-repo"},{"title":"Monorepos","href":"/monorepos"}]},{"group":"Security and access","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/shield-check.svg","pages":[{"title":"Sign-in engine","href":"/auth-engine"},{"title":"Host firewall","href":"/host-firewall"},{"title":"Exposure audit","href":"/exposure-audit"},{"title":"Security center","href":"/security-center"},{"title":"Compliance evidence","href":"/compliance-evidence"},{"title":"Emergency access","href":"/emergency-access"},{"title":"Master key rotation","href":"/master-key-rotation"},{"title":"Secret rotation policies","href":"/secret-rotation"},{"title":"Your account","href":"/account"},{"title":"Access control","href":"/access-control"},{"title":"Labels and namespaces","href":"/labels"},{"title":"Teams and roles","href":"/teams-and-roles"},{"title":"Team and project quotas","href":"/team-and-project-quotas"},{"title":"Environments","href":"/environments"},{"title":"Promotions and release notes","href":"/promotions-and-releases"},{"title":"Identity and access: users, roles, and IAM policies","href":"/identity-and-access"},{"title":"SAML single sign-on","href":"/sso-saml"},{"title":"OAuth and OIDC single sign-on","href":"/sso-oidc"},{"title":"SCIM provisioning","href":"/scim"},{"title":"Session policy","href":"/session-policy"},{"title":"Projects, organizations, and environments","href":"/projects-and-organizations"}]},{"group":"Scale and operations","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/chart-line-up.svg","pages":[{"title":"Managing apps at scale","href":"/managing-apps-at-scale"},{"title":"Tags","href":"/tags"},{"title":"Resource console","href":"/resource-console"},{"title":"Command palette","href":"/command-palette"},{"title":"Cost estimate","href":"/cost-estimate"},{"title":"Usage and cost","href":"/usage-and-cost"},{"title":"Cost explorer and budgets","href":"/cost-explorer"},{"title":"Spend caps","href":"/spend-caps"},{"title":"Integrations","href":"/integrations"},{"title":"Cloud integrations","href":"/cloud-integrations"},{"title":"Rolling back the control plane","href":"/rollback"},{"title":"Pre-deploy database snapshots","href":"/predeploy-snapshot"},{"title":"Resilience: what survives a control plane crash","href":"/resilience"},{"title":"Resilience, in short","href":"/resilience-summary"},{"title":"Chaos test coverage","href":"/chaos-coverage"},{"title":"Observability: metrics, logs, and alerts","href":"/observability"},{"title":"Traffic observability: rate, errors and duration","href":"/traffic-observability"},{"title":"Public status page","href":"/status-page"},{"title":"Monitors","href":"/monitors"},{"title":"External monitoring","href":"/external-monitoring"},{"title":"Scheduled maintenance","href":"/scheduled-maintenance"},{"title":"Deploy policies","href":"/deploy-policies"},{"title":"What's new panel","href":"/whats-new-panel"}]},{"group":"AI and agents","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/sparkle.svg","pages":[{"title":"Working with AI agents","href":"/agents"},{"title":"AI control","href":"/ai-control"}]},{"group":"Templates and catalog","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/squares-four.svg","pages":[{"title":"Service template catalog","tag":"Beta","href":"/templates-and-registry"},{"title":"Private registries","href":"/private-registries"},{"title":"Template upgrades","href":"/template-upgrades"},{"title":"Template catalog","href":"/template-catalog"},{"title":"Deploy button","href":"/deploy-button"},{"title":"Template status","href":"/templates-status"},{"title":"Catalog index","href":"/catalog-index"},{"title":"Add a template","href":"/add-a-template"},{"title":"Arm64 compatibility","href":"/arm-compatibility"},{"title":"Starter kit templates","href":"/templates"}]},{"group":"Migrate","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/arrows-left-right.svg","pages":[{"title":"Migrate to Levelrail","sidebarTitle":"Migration overview","href":"/migrate-to-levelrail"},{"title":"Migration wizard","sidebarTitle":"Migration wizard","href":"/migration-wizard"},{"title":"Migrate from Coolify","sidebarTitle":"From Coolify","href":"/migrate-from-coolify"},{"title":"Coolify exit gap report","sidebarTitle":"Coolify exit gaps","href":"/coolify-exit-gap-report"},{"title":"Move a Coolify one-click service to a Compose app","sidebarTitle":"Service to Compose","href":"/coolify-service-to-compose"},{"title":"Migrate from Dokploy","sidebarTitle":"From Dokploy","href":"/migrate-from-dokploy"},{"title":"Migrate from CapRover","sidebarTitle":"From CapRover","href":"/migrate-from-caprover"},{"title":"Migrate from Dokku","sidebarTitle":"From Dokku","href":"/migrate-from-dokku"},{"title":"Migrate from Docker Compose","sidebarTitle":"From Docker Compose","href":"/migrate-from-docker-compose"},{"title":"Import Kubernetes manifests","href":"/import-kubernetes"},{"title":"Migration reference","sidebarTitle":"Reference","href":"/migration-reference"},{"title":"Migrating from Coolify, Dokploy, or CapRover","sidebarTitle":"Moved: migration guides","href":"/migrating-from-coolify-dokploy-and-caprover"},{"title":"Migration agent threat model","sidebarTitle":"Migration agent threat model","href":"/migration-agent-threat-model"},{"title":"Migrate on the same server","href":"/migrate-same-server"},{"title":"Move a domain with no downtime","href":"/move-a-domain-with-no-downtime"},{"title":"Migrate over SSH","href":"/migrate-over-ssh"},{"title":"Migrating a Next.js app from Vercel","href":"/migrating-from-vercel"},{"title":"Migrating a static site from Netlify","href":"/migrating-from-netlify"},{"title":"Migrating a service from Cloud Run","href":"/migrating-from-cloud-run"}]},{"group":"Beta and experimental","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/flask.svg","pages":[{"title":"AI assistant integration: levelrail-mcp","tag":"Beta","href":"/ai-assistant"},{"title":"MCP tools, token budget and write mode","tag":"Beta","href":"/mcp"},{"title":"Connect an AI assistant safely","href":"/mcp-safe-setup"},{"title":"MCP recipes","tag":"Beta","href":"/mcp-recipes"},{"title":"In-app AI assistant chat","tag":"Experimental","href":"/ai-assistant-chat"},{"title":"AI models","tag":"Experimental","href":"/ai-models"},{"title":"Load balancing across replicas","tag":"Experimental","href":"/load-balancing"},{"title":"Platform as code","tag":"Experimental","href":"/platform-as-code"},{"title":"Leave anytime","sidebarTitle":"Leave anytime","href":"/leave-anytime"},{"title":"Stacks and GitOps","tag":"Experimental","href":"/stacks"},{"title":"Resource advisor (beta)","tag":"Beta","href":"/resource-advisor"},{"title":"CLI console (beta)","tag":"Beta","href":"/cli-console"},{"title":"Feature flags","href":"/feature-flags"},{"title":"Log archive","tag":"Beta","href":"/log-archive"},{"title":"Automatic cleanup","tag":"Beta","href":"/janitor"},{"title":"Cleanup center","tag":"Beta","href":"/cleanup-center"},{"title":"Unified search","tag":"Beta","href":"/search"}]}]},{"tab":"Reference","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/code.svg","pages":[{"title":"Reference","href":"/app-spec-reference"}]},{"tab":"Concepts","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/lightbulb.svg","pages":[{"title":"Concepts","href":"/product-tour"}]},{"tab":"Self-host gallery","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/squares-four.svg","pages":[{"title":"Self-host gallery","href":"/self-host"}]},{"tab":"Appendix","icon":"https://mintlify.s3.us-west-1.amazonaws.com/levelrail/assets/icons/books.svg","pages":[{"title":"Appendix","href":"/roadmap"}]}]},"basePath":"","title":"Run Levelrail on home hardware - Levelrail","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}