[{"data":1,"prerenderedAt":341},["ShallowReactive",2],{"navigation_docs":3,"-docs-administration-harblet-domain":130,"-docs-administration-harblet-domain-surround":336},[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":96,"body":132,"description":329,"extension":330,"links":331,"meta":332,"navigation":333,"path":97,"seo":334,"stem":98,"__hash__":335},"docs\u002Fdocs\u002F4.administration\u002F1.harblet-domain.md",{"type":133,"value":134,"toc":316},"minimark",[135,148,152,157,225,232,236,240,283,287,290,294,300,304,307,313],[136,137,138,139,143,144,147],"p",{},"After the install, Harblet answers at ",[140,141,142],"code",{},"http:\u002F\u002F\u003Cip>:3000",". Give it its own domain, such as ",[140,145,146],{},"harblet.example.com",", to reach it over HTTPS.",[149,150,151],"note",{},"Settings → General is for admins.",[153,154,156],"h2",{"id":155},"set-the-domain","Set the domain",[158,159,161,166,174,184,188,201,205,222],"steps",{"level":160},"3",[162,163,165],"h3",{"id":164},"point-the-domain-at-the-first-server","Point the domain at the first server",[136,167,168,169,173],{},"Create a DNS ",[170,171,172],"strong",{},"A record"," for the domain with the IP address of your first server.",[175,176,182],"pre",{"className":177,"code":179,"language":180,"meta":181},[178],"language-text","harblet.example.com.    A    203.0.113.10\n","text","",[140,183,179],{"__ignoreMap":181},[162,185,187],{"id":186},"upload-its-certificate","Upload its certificate",[136,189,190,191,194,195,200],{},"Go to ",[170,192,193],{},"SSL Certificates"," and upload a certificate that covers the domain. A wildcard certificate for your other domains works too. See ",[196,197,199],"a",{"href":198},"\u002Fdocs\u002Fdeploy\u002Fdomains#certificates","Certificates",".",[162,202,204],{"id":203},"save-the-domain","Save the domain",[136,206,190,207,210,211,214,215,218,219,200],{},[170,208,209],{},"Settings"," → ",[170,212,213],{},"General",", enter the domain under ",[170,216,217],{},"Domain"," and click ",[170,220,221],{},"Save",[136,223,224],{},"Harblet refuses a domain that a service already uses, or one without a valid certificate.",[136,226,227,228,231],{},"Harblet restarts and is ready a few seconds later at ",[140,229,230],{},"https:\u002F\u002Fharblet.example.com",". Log in again there. Your services keep running during the restart.",[233,234,235],"warning",{},"Check the DNS record before you save. From then on, logins only work at the new domain.",[153,237,239],{"id":238},"what-changes","What changes",[241,242,243,254,260,274],"ul",{},[244,245,246,249,250,253],"li",{},[170,247,248],{},"Logins"," only work at ",[140,251,252],{},"https:\u002F\u002F\u003Cdomain>",". Logins at the old address are rejected.",[244,255,256,259],{},[170,257,258],{},"Plain HTTP"," to the domain is redirected to HTTPS.",[244,261,262,265,266,269,270,273],{},[170,263,264],{},"Deploy hook URLs"," and ",[170,267,268],{},"join commands"," start with the new domain. Copy the new ",[196,271,272],{"href":62},"deploy hook"," URLs into your pipelines.",[244,275,276,279,280,282],{},[170,277,278],{},"Port 3000"," still answers at ",[140,281,142],{}," for pages, deploy hooks and join commands. Harblet never closes it.",[153,284,286],{"id":285},"close-port-3000","Close port 3000",[136,288,289],{},"Once Harblet works at its domain, you can close port 3000 in your firewall. Keep a way to open it again: it's your way back in by IP address if something goes wrong with the domain.",[153,291,293],{"id":292},"renew-the-certificate","Renew the certificate",[136,295,296,297,299],{},"Upload the renewed certificate under ",[170,298,193],{}," before the old one expires. Harblet uses it within seconds. Then delete the old one. Harblet refuses to delete the last valid certificate for its own domain.",[153,301,303],{"id":302},"change-the-domain","Change the domain",[136,305,306],{},"Repeat the steps above with the new domain. The old domain stops pointing at Harblet.",[136,308,309,310,200],{},"Harblet can't go back to its IP address from the browser. If you saved a wrong domain and can't log in, see ",[196,311,121],{"href":312},"\u002Fdocs\u002Freference\u002Ftroubleshooting#harblet-isnt-reachable-at-its-domain",[149,314,315],{},"GitHub Apps connected before the change keep Harblet's old address as their setup URL on GitHub.",{"title":181,"searchDepth":317,"depth":317,"links":318},2,[319,325,326,327,328],{"id":155,"depth":317,"text":156,"children":320},[321,323,324],{"id":164,"depth":322,"text":165},3,{"id":186,"depth":322,"text":187},{"id":203,"depth":322,"text":204},{"id":238,"depth":317,"text":239},{"id":285,"depth":317,"text":286},{"id":292,"depth":317,"text":293},{"id":302,"depth":317,"text":303},"Reach Harblet at your own domain over HTTPS instead of the server's IP address.","md",null,{},{"icon":99},{"title":96,"description":329},"NeBP9YEk4pEJ6V5rmmoFf7wfKDK961OkHgDR7NdcWXA",[337,339],{"title":86,"path":87,"stem":88,"description":338,"icon":89,"children":-1},"Back up Harblet's own database and restore it onto a fresh server.",{"title":101,"path":102,"stem":103,"description":340,"icon":104,"children":-1},"Add servers with one command, see their load, and remove them again.",1794744117868]