Install Busabase on your own server
One container to try it, Compose when it goes to production. Everything below is copy-paste; nothing here needs a placeholder filled in first.
What the host needs
Measured on a cold start with an empty volume: 24s to a healthy server, 548 MiB idle, 50 MB in /data after first boot. Two ports: the app, and object storage — the browser fetches attachments straight from storage, so it has to be reachable. Postgres stays inside the container.
docker run -d --name busabase \
-p 3000:3000 \
-p 8333:8333 \
-e APP_URL=http://localhost:3000 \
-v busabase-data:/data \
--restart unless-stopped \
busabase/busabase-premium-allinone:latestgit clone https://github.com/busabase/busabase-premium.git
cd busabase-premium/compose
# Generates .env and seaweed-s3.json with matching random credentials.
# Doing this by hand is the single most common cause of "the app starts
# but every attachment upload fails".
./init.sh
BUSABASE_IMAGE=busabase/busabase-premium:latest docker compose up -dgit clone https://github.com/busabase/busabase-premium.git
helm install busabase ./busabase-premium/helm \
--namespace busabase --create-namespace \
--set image.tag=<version> \
--set appUrl=https://busabase.company.internal
# Bring your own Postgres and S3 (recommended for production):
# --set postgres.mode=external --set postgres.external.host=pg.company.internal
# --set storage.mode=external --set storage.publicHost=s3.company.internalCheck it worked
Do not guess from the container being up. Ask the server itself; it answers before anyone signs in.
curl -s http://localhost:3000/api/healthA healthy server replies with:
{"status":"ok","service":"busabase","version":"0.10.0", ...}Activate your licence
Open the server, sign in as the administrator, and go to System Admin → Licence. Paste the activation code there; it is verified on the machine itself and needs no internet access. Codes are issued from your Busabase Cloud account under Settings → Self-hosted licence.
Installing on a network with no internet access
Move the image as a file. The tarball is about 489 MB; check the hash on arrival, because a truncated transfer surfaces much later as a confusing runtime error.
# On a machine with internet access
docker pull busabase/busabase-premium-allinone:latest
docker save busabase/busabase-premium-allinone:latest -o busabase-premium-allinone.tar
sha256sum busabase-premium-allinone.tar > busabase-premium-allinone.tar.sha256
# Move both files to the target host, then
sha256sum -c busabase-premium-allinone.tar.sha256
docker load -i busabase-premium-allinone.tarIt will not start
Collect a diagnostic bundle and send it to support@busabase.com. It contains logs, health output and image metadata — no credentials: the generated secrets are written to /data/.credentials and never logged.
docker logs --tail 500 busabase > sb-logs.txt 2>&1
curl -s http://localhost:3000/api/health > sb-health.json
docker inspect busabase --format '{{.Config.Image}} {{.State.Status}}' > sb-meta.txt
tar czf busabase-support.tar.gz sb-logs.txt sb-health.json sb-meta.txt./support-bundle.shkubectl logs -l app.kubernetes.io/name=busabase-premium --tail=500 > sb-logs.txt
kubectl get pods -l app.kubernetes.io/name=busabase-premium -o wide > sb-pods.txt
tar czf busabase-support.tar.gz sb-logs.txt sb-pods.txt