Server
Do this once, on the Linux box that will run your scheduled scripts. It is the same shape as a Sitehoster server — Caddy out front for TLS, a localhost-only service behind it — but instead of serving pages it accepts your synced folder and runs a scheduler over it.
Coming soon — the bootstrap and bundle described below are still being built; the shape is settled and documented here so you can follow along.
Get a server & note its IP
Any Linux box with systemd; a small VPS is plenty. Note its public IP address — the client points at it, and Caddy issues a TLS certificate for that IP so the sync API is reachable over HTTPS without a domain.
Install Caddy & Node v20+
From your package manager: Caddy (so its systemd unit exists) and Node. The installer checks for these; it never installs them for you.
Run the bootstrap
Pipe it straight to root. It fetches a release bundle, verifies its checksum, and runs the bundle's installer.
curl -fsSL https://cronhoster.org/install.sh | sudo bash
/etc/cronhoster/token, and prints it once — copy it; the client needs it.What the installer sets up
Two long-running services, plus Caddy fronting the API for TLS:
| Service | Role |
|---|---|
cronhoster-api | The sync API, bound to localhost and fronted by Caddy for TLS-by-IP. The client uploads your folder here; it authenticates with the API token. |
cronhoster-runner | The scheduler. It watches the promoted content root, discovers entry points by filename, and runs each on its cadence — one process per job, subject to the base-name mutex. |
The content root is set to /srv/cronhoster, and jobs run as a dedicated
non-root user so a runaway script can't touch the rest of the box. See
Usage → Server for how the runner discovers and executes scripts.
The manual path
If you would rather not pipe to bash, download the release tarball and its checksum,
verify, unpack, and run the installer inside the bundle — the bootstrap does exactly this.
# download the bundle and its checksum
curl -fLO https://cronhoster.org/downloads/cronhoster.tar.gz
curl -fLO https://cronhoster.org/downloads/cronhoster.tar.gz.sha256
# verify it matches, then unpack
sha256sum -c cronhoster.tar.gz.sha256
tar -xzf cronhoster.tar.gz
# run the installer inside the bundle
sudo ./cronhoster/deploy/install.sh
/etc/cronhoster/token; read it back any time
with sudo cat /etc/cronhoster/token.Manage the services with systemctl status cronhoster-api /
systemctl restart cronhoster-runner — see the
Commands reference. Upgrade by re-running the bootstrap (it keeps your
token and content root).
Next steps
With the server up and the token in hand, install the client on your own machine and point it here.