[{"data":1,"prerenderedAt":304},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-introduction":130,"-docs-getting-started-introduction-surround":301},[4,25,70,90,115],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation","i-lucide-terminal",{"title":21,"path":22,"stem":23,"icon":24},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F3.quickstart","i-lucide-rocket",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Deploy","\u002Fdocs\u002Fdeploy","docs\u002F2.deploy",[30,35,40,45,50,55,60,65],{"title":31,"path":32,"stem":33,"icon":34},"Projects and services","\u002Fdocs\u002Fdeploy\u002Fprojects-and-services","docs\u002F2.deploy\u002F1.projects-and-services","i-lucide-folder-kanban",{"title":36,"path":37,"stem":38,"icon":39},"Docker images","\u002Fdocs\u002Fdeploy\u002Fdocker-images","docs\u002F2.deploy\u002F2.docker-images","i-lucide-container",{"title":41,"path":42,"stem":43,"icon":44},"Git repositories","\u002Fdocs\u002Fdeploy\u002Fgit-repositories","docs\u002F2.deploy\u002F3.git-repositories","i-lucide-git-branch",{"title":46,"path":47,"stem":48,"icon":49},"Databases","\u002Fdocs\u002Fdeploy\u002Fdatabases","docs\u002F2.deploy\u002F4.databases","i-lucide-database",{"title":51,"path":52,"stem":53,"icon":54},"Environment variables","\u002Fdocs\u002Fdeploy\u002Fenvironment-variables","docs\u002F2.deploy\u002F5.environment-variables","i-lucide-key-round",{"title":56,"path":57,"stem":58,"icon":59},"Deployments and logs","\u002Fdocs\u002Fdeploy\u002Fdeployments","docs\u002F2.deploy\u002F6.deployments","i-lucide-scroll-text",{"title":61,"path":62,"stem":63,"icon":64},"Deploy hooks","\u002Fdocs\u002Fdeploy\u002Fdeploy-hooks","docs\u002F2.deploy\u002F7.deploy-hooks","i-lucide-webhook",{"title":66,"path":67,"stem":68,"icon":69},"Domains and HTTPS","\u002Fdocs\u002Fdeploy\u002Fdomains","docs\u002F2.deploy\u002F8.domains","i-lucide-lock",{"title":71,"icon":6,"path":72,"stem":73,"children":74,"page":6},"Backups","\u002Fdocs\u002Fbackups","docs\u002F3.backups",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Backup destinations","\u002Fdocs\u002Fbackups\u002Fbackup-destinations","docs\u002F3.backups\u002F1.backup-destinations","i-lucide-hard-drive-upload",{"title":81,"path":82,"stem":83,"icon":84},"Database backups","\u002Fdocs\u002Fbackups\u002Fdatabase-backups","docs\u002F3.backups\u002F2.database-backups","i-lucide-archive-restore",{"title":86,"path":87,"stem":88,"icon":89},"Backing up Harblet","\u002Fdocs\u002Fbackups\u002Fharblet-backups","docs\u002F3.backups\u002F3.harblet-backups","i-lucide-shield-check",{"title":91,"icon":6,"path":92,"stem":93,"children":94,"page":6},"Administration","\u002Fdocs\u002Fadministration","docs\u002F4.administration",[95,100,105,110],{"title":96,"path":97,"stem":98,"icon":99},"Harblet's domain","\u002Fdocs\u002Fadministration\u002Fharblet-domain","docs\u002F4.administration\u002F1.harblet-domain","i-lucide-globe",{"title":101,"path":102,"stem":103,"icon":104},"Servers","\u002Fdocs\u002Fadministration\u002Fservers","docs\u002F4.administration\u002F2.servers","i-lucide-server",{"title":106,"path":107,"stem":108,"icon":109},"Team and account","\u002Fdocs\u002Fadministration\u002Fteam","docs\u002F4.administration\u002F3.team","i-lucide-users",{"title":111,"path":112,"stem":113,"icon":114},"Updates","\u002Fdocs\u002Fadministration\u002Fupdates","docs\u002F4.administration\u002F4.updates","i-lucide-refresh-cw",{"title":116,"icon":6,"path":117,"stem":118,"children":119,"page":6},"Reference","\u002Fdocs\u002Freference","docs\u002F5.reference",[120,125],{"title":121,"path":122,"stem":123,"icon":124},"Troubleshooting","\u002Fdocs\u002Freference\u002Ftroubleshooting","docs\u002F5.reference\u002F1.troubleshooting","i-lucide-life-buoy",{"title":126,"path":127,"stem":128,"icon":129},"License","\u002Fdocs\u002Freference\u002Flicense","docs\u002F5.reference\u002F2.license","i-lucide-scale",{"id":131,"title":11,"body":132,"description":294,"extension":295,"links":296,"meta":297,"navigation":298,"path":12,"seo":299,"stem":13,"__hash__":300},"docs\u002Fdocs\u002F1.getting-started\u002F1.introduction.md",{"type":133,"value":134,"toc":286},"minimark",[135,139,149,154,215,219,233,236,240,243,277,280],[136,137,138],"p",{},"Harblet is a deploy platform you host on your own servers. One command installs it on a fresh Ubuntu server. From then on you deploy Docker images, Git repositories and databases from the browser.",[140,141,142,146],"card-group",{},[143,144,145],"card",{"icon":19,"title":16,"to":17},"Requirements and the install command.",[143,147,148],{"icon":24,"title":21,"to":22},"From a fresh install to a service on your own domain.",[150,151,153],"h2",{"id":152},"how-harblet-is-organized","How Harblet is organized",[155,156,157,173,179,209],"ul",{},[158,159,160,163,164,167,168,172],"li",{},[161,162,101],"strong",{}," are the machines Harblet runs on. The ",[161,165,166],{},"first server"," is the one you install Harblet on. It runs Harblet itself and receives all traffic for your domains. ",[169,170,171],"a",{"href":102},"More servers"," join with one command, and Harblet places services on all of them.",[158,174,175,178],{},[161,176,177],{},"Projects"," group services that belong together, for example an app, its worker and its database. Services in a project reach each other over a private network. Services in other projects can't reach them.",[158,180,181,184,185,188,189,192,193,196,197,200,201,204,205,208],{},[161,182,183],{},"Services"," are the things that run: a ",[169,186,187],{"href":37},"Docker image",", a ",[169,190,191],{"href":42},"Git repository"," that Harblet builds, or a ",[169,194,195],{"href":47},"database",". Each service has its own ",[169,198,199],{"href":52},"environment variables",", ",[169,202,203],{"href":67},"domains"," and ",[169,206,207],{"href":57},"deployments",".",[158,210,211,214],{},[161,212,213],{},"Deployments"," are created by every deploy. Harblet builds the code if needed, starts the new version and waits until it's healthy. If a deployment fails, the version before it keeps running.",[150,216,218],{"id":217},"what-runs-under-the-hood","What runs under the hood",[136,220,221,222,228,229,232],{},"Harblet runs on ",[169,223,227],{"href":224,"rel":225},"https:\u002F\u002Fk3s.io",[226],"nofollow","k3s",", the lightweight Kubernetes distribution from the CNCF. The install script sets up k3s, and Harblet manages it from then on, ",[169,230,231],{"href":112},"upgrades"," included. You never need to touch Kubernetes.",[136,234,235],{},"Because every server is part of one k3s cluster, logs and backups work the same on every server. Image and Git services keep running and move to another server when theirs fails, even while Harblet itself is down. Databases stay on the server that holds their data.",[150,237,239],{"id":238},"good-to-know","Good to know",[136,241,242],{},"Harblet is young. These limits apply to the current version:",[155,244,245,254,260,271],{},[158,246,247,250,251,253],{},[161,248,249],{},"No volumes on services yet."," Files that an image or Git service writes to its own disk are lost on every deploy and restart. Keep data in a ",[169,252,195],{"href":47}," or in external storage such as S3. Databases keep their data on the server they run on.",[158,255,256,259],{},[161,257,258],{},"One copy per service."," Each service runs as a single instance.",[158,261,262,265,266,270],{},[161,263,264],{},"Uploaded certificates only."," HTTPS needs a certificate that you ",[169,267,269],{"href":268},"\u002Fdocs\u002Fdeploy\u002Fdomains#certificates","upload",". Harblet doesn't request certificates from Let's Encrypt for you at the moment.",[158,272,273,276],{},[161,274,275],{},"No Docker Compose files or templates yet."," Add each part of a stack as its own service in one project.",[150,278,126],{"id":279},"license",[136,281,282,283,285],{},"Harblet is source-available under the Business Source License 1.1. Production use is free while all your installs together manage one server and you don't offer Harblet to others as a hosted service. See ",[169,284,126],{"href":127}," for the details.",{"title":287,"searchDepth":288,"depth":288,"links":289},"",2,[290,291,292,293],{"id":152,"depth":288,"text":153},{"id":217,"depth":288,"text":218},{"id":238,"depth":288,"text":239},{"id":279,"depth":288,"text":126},"Harblet is a deploy platform you host on your own servers, as an alternative to Vercel, Render and Heroku.","md",null,{},{"icon":14},{"title":11,"description":294},"TD3Vj8EAA6HSr9v9QpHdZuYxxWbkPCrj6o7oifSRd9I",[296,302],{"title":16,"path":17,"stem":18,"description":303,"icon":19,"children":-1},"Install Harblet on a fresh Ubuntu server with one command.",1794744116397]