---
canonical_url: "https://harblet.com"
---
<u-page-hero orientation="vertical">
<template v-slot:headline="">
<u-button size="sm" to="https://harblet.com/docs/getting-started/introduction" color="neutral" trailing-icon="i-lucide-arrow-right" variant="subtle">

Self-hosted · Source available

</u-button>
</template>

<template v-slot:title="">

The deploy platform on <span className="text-primary">

your own servers

</span>
</template>

<template v-slot:description="">

Harblet is an alternative to Vercel, Render and Heroku that you host yourself. One command installs it on a fresh Ubuntu server. From then on you deploy Docker images, Git repositories and databases from the browser.

</template>

<template v-slot:links="">
<u-button size="xl" to="https://harblet.com/docs/getting-started/installation" trailing-icon="i-lucide-arrow-right">

Install Harblet

</u-button>

<u-button size="xl" to="https://github.com/harblet/harblet" color="neutral" variant="outline" icon="i-simple-icons-github" target="_blank">

View on GitHub

</u-button>
</template>

<div className="max-w-3xl,mx-auto,w-full,text-left">

```bash [Run on a fresh Ubuntu server]
curl -fsSL https://raw.githubusercontent.com/harblet/harblet/main/install.sh | sudo sh
```

</div>
</u-page-hero>

<u-page-section>
<template v-slot:title="">

From a fresh server to production in three steps

</template>

<template v-slot:description="">

No Kubernetes to learn and no YAML to write. Everything after the install happens in the browser.

</template>

<u-page-grid>
<u-page-card description="Run one command on a fresh Ubuntu server. It sets up k3s and Harblet and prints the address to open. There you create the first account." icon="i-lucide-terminal" title="1. Install" to="https://harblet.com/docs/getting-started/installation">



</u-page-card>

<u-page-card description="Create a project and add services from a Docker image, a Git repository or a one-click database. Add your domain and its certificate." icon="i-lucide-rocket" title="2. Deploy" to="https://harblet.com/docs/getting-started/quickstart">



</u-page-card>

<u-page-card description="Run one command on a new server and it joins. Harblet places services on all servers and moves them when a server fails." icon="i-lucide-server" title="3. Grow" to="https://harblet.com/docs/administration/servers">



</u-page-card>
</u-page-grid>
</u-page-section>

<u-page-section>
<template v-slot:title="">

Everything a deploy needs

</template>

<template v-slot:description="">

Harblet covers the path from code to a running service with a domain, plus the backups and updates that keep it running.

</template>

<template v-slot:features="">
<u-page-feature icon="i-lucide-container" to="https://harblet.com/docs/deploy/git-repositories">
<template v-slot:title="">

Docker images and Git repositories

</template>

<template v-slot:description="">

A repository builds from its Dockerfile, or without one through Railpack. Private GitHub repositories connect through a GitHub App that Harblet sets up for you, and private GitLab repositories through an access token, on GitLab.com or your own GitLab.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-database" to="https://harblet.com/docs/deploy/databases">
<template v-slot:title="">

One-click databases

</template>

<template v-slot:description="">

PostgreSQL 18 and MySQL 8.4 or 9.7. Only services in the same project can reach them.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-archive-restore" to="https://harblet.com/docs/backups/database-backups">
<template v-slot:title="">

Backups to S3

</template>

<template v-slot:description="">

Database dumps go to S3-compatible storage every 15 minutes, every hour or every day. Download or restore any of them. Harblet backs up its own database the same way.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-lock" to="https://harblet.com/docs/deploy/domains">
<template v-slot:title="">

Domains with HTTPS

</template>

<template v-slot:description="">

Add your domains to a service and upload their certificates. Wildcard certificates work.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-scroll-text" to="https://harblet.com/docs/deploy/deployments">
<template v-slot:title="">

Deployments you can follow

</template>

<template v-slot:description="">

Build logs, live logs and health checks. If a deployment fails, the version before it keeps running.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-key-round" to="https://harblet.com/docs/deploy/environment-variables">
<template v-slot:title="">

Encrypted variables

</template>

<template v-slot:description="">

Environment variables are stored encrypted in Harblet's database and reach your builds too.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-webhook" to="https://harblet.com/docs/deploy/deploy-hooks">
<template v-slot:title="">

Deploy hooks

</template>

<template v-slot:description="">

Every image and Git service has a secret URL. A `POST` from your CI pipeline deploys it.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-users" to="https://harblet.com/docs/administration/team">
<template v-slot:title="">

Your team

</template>

<template v-slot:description="">

Invite colleagues with a link, as admins or members.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-refresh-cw" to="https://harblet.com/docs/administration/updates">
<template v-slot:title="">

Updates from the browser

</template>

<template v-slot:description="">

One click updates Harblet, and Harblet keeps k3s on your servers up to date.

</template>
</u-page-feature>
</template>
</u-page-section>

