[{"data":1,"prerenderedAt":426},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-quickstart":130,"-docs-getting-started-quickstart-surround":421},[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":21,"body":132,"description":414,"extension":415,"links":416,"meta":417,"navigation":418,"path":22,"seo":419,"stem":23,"__hash__":420},"docs\u002Fdocs\u002F1.getting-started\u002F3.quickstart.md",{"type":133,"value":134,"toc":404},"minimark",[135,143,383,387],[136,137,138,139,142],"p",{},"This guide takes you from a fresh install to an app with a database, reachable at your own domain. You need a running Harblet, see ",[140,141,16],"a",{"href":17},".",[144,145,147,152,172,176,194,208,212,220,276,286,307,311,331,335,376],"steps",{"level":146},"2",[148,149,151],"h2",{"id":150},"create-a-project","Create a project",[136,153,154,155,159,160,163,164,168,169,142],{},"Click ",[156,157,158],"strong",{},"Projects"," in the sidebar, then ",[156,161,162],{},"New project",". Name it after your app, for example ",[165,166,167],"code",{},"My App",", and click ",[156,170,171],{},"Create project",[148,173,175],{"id":174},"add-a-database","Add a database",[136,177,178,179,182,183,186,187,190,191,142],{},"In the project, click ",[156,180,181],{},"New service"," → ",[156,184,185],{},"Database",". Keep ",[156,188,189],{},"PostgreSQL"," and the defaults, and click ",[156,192,193],{},"Create database",[136,195,196,197,200,201,204,205,142],{},"Once it shows ",[156,198,199],{},"Deployed",", open it. Its ",[156,202,203],{},"Overview"," tab shows the connection details. Copy the ",[156,206,207],{},"Connection URL",[148,209,211],{"id":210},"deploy-your-app","Deploy your app",[136,213,214,215,182,217,142],{},"Back in the project, click ",[156,216,181],{},[156,218,219],{},"Git repository",[221,222,223,233,253,263],"ul",{},[224,225,226,229,230,142],"li",{},[156,227,228],{},"Name:"," for example ",[165,231,232],{},"Web",[224,234,235,238,239,242,243,182,246,249,250,142],{},[156,236,237],{},"Repository:"," the ",[165,240,241],{},"https:\u002F\u002F"," URL of a public repository. For private repositories on GitHub or GitLab, an admin connects them first under ",[156,244,245],{},"Settings",[156,247,248],{},"Git",", see ",[140,251,41],{"href":252},"\u002Fdocs\u002Fdeploy\u002Fgit-repositories#private-repositories",[224,254,255,258,259,262],{},[156,256,257],{},"Branch:"," the branch to deploy, ",[165,260,261],{},"main"," by default.",[224,264,265,268,269,272,273,142],{},[156,266,267],{},"Port:"," the port your app listens on, for example ",[165,270,271],{},"3000",". Harblet passes it to your app as ",[165,274,275],{},"PORT",[136,277,154,278,281,282,285],{},[156,279,280],{},"Create service",". Harblet starts building right away. Open the service and watch the build on its ",[156,283,284],{},"Deployments"," tab.",[287,288,289,290,182,292,295,296,298,299,302,303,306],"tip",{},"No app at hand? Click ",[156,291,181],{},[156,293,294],{},"Docker image"," instead, enter ",[165,297,232],{}," as the name, ",[165,300,301],{},"nginx:latest"," as the image and ",[165,304,305],{},"80"," as the port.",[148,308,310],{"id":309},"give-it-the-database","Give it the database",[136,312,313,314,316,317,320,321,324,325,328,329,142],{},"Open the app's ",[156,315,51],{}," tab. Click ",[156,318,319],{},"Add variable",", enter ",[165,322,323],{},"DATABASE_URL"," as the key and paste the connection URL as the value. Click ",[156,326,327],{},"Save",", then ",[156,330,26],{},[148,332,334],{"id":333},"add-your-domain","Add your domain",[336,337,338,349,364],"ol",{},[224,339,340,341,344,345,348],{},"Create a DNS ",[156,342,343],{},"A record"," for your domain, for example ",[165,346,347],{},"app.example.com",", with the IP address of your server.",[224,350,351,352,355,356,359,360,142],{},"Go to ",[156,353,354],{},"SSL Certificates"," in the sidebar and click ",[156,357,358],{},"Upload certificate",". Paste the certificate with its intermediate certificates, and its private key. See ",[140,361,363],{"href":362},"\u002Fdocs\u002Fdeploy\u002Fdomains#certificates","Certificates",[224,365,313,366,369,370,372,373,142],{},[156,367,368],{},"Domains"," tab, enter ",[165,371,347],{}," and click ",[156,374,375],{},"Add domain",[136,377,378,379,382],{},"Open ",[165,380,381],{},"https:\u002F\u002Fapp.example.com",". Your app answers there.",[148,384,386],{"id":385},"whats-next","What's next",[388,389,390,394,397,400],"card-group",{},[391,392,393],"card",{"icon":99,"title":96,"to":97},"Reach Harblet itself at your own domain over HTTPS.",[391,395,396],{"icon":84,"title":71,"to":82},"Back up your database to S3 on a schedule.",[391,398,399],{"icon":64,"title":61,"to":62},"Deploy from your CI pipeline.",[391,401,403],{"icon":109,"title":402,"to":107},"Your team","Invite your colleagues.",{"title":405,"searchDepth":406,"depth":406,"links":407},"",2,[408,409,410,411,412,413],{"id":150,"depth":406,"text":151},{"id":174,"depth":406,"text":175},{"id":210,"depth":406,"text":211},{"id":309,"depth":406,"text":310},{"id":333,"depth":406,"text":334},{"id":385,"depth":406,"text":386},"From a fresh install to a service with a database on your own domain.","md",null,{},{"icon":24},{"title":21,"description":414},"ybXtsOmlhiWbewEI0iXpiKYjN-Yq0hYNnRf14gmFxQc",[422,424],{"title":16,"path":17,"stem":18,"description":423,"icon":19,"children":-1},"Install Harblet on a fresh Ubuntu server with one command.",{"title":31,"path":32,"stem":33,"description":425,"icon":34,"children":-1},"Group the services of one app in a project, and connect them over the project's private network.",1794744116397]