self-host briven on coolify
drop-in template for coolify 4.x. same compose as infra/dokploy/compose.yml, minus the traefik labels — coolify owns routing through its own UI.
briven publishes prebuilt multi-arch images on every tagged release at ghcr.io/flndrn/briven-{api,runtime,realtime,web,docs} (amd64 + arm64, free anonymous pull). swap the build: blocks in compose.yml for image: ghcr.io/flndrn/briven-<svc>:latest for ~30s deploys, or pin to a specific version tag (e.g. :0.3.1) for reproducibility. building from source is also supported — useful when you've forked.
install
-
create a new resource in your coolify project: Docker Compose, point its git source at
https://code.konnos.org/flndrn/briven.git(branchmain), compose pathinfra/coolify/compose.yml. coolify clones the repo and runsdocker compose build+up -d. -
set environment variables under the resource's Environment Variables tab. The minimum:
name value BRIVEN_DOMAINthe domain you control (e.g. briven.example.com)BRIVEN_POSTGRES_PASSWORDstrong random — used by every service BRIVEN_BETTER_AUTH_SECRETopenssl rand -hex 32BRIVEN_AUDIT_IP_PEPPERopenssl rand -hex 32BRIVEN_ENCRYPTION_KEYopenssl rand -hex 32BRIVEN_RUNTIME_SHARED_SECRETopenssl rand -hex 32BRIVEN_OPEN_SIGNUPSfalse(invite-only) ortrue(public)optional:
name what it enables BRIVEN_MITTERA_API_URLhttps://api.mittera.eu(or your install)BRIVEN_MITTERA_API_KEYbearer token for outbound /api/v1/emails BRIVEN_MITTERA_WEBHOOK_SECRETHMAC secret for inbound webhook verify BRIVEN_GITHUB_CLIENT_IDgithub oauth signin BRIVEN_GITHUB_CLIENT_SECRETgithub oauth signin -
assign domains in the coolify Domains tab, one per public-facing service:
web→${BRIVEN_DOMAIN}api→api.${BRIVEN_DOMAIN}realtime→realtime.${BRIVEN_DOMAIN}docs→docs.${BRIVEN_DOMAIN}
postgres,redis,runtimestay internal — leave their domains blank. -
deploy. coolify wires letsencrypt + a per-service reverse proxy automatically.
post-boot
same as the dokploy template — sign in via magic link, promote yourself to platform-admin via psql, then create your first project from the dashboard. see ../dokploy/README.md for the full walkthrough.
differences vs. dokploy
- routing: coolify's per-service Domains UI replaces the
traefik.*labels. - persistent volumes: coolify auto-manages volume names with project-scoped prefixes; the names declared here (
postgres_data, etc.) becomebriven_postgres_dataor similar in coolify's storage tab. - upgrades: click Redeploy — coolify re-clones
mainand rebuilds the images from source. there's nodocker compose pullstep because nothing is hosted in a registry.
upgrade path
dokploy → coolify migrations work as long as the postgres + minio + runtime_bundles volumes are preserved. shut down the dokploy stack, snapshot the volumes, point coolify at the same data directories. control plane comes back stateful.