Skip to content

Install Spine

Spine runs on any Linux or macOS machine, or Windows with WSL2, that has Docker 24 or newer with Compose 2.20 or newer. Everything else — the database, the web app, the API and HTTPS — runs in containers. You don’t need Node or a database installed.

Download the latest release’s files into a folder, for example /opt/spine:

Terminal window
mkdir -p /opt/spine && cd /opt/spine
gh release download --repo haribrothers/spine # or download them from the releases page
chmod +x *.sh

The release has install.sh, backup.sh, restore.sh, upgrade.sh, docker-compose.yml, Caddyfile, env.example and SHA256SUMS.

Terminal window
./install.sh --app-url https://spine.example.com

Use the address people will open Spine at. Without --app-url it asks for it; --non-interactive uses APP_URL from the environment, or http://localhost.

The installer:

  1. checks Docker and Compose;
  2. writes .env with a random AUTH_SECRET and database password (an existing .env is never changed);
  3. downloads Spine’s images and starts it, waiting until it’s healthy;
  4. prints the address and the commands for logs, backups, upgrades and stopping.

The first start takes a minute or two while the images download and the database is set up.

Open the address. With no accounts yet, Spine shows a welcome page: create your account. The first person to sign up owns the business (the Primary Owner). After that, sign-up closes: everyone else joins by an invitation from an Owner.

Onboarding then asks for your business details, country and tax, currency, financial year and document numbering. You can skip any step and come back to it in Settings.

  1. Contacts › Add contact: add a customer.
  2. Invoices › New invoice: pick the customer, add a line, and Save draft.
  3. Issue invoice: it gets its permanent number and posts to your books.
Service What it does
db PostgreSQL 16, on the spine_db volume
api The API, with your files on the spine_files volume
web The web app
caddy Serves both on your address and gets the HTTPS certificate

Stop Spine with docker compose --profile minimal down and start it again with ./install.sh (it keeps your .env).