binboat

Install and set up

Before you start

Permission Used for
Zone → Zone → Read finding the zone of each domain
Zone → DNS → Edit proxied DNS records
Zone → SSL and Certificates → Edit Origin CA certificates, the origin pull certificate
Zone → Zone Settings → Edit turning on Authenticated Origin Pulls, reading and setting the SSL/TLS mode

Install

curl -fsSL https://github.com/sumitwaani2/binboat/releases/latest/download/install.sh | sudo bash

It asks nothing, takes a few seconds and ends with the address to open (https://<server IP>) and a one-time password. You can close SSH now.

First steps in the browser

  1. Open the address, accept the certificate warning (expected on this first visit), and sign in with the one-time password, leaving the email empty.
  2. Set up your account: your email and a password (at least 12 characters).
  3. Settings → Cloudflare: paste the API token. binboat checks it and lists the zones it can use and any missing permission.
  4. Settings → Dashboard domain: e.g. binboat.example.com. binboat creates the DNS record, the certificate and the origin pull setup and shows the progress; the first time for a zone this takes about 10 minutes. If the zone's SSL/TLS mode isn't Full (strict), press Set Full (strict) under Zones. Then open https://binboat.example.com and sign in; from then on the IP address no longer answers.
  5. Settings → GitHub and Settings → Backups (endpoint https://<account id>.r2.cloudflarestorage.com, region auto, bucket, keys).
  6. Your app repo follows Hosting an app: a binboat.toml and the release workflow. Push a tag (git tag v1.0.0 && git push origin v1.0.0) and GitHub publishes a release a few minutes later.
  7. Apps → Add app: pick the repo and a domain (e.g. blog.example.com). The app is named after the repo. Add env vars if needed, choose a release under Deploy and watch the deploy log.

The home page always lists what is still missing.

Updating, and when you are locked out

Run the install command again. It installs the latest binboat, keeps all apps and settings, restarts them (a few seconds of downtime) and prints a new one-time password. Use that password only if you need it, e.g. after forgetting your password or when the dashboard domain stops working: for 24 hours the server's IP address accepts it.

Moving to a new server

  1. Shut the old server down (both would otherwise write to the same backup folders).
  2. Install on the new server and repeat steps 1–5 with the same tokens and bucket.
  3. Add app for each app. The form lists the bucket's folders and preselects the one with the app's name: binboat restores its newest backup before the first deploy. DNS records follow automatically.

Troubleshooting

Symptom Likely cause
no Cloudflare zone found for … when saving a domain The domain isn't on this Cloudflare account, is misspelled, or the token doesn't cover that zone
… lacks the … permission Add the missing permission to the token, then Sync now in Settings
Dashboard domain stays "being set up" The page says what it waits for: Cloudflare rolling out the origin pull certificate (about 10 minutes the first time), a zone in Flexible mode (Set Full (strict)), or a token without Zone Settings permission
Cloudflare error 521 The SSL/TLS mode is Flexible or Off, so Cloudflare connects to port 80: Settings → Zones → Set Full (strict). A Page Rule or Configuration Rule can also set Flexible for one hostname; remove it
Cloudflare error 526 Full (strict) but the certificate isn't installed yet: Sync now in Settings
Cloudflare error 525 / 520 Origin pulls were changed in Cloudflare; binboat repairs them on the next sync (Sync now) and waits a few minutes before requiring them again
has a CNAME record Delete the CNAME in Cloudflare; binboat creates the A record
Nothing answers at all Re-run the install command and use the address and one-time password it prints