Skip to content

Modules & runtimes

What's installed by default, daemon-stack skip variables, optional runtimes (MySQL/Postgres/Redis/Docker), and per-tier feature flags.

What’s installed by default, what’s optional, how to opt out at install time, and how license-tier feature flags interact with all of it.

What the bootstrap installs unconditionally

Running curl -fsSL https://install.vloud.app | sudo -E bash installs the platform substrate:

  • nginx — every site this engine serves is fronted by it.
  • Node.js 20 — the engine itself runs on it.
  • PHP 8.3 + FPM — the most common tenant runtime.
  • sqlite3 — the engine’s own metadata store.
  • certbot — Let’s Encrypt SSL issuance + renewal.
  • rsync, dnsutils, openssh-client — operational tooling.

These aren’t toggleable. If you don’t want PHP, the right move is not Vloud — that part of the substrate runs the most common customer workloads.

The daemon stack (toggleable at install time)

After the engine starts, bootstrap-daemon-stack.sh installs an additional set of daemons that turn a bare server into a full hosting box. Each can be skipped via an environment variable, set before running the bootstrap:

DaemonSkip variableWhat you lose by skipping
Postfix (SMTP)VLOUD_BOOTSTRAP_NO_POSTFIX=1Outbound mail; no tenant mailboxes.
Dovecot (IMAP/POP3)VLOUD_BOOTSTRAP_NO_DOVECOT=1Mailbox access; no webmail.
RspamdVLOUD_BOOTSTRAP_NO_RSPAMD=1Spam filtering on inbound mail.
fail2banVLOUD_BOOTSTRAP_NO_FAIL2BAN=1Auto-ban for brute-force SSH/dovecot.
BIND (authoritative DNS)VLOUD_BOOTSTRAP_NO_BIND=1Tenant-served DNS zones.
pure-ftpdVLOUD_BOOTSTRAP_NO_FTP=1FTP/SFTP for tenant file uploads.
nftables firewallVLOUD_BOOTSTRAP_NO_FIREWALL=1Rule-based ingress filtering.
tenant systemd slicesVLOUD_BOOTSTRAP_NO_TENANT_SLICES=1Per-tenant CPU/RAM quotas.
storage quotasVLOUD_BOOTSTRAP_NO_STORAGE_QUOTA=1Per-account disk caps.

Master skip (handy for cPanel coexistence): VLOUD_BOOTSTRAP_NO_DAEMON_STACK=1 — skips the whole stack. cPanel hosts get this automatically because cPanel already owns the mail/DNS/firewall substrate.

Example install with mail skipped:

export VLOUD_BOOTSTRAP_NO_POSTFIX=1
export VLOUD_BOOTSTRAP_NO_DOVECOT=1
export VLOUD_BOOTSTRAP_NO_RSPAMD=1
curl -fsSL https://install.vloud.app | sudo -E bash

Optional runtimes (not in the bootstrap)

Some runtimes are intentionally not installed by the bootstrap — they’re only useful if your tenants need them and you don’t want to pay the install cost for everyone. Install them after the bootstrap finishes:

RuntimeInstallEngine integration
MySQLapt install -y mysql-serverDetected at runtime; provisioning page works once available.
PostgreSQLapt install -y postgresqlplugins/pg-provisioning handles DB + user creation.
Redisapt install -y redis-serverBullMQ-backed job queues use it when present; engine falls back to a sqlite queue otherwise.
Dockerdocker.com instructionsservices/docker-manager.ts detects + manages tenant containers.

After installing, restart the engine (sudo systemctl restart vloud) so it re-detects what’s available.

License-tier feature flags

Beyond the runtimes themselves, your license carries a set of named feature flags that gate whole plugin registrations:

  • core — base hosting (always on if you have any license)
  • email — mail plugin routes (requires the mail daemons too)
  • backups — scheduled tenant backups + restore
  • ai-doctor — Claude deploy-failure diagnosis
  • security-engine — 12-phase ClamAV + YARA + threat feeds
  • reseller — sub-accounts + white-label
  • multi-region — cross-region deployment
  • white-label — full brand customisation
  • kubernetes — experimental Kubernetes plugin

See Tiers & features for which tier includes which flag. The dashboard hides routes whose flag isn’t in your license; trying to hit one returns 402 + the Upgrade prompt.

Coming: in-product module toggle

Today, daemon-stack opt-out happens only at install time via env vars. A future Settings → Modules page will let you start / stop / disable individual daemons from the dashboard, post-install. That page will reuse the same skip variables, just expose them as toggles with state persistence. It hasn’t shipped yet; until it does, env-var-at-install is the path.

Hosting packages: per-tenant carve-up

Inside your license’s total capacity (max_instances + max_linux_users) you carve up hosting packages — Bronze / Silver / Gold style sub-tiers that apply per tenant. A package limits a single hosting account’s disk, databases, and features-within-features. Stand them up under Admin → Hosting packages.

The license tier and the package gate stack additively: a tier that doesn’t include email means no tenant gets email regardless of their package; a tier that includes it but a package that excludes it means that specific tenant doesn’t.

Why we don’t support distro-X

Vloud installs on Ubuntu 22.04 / 24.04 and Debian 12 only. Real cross-distro support means an audit of ~40 shell-out sites for distro assumptions, parallel scripts for RHEL/SELinux/firewalld, and a doubled test surface — 2–3 weeks of focused work, not a line change. We’ll add it when there’s real demand; until then, the Ubuntu/Debian assumption is honest.