This repository deploys Buzz Relay as a Git-backed Docker Compose application on Coolify. It deliberately does not fork Buzz:
- Buzz runs from Block's published
ghcr.io/block/buzzimage. - The image tracks Block's official
maintag by default. - This repository owns only deployment policy and the temporary Coolify fixes.
- No GitHub Actions or local Buzz build is required.
The stack includes fixes that are not yet available in stable Coolify:
BUZZ_CORS_ORIGINSincludestauri://localhostandhttp://tauri.localhost, allowing Buzz Desktop to connect.buzz-git-initmakes the persistent Git volume writable by Buzz's UID 1000.- The Buzz healthcheck uses Bash
/dev/tcp; the runtime image has nocurlorwget. - No custom Docker network is defined, so Coolify's proxy always uses the correct managed network.
-
Push this directory to a GitHub repository.
-
In Coolify, create a Private Repository (with GitHub App) resource.
-
Select this repository and choose the Docker Compose build pack.
-
Use branch
main, base directory/, and Compose file/docker-compose.yaml(Coolify's default). -
Add the variables from
.env.examplein Coolify. Generate new values for everyCHANGE_MEentry and store them only in Coolify. Create the private S3-compatible bucket before deploying. Do not add aBUZZ_IMAGE_TAGoverride during normal operation; the reviewed value indocker-compose.yamlcontrols updates. -
Assign
https://YOUR_DOMAIN:3000to thebuzzservice. The:3000tells Coolify which internal container port to proxy; the public URL still uses normal HTTPS on port 443. -
Deploy, then verify:
curl -fsS https://YOUR_DOMAIN/_liveness curl -fsS https://YOUR_DOMAIN/_readiness
Do not expose Postgres, Redis, port 8080, or port 9102 publicly.
Production media and object data is stored in a private Cloudflare R2 bucket. Create a bucket-scoped Object Read & Write token and configure:
BUZZ_S3_ENDPOINT=https://YOUR_CLOUDFLARE_ACCOUNT_ID.r2.cloudflarestorage.com
BUZZ_S3_REGION=auto
BUZZ_S3_ADDRESSING_STYLE=path
BUZZ_S3_BUCKET=buzz-nutrified-media
BUZZ_S3_ACCESS_KEY=YOUR_R2_ACCESS_KEY_ID
BUZZ_S3_SECRET_KEY=YOUR_R2_SECRET_ACCESS_KEYDo not enable the public r2.dev URL or attach a public bucket domain. Buzz
keeps the bucket private and serves authorized media through
https://buzz.nutrified.pl/media.
Generate the values once. Never rotate them during a normal image update:
openssl rand -hex 32 # BUZZ_RELAY_PRIVATE_KEY
openssl rand -hex 32 # BUZZ_GIT_HOOK_HMAC_SECRET
openssl rand -base64 36 | tr -d '\n' # POSTGRES_PASSWORD
openssl rand -base64 36 | tr -d '\n' # REDIS_PASSWORDRELAY_OWNER_PUBKEY is the owner's 64-character hexadecimal Nostr public key,
not an npub1... value and not a private key.
The S3 access and secret keys are issued by the object-storage provider; do not generate arbitrary values for an external R2 bucket.
No GitHub Actions are used. The Compose file tracks
ghcr.io/block/buzz:main and sets pull_policy: always.
To update:
- Open the Buzz application in Coolify.
- Click Redeploy.
- Coolify pulls the current official
mainimage and recreates the Buzz container. The persistent volumes and stable secrets remain unchanged. - Re-run the liveness/readiness checks and connect once from Buzz Desktop.
For a controlled freeze or rollback, set BUZZ_IMAGE_TAG in Coolify to a known
immutable upstream tag such as sha-63496cc, then redeploy. Remove that
override to resume tracking main.
Keep this Git-backed deployment until the official Buzz service reaches stable Coolify and includes all three fixes above. There is no operational need to migrate; the wrapper remains small and Buzz itself still comes directly from Block's image.
If you do migrate, back up all three named volumes and the R2 bucket first. Preserve the relay private key, owner public key, HMAC secret, database credentials, Redis credentials, and S3 credentials.