<u-page-section orientation="horizontal">
<template v-slot:title="">

Add a server with one command

</template>

<template v-slot:description="">

Harblet runs on k3s, the lightweight Kubernetes from the CNCF. It installs it, configures it and upgrades it for you. You never touch Kubernetes.

</template>

<template v-slot:features="">
<u-page-feature icon="i-lucide-plus">
<template v-slot:description="">

**Servers → Add server** shows a command with a token that expires after 24 hours. Harblet keeps no SSH keys.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-shield-check">
<template v-slot:description="">

Traffic between servers goes through WireGuard, and each project's services are isolated from other projects.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-heart-pulse">
<template v-slot:description="">

When a server fails, its image and Git services start on another one. Services keep running even while Harblet itself is down.

</template>
</u-page-feature>
</template>

<div className="w-full">

```bash [Run on the new server]
curl -fsSL https://harblet.example.com/api/join-scripts/<token> | sudo sh
```

</div>
</u-page-section>

<u-page-section orientation="horizontal" :reverse="true">
<template v-slot:title="">

Deploy from your pipeline

</template>

<template v-slot:description="">

Every image and Git service has a secret deploy URL. Call it at the end of your CI pipeline, after tests and linting pass.

</template>

<template v-slot:features="">
<u-page-feature icon="i-lucide-git-branch">
<template v-slot:description="">

A Git service builds the newest commit of its branch. An image service pulls the tag again.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-circle-x">
<template v-slot:description="">

If the deployment can't start, the hook answers with an error, so `curl --fail` fails the pipeline.

</template>
</u-page-feature>
</template>

<div className="w-full">

```yaml [.github/workflows/deploy.yml]
- name: Deploy
  run: curl --fail -X POST ${{ secrets.HARBLET_DEPLOY_HOOK }}
```

</div>
</u-page-section>

<u-page-section>
<template v-slot:title="">

Questions

</template>

<accordion>
<accordion-item icon="i-lucide-circle-help" label="Is Harblet free?">

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 or managed service. For more servers, write to [mail@harblet.com](mailto:mail@harblet.com) about a commercial license. Each version becomes available under the Apache License 2.0 four years after its release. See [License](https://harblet.com/docs/reference/license).

</accordion-item>

<accordion-item icon="i-lucide-circle-help" label="What do I need to run it?">

A fresh server with Ubuntu 24.04 or 26.04, root access, at least 2 CPUs and 4 GB of memory, and internet access. Ports 80 and 443 must be open for your services, and port 3000 for Harblet until it has its own domain. See [Installation](https://harblet.com/docs/getting-started/installation).

</accordion-item>

<accordion-item icon="i-lucide-circle-help" label="Do I need to know Kubernetes?">

No. The install script sets up k3s, and Harblet manages it from then on, upgrades included. You work in Harblet's browser interface.

</accordion-item>

<accordion-item icon="i-lucide-circle-help" label="How does HTTPS work?">

You upload a certificate for your domains under **SSL Certificates**, and Harblet serves it for every domain it covers. Wildcard certificates work. Harblet doesn't request certificates from Let's Encrypt for you at the moment.

</accordion-item>

<accordion-item icon="i-lucide-circle-help" label="What happens when a server fails?">

Its services start on another server, in tests about 80 seconds after the failure. Databases stay with the server that holds their data and come back when it does. The first server runs Harblet and receives all traffic, so keep a [backup of Harblet](https://harblet.com/docs/backups/harblet-backups) to restore it onto a new server if it fails. See [Servers](https://harblet.com/docs/administration/servers).

</accordion-item>
</accordion>
</u-page-section>

<u-page-section>
<u-page-c-t-a :links="[{"label":"Install Harblet","to":"/docs/getting-started/installation","trailingIcon":"i-lucide-arrow-right"},{"label":"Read the docs","to":"/docs/getting-started/introduction","color":"neutral","variant":"outline"}]" description="One command on a fresh Ubuntu server, then open the address it prints and create the first account." title="Deploy on your own servers today" variant="subtle">



</u-page-c-t-a>
</u-page-section>

## Resources for Agents

- [API catalog: every service document this site publishes](https://harblet.com/.well-known/api-catalog)
- [Sitemap (XML)](https://harblet.com/sitemap.xml)
- [Sitemap (Markdown): every page on the site](https://harblet.com/sitemap.md)
- [MCP server card: MCP endpoint at https://harblet.com/mcp](https://harblet.com/.well-known/mcp/server-card.json)
- [MCP endpoint (streamable HTTP)](https://harblet.com/mcp)
- [llms.txt: index of the documentation for LLMs](https://harblet.com/llms.txt)
- [llms-full.txt: the full documentation as a single file](https://harblet.com/llms-full.txt)
- [OpenAPI document: every route this site serves to agents](https://harblet.com/openapi.json)


## Sitemap

See the full [sitemap](https://harblet.com/sitemap.md) for all pages.
