Biff comes with a script (
server-setup.sh) for setting up an Ubuntu server. It's been tested on DigitalOcean. You can of course deploy Biff anywhere that can run a JVM—but if you're happy with the defaults then you can simply follow these steps (for example screenshots, see the tutorial):
config.ednto use that for XTDB's storage backend instead of the filesystem. With the default standalone topology, you'll need to handle backups yourself, and you can't use more than one server.
:biff.tasks/serverto the domain you'd like to use for your app. For now we'll assume you're using
example.com. Also update
:biff/base-url. If you use
masteras your default branch, update
example.comthat points to your Ubuntu server.
scp server-setup.sh email@example.com:.
ssh firstname.lastname@example.org, then
bash server-setup.sh. After it finishes, run
git remote add prod ssh://email@example.com/home/app/repo.git.
Now you can deploy your application any time by committing your code and then running
bb deploy. This will copy your config files (which aren't checked into Git) to the server, then it'll deploy the latest commit via git push. You can run
bb logs to make sure the deploy was successful.
If you need to make changes to the server (e.g. perhaps you need to install an additional package), be sure to update
server-setup.sh so you can always easily provision a new server from scratch.
bb logs, Papertrail is cheap, easy to set up, and useful for alerts. For example, it can send you an email whenever your application logs include the text
DigitalOcean provides uptime checks which are useful if e.g. your application fails to start.
After you've deployed the first time, you can continue developing the production system while it's running. You'll need to install fswatch. (
sudo apt install fswatch on Ubuntu,
brew install fswatch on Mac.) Then run
bb prod-dev. Whenever you save a file, it'll get copied to the server and evaluated.
If you need a dedicated worker(s), you can create a modified version of
server-setup.sh which sets the
BIFF_ENV environment variable to
worker. Then add a
:worker configuration section to
config.edn and modify your application code to run as a web server or worker depending on the runtime configuration.
Instructions and code for deploying with Docker are on the roadmap. In the mean time, a first take on a Dockerfile is available here.