Skip to main content

cairn

Frappe + ERPNext + your custom apps, on one VPS, running the commit you last pushed.

cairn builds a Docker image from your app repositories, publishes it to a container registry, and lets your server notice the new image and switch to it on its own.

There is no CI service to configure, no webhook to receive, and no build minutes to pay for. Two small systemd timers do the polling, one on the machine that builds and one on the machine that serves. Both dial outward: your VPS never opens a port, never holds a webhook listener, and never hands a deploy key to GitHub.

A cairn is a trail marker of stacked stones. Every deploy leaves one behind: the git ref, the commits it resolved to, the image tag, the digest. You can always walk back.

How it works

You push a commit. The builder's timer resolves your app refs to commits, notices the combination is new, builds an image, pushes it, and moves the environment's tag. The target's timer notices the tag moved, pulls the image, restarts the stack, runs bench migrate, and checks that the site came back. Neither machine accepts a connection to do any of it.

Every image records the commits it was built from, the build arguments used, and the version of the build recipe that produced it. The tag is derived from those resolved inputs rather than typed by hand, so the same inputs produce the same tag and different inputs cannot collide. Rolling back is moving the tag to an earlier image and letting the server converge.

cairn's build recipe and compose configuration were bootstrapped from frappe/frappe_docker and stay close to it. frappe_docker gives you the parts to build a custom image; cairn adds the lifecycle around them. If cairn went away, you would be left holding a normal compose deployment and a registry full of normal images.

What it does not touch

cairn moves code, not data. The only database write it ever makes is the bench migrate that follows a deploy. It does not create sites, it is not a backup tool, and it is not multi-server orchestration. One VPS, one site.

Three roles, one package

Command Does
Builder cairn-build Builds the image, pushes it, moves the environment tag
Target cairn-adopt Polls for the tag, pulls, converges the running stack
Registry cairn-registry Hosts images, if you self-host. Optional: bring your own registry instead
pipx install datahenge-cairn

installs all three. Each machine uses whichever role applies to it.

Documentation

datahenge.github.io/cairn

Start with Why cairn to decide whether you want it, then Get Started to install.

Metadata

Release files for datahenge-cairn 0.4.14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for datahenge-cairn 0.4.14
File Size Uploaded
datahenge_cairn-0.4.14.tar.gz 705.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for datahenge-cairn 0.4.14
File Interpreter ABI Platform
datahenge_cairn-0.4.14-py3-none-any.whl Python 3 none any Details

Total release size: 883.7 kB

Release files / datahenge_cairn-0.4.14.tar.gz

Download URL datahenge_cairn-0.4.14.tar.gz
Size 705.9 kB
Tags Source
SHA-256 checksum
How to use checksums
15231760e1363eb199c56979b5d2ec30bda2c535d7a43955b1be1b346411e8d2
BLAKE2b-256 checksum
How to use checksums
63fbeff44976d832c6bff04cb74a7f6c62a37eb60fe3087120b15ef250e6f536
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / datahenge_cairn-0.4.14-py3-none-any.whl

Download URL datahenge_cairn-0.4.14-py3-none-any.whl
Size 177.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
61d8b0350cf4f3e69cf8185674f59f0271265447aa875582f8e3c2fc020f53c0
BLAKE2b-256 checksum
How to use checksums
059efa9b3acdffc0fbd25e0591f5561508de17baf8ddfca10683c830be4f60f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

0.4.15

2 release files

This release

0.4.14 This release

2 release files

0.4.13

2 release files

0.4.12

2 release files

0.4.11

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.1

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page