Bullet is a fast and flexible application deployment tool built by Furqan Software. It automates the full lifecycle of deploying containerized applications to remote servers over SSH, without the overhead of a full orchestration platform.
- Server setup: Installs Docker and prepares remote servers for deployments.
- Tarball-based deploys: Packages application code into tarballs, uploads them over SCP, and builds Docker images on the server.
- Program management: Define multiple programs (e.g. web, worker) per application, each running in its own container.
- Scaling: Scale programs up or down with expression-based rules that can factor in host tags and hardware.
- Cron jobs: Manage scheduled tasks backed by systemd timers, with optional healthcheck pings.
- Zero-downtime reloads: Reload containers via signal, command, or restart, with support for pre-reload hooks.
- Environment management: Push environment files to servers.
- Log tailing: Tail container logs directly from the CLI.
- Port forwarding: Forward remote ports to your local machine over SSH.
- Host access: Open an interactive shell, view disk usage, or run
topon remote servers. - Multi-node support: Target multiple hosts per deployment with interactive node selection.
- Release pruning: Clean up old releases to free disk space.
From source:
go install github.com/FurqanSoftware/bullet@latestOr download a prebuilt binary from the Releases page.
Create a Bulletspec file in your project root. This defines your application and its programs:
application:
name: Hello World
identifier: hello
programs:
web:
name: Hello World Web Server
command: node index.js
container:
image: node:8.1-alpine
ports:
- 80:5000Pass hosts directly via flags:
bullet -H 192.168.0.3 <command>Or create a Bulletcfg.<name> file:
hosts: 192.168.0.3,192.168.0.4
port: 22Then use it with:
bullet -c <name> <command>You can also set hosts via environment variables:
export BULLET_HOSTS=192.168.0.3bullet -H 192.168.0.3 setupThis installs Docker and prepares the server for deployments.
Package your application as a tarball and deploy:
tar czf app.tar.gz <your files>
bullet -H 192.168.0.3 deploy app.tar.gzbullet -H 192.168.0.3 scale web=2bullet deploy [tarball] # Deploy a release (--setup, --environ, --scale)
bullet setup # Prepare servers for deployment
bullet status # Show container status across nodes
bullet restart # Restart all application containers
bullet run [program] # Run a one-off program container
bullet scale [program=count ...] # Scale program instances
bullet log [program[:instance]] # Tail container logs
bullet cron:enable [job ...] # Enable cron jobs
bullet cron:disable [job ...] # Disable cron jobs
bullet cron:status # Show cron job status
bullet environ:push [file] # Push an environment file to servers
bullet forward [local:]remote # Forward a remote port locally
bullet prune # Remove old releases
bullet host:shell # Open an interactive shell on a server
bullet host:df # Show disk usage on a server
bullet host:top # Show running processes on a serverSee the docs/ directory for detailed documentation.
Bullet supports autocompletion for bash, zsh, fish, and powershell. It completes command names, flag values (e.g. -c from Bulletcfg.* files), and arguments (e.g. program keys and cron job keys from Bulletspec).
To enable it, add the following to your shell configuration:
Bash (~/.bashrc):
eval "$(bullet completion bash)"Zsh (~/.zshrc):
eval "$(bullet completion zsh)"Fish (~/.config/fish/config.fish):
bullet completion fish | sourcePowerShell:
bullet completion powershell | Out-String | Invoke-Expression- Nikita Golubev - For the bullet icon
