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.

1

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.

2

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.

3

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
The installer lays out two systemd services, writes an API token to /etc/cronhoster/token, and prints it once — copy it; the client needs it.
4

What the installer sets up

Two long-running services, plus Caddy fronting the API for TLS:

ServiceRole
cronhoster-apiThe 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-runnerThe 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.

5

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
The token is written to /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.