Skip to content

Deploying

Today, self-hosting runs the database and storage in Docker, and runs the app from source against them.

1. Get the code and configure

Clone the repository, then copy the example environment file and fill it in:

bash
cp .env.example .env

The defaults are set up for self-hosting. See Configuration for what each value does. At minimum, set a strong BETTER_AUTH_SECRET.

2. Start the database and storage

Bring up Postgres and MinIO with Compose:

bash
docker compose -f docker/docker-compose.yml up -d

This starts Postgres on port 5432 and MinIO on ports 9000 and 9001, with their data kept in named volumes.

3. Install, migrate, and run

Install dependencies, apply the database schema, then build and start the app:

bash
pnpm install
pnpm db:migrate
pnpm build
pnpm start

The app is served on port 3000, with the editor at /editor.

Prebuilt container image

A prebuilt web container, so you can run everything with Compose alone, is on the Roadmap. Until then, run the app from source as above.

4. Behind a domain

Put the app behind a reverse proxy with HTTPS, and set APP_URL and BETTER_AUTH_URL to your public URL. A proxy such as Caddy, Nginx, or a platform like Coolify works well.