> ## Documentation Index
> Fetch the complete documentation index at: https://manifest.build/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy Manifest on Koyeb

> Deploy Manifest on Koyeb from the public Docker image with a Koyeb web service and PostgreSQL connection string.

<Card title="Open Koyeb deploy" icon="external-link" href="https://app.koyeb.com/deploy?type=docker&image=docker.io%2Fmanifestdotbuild%2Fmanifest%3A6&name=manifest&service_type=web&ports=2099%3Bhttp%3B%2F&env%5BPORT%5D=2099&env%5BDATABASE_URL%5D=postgresql%3A%2F%2FUSER%3APASSWORD%40HOST%2FDB%3Fsslmode%3Drequire&env%5BBETTER_AUTH_SECRET%5D=replace-with-openssl-rand-hex-32&env%5BMANIFEST_ENCRYPTION_KEY%5D=replace-with-different-openssl-rand-hex-32&env%5BBETTER_AUTH_URL%5D=https%3A%2F%2F%7B%7B+KOYEB_PUBLIC_DOMAIN+%7D%7D&env%5BMANIFEST_MODE%5D=selfhosted&env%5BBIND_ADDRESS%5D=0.0.0.0&env%5BDB_POOL_MAX%5D=8&env%5BAUTH_DB_POOL_MAX%5D=4">
  Deploy-button guide for Koyeb using the public Docker image, manual Postgres
  URL, and runtime secrets.
</Card>

## Overview

Koyeb can deploy Manifest from the public Docker image with a Deploy to Koyeb button. The button pre-fills the image, HTTP port, and runtime settings, but you must create PostgreSQL separately and replace the placeholder secrets before deploying.

## Prerequisites

* A Koyeb account.
* A Koyeb PostgreSQL Database Service.
* Two random 32+ character secrets for Manifest.

This deployment creates paid resources if your selected Koyeb service or database plan is not free.

## Create PostgreSQL

In Koyeb, create a PostgreSQL Database Service in the same region you plan to use for Manifest. After it is ready, open the database connection details and copy the connection string.

Manifest uses TLS to connect to Koyeb Postgres, so include `sslmode=require` in the connection string. If the copied URL has no query string, append `?sslmode=require`. If it already has query parameters, append `&sslmode=require`.

## Generate secrets

Generate separate values for session signing and at-rest provider credential encryption:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
openssl rand -hex 32
openssl rand -hex 32
```

## Deploy Manifest

1. Open the [Koyeb deploy link](https://app.koyeb.com/deploy?type=docker\&image=docker.io%2Fmanifestdotbuild%2Fmanifest%3A6\&name=manifest\&service_type=web\&ports=2099%3Bhttp%3B%2F\&env%5BPORT%5D=2099\&env%5BDATABASE_URL%5D=postgresql%3A%2F%2FUSER%3APASSWORD%40HOST%2FDB%3Fsslmode%3Drequire\&env%5BBETTER_AUTH_SECRET%5D=replace-with-openssl-rand-hex-32\&env%5BMANIFEST_ENCRYPTION_KEY%5D=replace-with-different-openssl-rand-hex-32\&env%5BBETTER_AUTH_URL%5D=https%3A%2F%2F%7B%7B+KOYEB_PUBLIC_DOMAIN+%7D%7D\&env%5BMANIFEST_MODE%5D=selfhosted\&env%5BBIND_ADDRESS%5D=0.0.0.0\&env%5BDB_POOL_MAX%5D=8\&env%5BAUTH_DB_POOL_MAX%5D=4).
2. Replace `DATABASE_URL` with your Koyeb Postgres connection string.
3. Replace `BETTER_AUTH_SECRET` with the first generated secret.
4. Replace `MANIFEST_ENCRYPTION_KEY` with the second generated secret.
5. Leave `BETTER_AUTH_URL` as `https://{{ KOYEB_PUBLIC_DOMAIN }}`.
6. Leave `PORT`, `MANIFEST_MODE`, `BIND_ADDRESS`, `DB_POOL_MAX`, and `AUTH_DB_POOL_MAX` unchanged for a single-instance deploy.
7. Deploy the service.

The button deploys `docker.io/manifestdotbuild/manifest:6` and exposes port `2099` over HTTP.

## Open Manifest

After the deployment is live, open the public Koyeb domain and create the first account. The first account becomes the admin.

Verify the deployment:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -fsS https://<your-koyeb-domain>/api/v1/health
```

## Tearing it down

Delete both resources when you are done:

* The Manifest Koyeb Web Service.
* The Koyeb PostgreSQL Database Service.

Deleting only the web service leaves the database running.

Relevant Koyeb docs:

* [Deploy to Koyeb button](https://www.koyeb.com/docs/build-and-deploy/deploy-to-koyeb-button)
* [Koyeb environment variables](https://www.koyeb.com/docs/build-and-deploy/environment-variables)
