Docker Image and Compose
Run Durabull with the official Docker image, then scale to a production-friendly Compose deployment.
Docker is the fastest way to get a self-hosted Durabull instance running.
1) Choose an Image Tag
Use the published image from GHCR:
ghcr.io/durabullhq/durabull:<version>
For local evaluation, latest is fine. For production, pin an explicit version tag.
2) Quick Run with docker run
This starts Redis and Durabull on a shared Docker network:
docker network create durabull
docker run -d --name durabull-redis --network durabull redis:8-alpine
docker run --rm -p 3000:3000 --network durabull \
-e DURABULL_AUTHLESS=true \
-e DURABULL_ENV_CONNECTIONS=true \
-e DURABULL_REDIS_URL_MAIN=redis://durabull-redis:6379 \
-e DURABULL_REDIS_URL_MAIN_ENVIRONMENT=development \
-e DURABULL_REDIS_URL_DEFAULT=MAIN \
-e APP_BASE_URL=http://localhost:3000 \
-e VITE_PUBLIC_APP_URL=http://localhost:3000 \
ghcr.io/durabullhq/durabull:latest
Open http://localhost:3000, then confirm:
GET /api/healthreturnsstatus: ok- the queue dashboard loads for your default connection
3) Docker Compose (Durabull + Redis)
Use Compose for repeatable team setup:
services:
durabull:
image: ghcr.io/durabullhq/durabull:latest
ports:
- "3000:3000"
environment:
DURABULL_AUTHLESS: "true"
DURABULL_ENV_CONNECTIONS: "true"
DURABULL_REDIS_URL_MAIN: redis://redis:6379
DURABULL_REDIS_URL_MAIN_ENVIRONMENT: development
DURABULL_REDIS_URL_DEFAULT: MAIN
APP_BASE_URL: http://localhost:3000
VITE_PUBLIC_APP_URL: http://localhost:3000
depends_on:
- redis
redis:
image: redis:8-alpine
ports:
- "6379:6379"
4) Persistence Notes
When DATABASE_URL is unset, PGlite data is file-backed inside the container.
- Default location:
/app/data/pglite - For persistence, mount
/app/dataor setDURABULL_PGLITE_DIRto a mounted path.
5) Production Notes
For internet-facing deployments:
- set
DURABULL_AUTHLESS=false - configure
BETTER_AUTH_SECRET - set correct
APP_BASE_URLandVITE_PUBLIC_APP_URL - review Security and Hardening
- use PostgreSQL (
DATABASE_URL) for stateful team environments
6) Build Image from Source
Source Dockerfile path:
tooling/docker/Dockerfile
It uses turbo prune and multi-stage builds for optimized production images.