ZenHost documentation.
The website is the canonical operator guide for installing ZenHost. The installer command below matches the published website installer and passes arguments through to the current auto-installer.
curl -fsSL https://get.zenhost.app/install.sh | sudo bash Requirements
Install on a fresh server. The current installer validates the operating system, RAM, disk, architecture, DNS, and outbound network access before it mutates the host.
Install
Run the website installer as root. It installs git and curl if needed, downloads the current ZenHost repository, and executes scripts/auto-install.sh.
curl -fsSL https://get.zenhost.app/install.sh | sudo bash
For non-interactive runs, pass installer arguments after bash -s --.
curl -fsSL https://get.zenhost.app/install.sh | sudo bash -s -- --non-interactive
curl -fsSL https://get.zenhost.app/install.sh | sudo bash -s -- --version v1.2.0 Installer options
--version VERSIONInstall a specific tag or branch. Defaults to latest.
--upgradeUpgrade an existing installation.
--non-interactiveRun without prompts using defaults where possible.
--skip-phase PHASESkip a named phase when you are intentionally managing that step yourself.
--resumeContinue after a failed or interrupted run.
--verbosePrint detailed logs while the installer runs.
What gets installed
The auto-installer runs these phases in order: preflight, network, preparation, dependencies, security, deployment, services, admin, verification, and completion.
- Caddy reverse proxy with HTTPS routing for the control panel and tenant hostnames.
- Go 1.24 tooling, Node.js 24 build tooling, and the pinned frontend package manager.
- PostgreSQL 15 for ZenHost state, plus MySQL/MariaDB and MongoDB support for tenant databases.
- Redis, PHP-FPM versions 7.4 and 8.1 through 8.4, and prerequisites for nvm, pyenv, and phpenv.
- Postfix, Dovecot, Rspamd, and Roundcube for self-hosted mail and webmail.
- UFW, fail2ban, generated secrets, sudo wrapper rules, and systemd services.
Operations
Service management
sudo systemctl status zenhost-api
sudo systemctl status zenhost-frontend
sudo journalctl -u zenhost-api -f
sudo journalctl -u zenhost-frontend -f Important paths
/opt/zenhost- installed application files/opt/zenhost/backend/.env- backend configuration/opt/zenhost/frontend/.env.production- frontend runtime configuration/var/lib/zenhost/install-state.json- installer state/var/log/zenhost-install.logand/var/log/zenhost/- installer and service logs
Architecture boundaries
ZenHost is a single-host control plane. Tenant isolation is based on one Linux user per hosting account, per-user runtime overlays, audited sudo wrappers, and systemd-managed processes. It does not use Docker for tenant isolation, and the web proxy is Caddy rather than Nginx.