Installation

Install BRAD on your own server. Configure the database, run migrations, start the app — the first-boot wizard does the rest.

3 min readinstallsetup

BRAD is self-hosted. You point it at a database, start the process, and it boots into a guided installer that walks you through license activation, your first admin account, and your company name. That's it — there is no shell-driven install.

What you need

RuntimeNode.js 20+ — or Bun 1.1+ — or pnpm on Node 20+. Pick whichever you already run.
OSAnywhere a modern Node/Bun runtime runs. Debian 12 is what we recommend and test against. Ubuntu, Fedora, Alpine, macOS, Windows Server, FreeBSD all work.
DatabasePostgreSQL 14 or newer. Local or remote — BRAD only needs the connection string.
CPU / RAM2 vCPU / 2 GB RAM is fine for small teams. Scale with your workload.
Reverse proxyRecommended for TLS. Caddy is the easiest; Nginx, Apache, Traefik, and Plesk all work.

Redis is optional and only matters at scale (rough rule of thumb: a few hundred concurrent users on the real-time features). A typical install does not need it.

Install

1. Create a database

Any PostgreSQL 14+ instance. Create an empty database and a user that owns it. Grab the connection string — it'll look like postgres://user:password@host:5432/dbname.

2. Unpack the release

Sign in to your account, open the Downloads tab, and grab the latest release zip. Unzip it wherever the app will live.

unzip brad-cms-x.y.z.zip -d /opt/brad
cd /opt/brad

3. Configure the database

Open .env (the app creates one with safe defaults on first start if it's missing) and set DATABASE_URL:

DATABASE_URL=postgres://user:password@host:5432/dbname

That's the only value you have to set. APP_KEY, PORT, HOST, and the rest get production-safe defaults the first time BRAD boots.

Need a different port or a public URL? Set PORT= and APP_URL= in the same file. Everything else can wait.

4. Run migrations

npx prisma migrate deploy

This applies the core schema. Module migrations apply automatically every time the app boots — don't run them by hand.

5. Start the app

Whichever you prefer:

bun start              # bun
npm start              # node
pnpm start             # pnpm

The server binds to :3333 by default. Put it behind your reverse proxy. A Caddyfile is two lines:

your-domain.example {
  reverse_proxy localhost:3333
}

Caddy provisions TLS automatically. Nginx, Apache, and Plesk all forward to localhost:3333 the usual way.

6. Finish in the browser

Open https://your-domain.example. Because no users exist yet, BRAD redirects to its built-in installer:

  1. License — paste the key from your account dashboard. BRAD verifies it.
  2. Admin — set the email and password for the first administrator.
  3. Company — name your organization.

When the wizard finishes you're signed in as the superadmin and the public site is live.

Keeping it running

Use whatever process supervisor you already have — systemd, pm2, docker, supervisord. BRAD ships with a pm2 ecosystem file (bun run cluster:start) but doesn't require it.

Updating

Download a new release zip from your account dashboard, stop the service, replace the files in place (keep your .env and storage/ directory), run npx prisma migrate deploy, and start the service back up.

There is no automatic in-place update on purpose. Self-hosted software that silently rewrites itself has too many ways to corrupt a customer's install. Updates are a deliberate, manual step you control.