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.

Operating system
Ubuntu 20.04, 22.04, 24.04 or Debian 11, 12
Architecture
x86_64 or aarch64
Minimum size
2 GB RAM and 20 GB free disk
Access
Root or sudo access, public IP, and DNS for the panel domain

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 VERSION

Install a specific tag or branch. Defaults to latest.

--upgrade

Upgrade an existing installation.

--non-interactive

Run without prompts using defaults where possible.

--skip-phase PHASE

Skip a named phase when you are intentionally managing that step yourself.

--resume

Continue after a failed or interrupted run.

--verbose

Print 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.log and /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.