Skip to content

cairn

A thin, opinionated wrapper around frappe/frappe_docker that makes running a custom ERPNext deployment (Frappe + ERPNext + custom apps) on a single VPS reproducible, immutable, and low-thought — without ever modifying upstream.

Two pillars: reproducible custom image builds and a pull-based deploy lifecycle (git ref → image tag → running stack, with image-only rollback). A strict data-plane boundary keeps cairn out of your databases and volumes entirely — it ships code, not data.

This site is a work in progress

Get Started is verified against a real deployment as it's written, as is Builder. Self-Hosted Registry and Target are written ahead of a live run against real infrastructure — decide the registry question first anyway (see Get Started), since Builder's push/automation and the target role both assume the registry decision is already made. Reference now covers the manifest, build config, and target descriptor in full. Guides is still a placeholder.

Where to go next

  • Get Started — installing cairn, for any role.
  • Registry — decide and, if self-hosting, provision a registry. Do this before Builder — see why below.
  • Builder — building and pushing images.
  • Target — adopting and converging an existing deployment.
  • Guides — configuration and day-to-day operation.
  • Reference — command surface and file formats.