Bosun is a .deb-packaged CLI for deploying Rails apps on argus-tty-managed Ubuntu hosts — tiered developer/deployer/admin Linux accounts, a git deploy key shared across the team instead of everyone's personal key, and app secrets locked to a single unprivileged service account, not a shared group.
The problem bosun actually solves isn't "how do I deploy Rails" — every tool answers
that. It's "how do five developers deploy the same box without all sharing root, a personal SSH
key, or read access to DATABASE_URL." Bosun provisions each app with its own
ACL-locked shared/.env (root + a single service account only, not the group every
developer is in), a shared per-app git deploy key instead of N personal keys, and
require_role() checks on every subcommand that reuse argus-tty's existing sudoers
whitelist — no new sudo privileges are ever granted to deploy an app.
sudo add-apt-repository ppa:yadavramlaxman/argus-tty && sudo add-apt-repository ppa:yadavramlaxman/bosun
sudo apt update && sudo apt install argus-tty bosun # or the .deb package — see Installing below
sudo bosun bootstrap # one time per host: RVM multi-user
Full install guide, including the .deb-package alternative and verifying the
install: Installing.
No argus-tty? Skip the first line — bosun falls back to a single-operator standalone mode automatically: no tiers, no separate service account, one account does everything. A deliberately reduced security posture for one person on their own box, not a lighter-weight substitute for argus-tty on a shared one.
sudo bosun add myapp # provision /var/www/myapp (admin, one time)
bosun install myapp # ruby/gemset + OS build deps (developer/admin)
bosun setup myapp # releases/shared/config tree (developer/admin)
bosun deploy myapp main # clone, build, symlink, restart, rollback-on-fail (deployer/admin)
require_role(): a plain
developer can't deploy; a plain deployer can't open a Rails console or read secrets.shared/.env is
root:root 600 with a single named-user ACL grant for webapp-svc, not
the shared webapps group — a compromised developer/deployer account has no standing
read access to DATABASE_URL/SECRET_KEY_BASE at all.bundle install →
assets:precompile (elevated to webapp-svc just for that one step, so
the deploying account never needs standing secret access) → symlink swap → restart → health
check → automatic rollback to the previous release on failure → old-release cleanup.do-release.sample, edit it: real
bash, not a hook/plugin DSL, for a different worker (a
sneakers consumer instead of Sidekiq, Docker
instead of systemd, extra build steps) — every other app on the box keeps the default untouched.
See adding a
custom service.Capistrano, Mina, and Kamal all answer "clone, build, symlink, restart" well — that's not where bosun differs. None of the three has a concept of tiered Linux accounts or ACL-locked secrets at all: they assume one deploy identity (a shared SSH key, a CI token) with full access to everything the deploy needs, because they're solving the deploy choreography, not who-on-the-team-can-touch-what on a box several people share.
| Capability | Bosun | Capistrano | Mina | Kamal |
|---|---|---|---|---|
| Tiered developer/deployer/admin accounts | ✓ | — | — | — |
| Secrets ACL-locked to one service account | ✓ | DIY | DIY | DIY |
| Shared per-app deploy key (not personal) | ✓ | DIY | DIY | DIY |
| No new sudo privileges to deploy | ✓ | n/a | n/a | n/a |
| Works without Docker | ✓ | ✓ | ✓ | Docker-only |
| Full bash script override per app | ✓ | Rake tasks/hooks | Rake tasks | config DSL |
| Automatic rollback on failed health check | ✓ | plugin | manual | ✓ |
"DIY"/"n/a" means the tool itself has no opinion here, not that it's impossible to bolt on yourself. Capability cells describe design intent as of this writing, not an independent re-test of every release — re-check before quoting externally.
.deb package, install order, and verifying the install.bosun add
creates on disk, and why.bosun run (console/rake/migrations) and bosun logs.do-release with a full script instead of a hook DSL.bosun add generates for
Puma/Sidekiq, and optional socket activation./etc/cron.d/<app>
format bosun generates.dotenv-rails was deliberately left out.do-release.sample is plain bash you
copy and edit, not a plugin system to learn.