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:
| Daemon | Skip variable | What you lose by skipping |
|---|---|---|
| Postfix (SMTP) | VLOUD_BOOTSTRAP_NO_POSTFIX=1 | Outbound mail; no tenant mailboxes. |
| Dovecot (IMAP/POP3) | VLOUD_BOOTSTRAP_NO_DOVECOT=1 | Mailbox access; no webmail. |
| Rspamd | VLOUD_BOOTSTRAP_NO_RSPAMD=1 | Spam filtering on inbound mail. |
| fail2ban | VLOUD_BOOTSTRAP_NO_FAIL2BAN=1 | Auto-ban for brute-force SSH/dovecot. |
| BIND (authoritative DNS) | VLOUD_BOOTSTRAP_NO_BIND=1 | Tenant-served DNS zones. |
| pure-ftpd | VLOUD_BOOTSTRAP_NO_FTP=1 | FTP/SFTP for tenant file uploads. |
| nftables firewall | VLOUD_BOOTSTRAP_NO_FIREWALL=1 | Rule-based ingress filtering. |
| tenant systemd slices | VLOUD_BOOTSTRAP_NO_TENANT_SLICES=1 | Per-tenant CPU/RAM quotas. |
| storage quotas | VLOUD_BOOTSTRAP_NO_STORAGE_QUOTA=1 | Per-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:
| Runtime | Install | Engine integration |
|---|---|---|
| MySQL | apt install -y mysql-server | Detected at runtime; provisioning page works once available. |
| PostgreSQL | apt install -y postgresql | plugins/pg-provisioning handles DB + user creation. |
| Redis | apt install -y redis-server | BullMQ-backed job queues use it when present; engine falls back to a sqlite queue otherwise. |
| Docker | docker.com instructions | services/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 + restoreai-doctor— Claude deploy-failure diagnosissecurity-engine— 12-phase ClamAV + YARA + threat feedsreseller— sub-accounts + white-labelmulti-region— cross-region deploymentwhite-label— full brand customisationkubernetes— 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.