Packaged installs

Lazysite ships as Debian packages built from one source: a common engine package plus environment glue packages, replacing per-site sudo tarball installs. The same code also runs straight from a checkout or tarball - the CLI finds its payload relative to itself, so both worlds get the same front door.

The packages

  • lazysite-common - the engine payload at /usr/share/lazysite, the lazysite CLI at /usr/bin/lazysite, man pages, the lazysite@ FastCGI pool unit with /etc/lazysite/pools/, and the site registry (/etc/lazysite/sites.d/, one file per site). Installing or upgrading the deb refreshes the host payload only - it never touches a site tree.
  • lazysite-hestia - HestiaCP integration: Apache web templates for both runtime patterns (lazysite-cgi and lazysite-fcgi) plus the lazysite-hestia-domain onboarding command.
  • lazysite-apache / lazysite-nginx - plain-host webserver glue: commented vhost examples for both runtime patterns, plus lazysite-apache-vhost / lazysite-nginx-vhost (add/remove), root-run commands that render a domain's vhost into sites-available/ and print - never run - the enable/reload steps. Both ship the multi-server wiring reference covering Apache, nginx, Caddy, lighttpd and the generic front-end contract.

The glue packages depend on the exact same version of lazysite-common, so a host upgrades them as a pair.

The lazysite CLI

Verbs: provision, upgrade [--all], sites, check, users, dev, demo, version. The load-bearing principle: no root writes into site trees. provision and single-site upgrade refuse to run as root; only upgrade --all may, because it drops to each site's owner (sudo -u) per site - ownership is correct by construction, with no chown-after repair pass.

Provisioning a site

sudo -u siteuser lazysite provision \
    --docroot /home/siteuser/web/example.com/public_html \
    --cgibin  /home/siteuser/web/example.com/cgi-bin \
    --domain  example.com

provision fresh-installs the site from the host payload as the site user and records it in the registry (docroot, cgibin, owner, channel), so upgrade --all and fleet tooling can enumerate sites without guessing paths. lazysite sites lists the registry with each site's owner, channel, policy and installed version. Per-site update_channel and update_policy decide which releases a fleet upgrade may apply.

lazysite demo

The zero-argument try-it path:

lazysite demo

fresh-installs a scratch site (default ~/lazysite-demo) as the current user and serves it on the built-in dev server (default port 8080) - no web server, no configuration. Re-running reuses the site; remove it with one rm -rf. --port N and --dir PATH override the defaults.

Hestia onboarding

With lazysite-hestia installed, one root-run command onboards a panel domain:

lazysite-hestia-domain add USER DOMAIN [--channel edge|beta|stable] [--fcgi]

It prepares the panel-owned domain layout as root, then drops to the panel user for lazysite provision, registers the site, and with --fcgi writes the pool config and enables lazysite@DOMAIN. remove stops the pool and deletes the registry entry while leaving the docroot in place; list shows what is onboarded. The command prints the matching web template (lazysite-cgi or lazysite-fcgi) to select for the domain.