Skip to content

Operator guide

Day-to-day administration patterns — hosting accounts, quotas, capacity planning, suspending tenants, monitoring, support.

After the first deploy you’re running Vloud day-to-day. This guide is the operator’s reference for the patterns that come up repeatedly.

Hosting accounts

A hosting account is a Linux user + a slice of your license capacity. Create one per customer.

Adding an account

Dashboard → Hosting AccountsNew account. Pick the slug (Linux username), an email for the account owner, and a hosting package if you’ve set them up. The engine:

  • Runs useradd --create-home <slug> via the privileged runner.
  • Generates a per-tenant PHP-FPM pool at /etc/php/8.3/fpm/pool.d/<slug>.conf.
  • Reloads php8.3-fpm.
  • Reserves one slot against max_linux_users in your license.

Suspending an account

Dashboard → Hosting Accounts → account row → Suspend. Vloud:

  • Sets the PHP-FPM pool’s process limit to 0 (existing requests drain).
  • Replaces the nginx vhost with a “site suspended” landing page.
  • Disables the account’s mailboxes (Dovecot returns 503).
  • Keeps all files + database rows on disk.

Resume reverses everything in one click. Used for billing holds, abuse pending review, or maintenance windows.

Deleting an account

Dashboard → Hosting Accounts → account row → Delete. Asks for the slug as confirmation. Removes the Linux user, home dir, mailboxes, databases, DNS zones, vhosts.

Take a backup first. Vloud doesn’t restore deleted accounts on demand — you’d need to pull from your backup tarball + replay.

Per-account quotas

If you installed with VLOUD_BOOTSTRAP_NO_STORAGE_QUOTA=1 you don’t have these; see Modules & runtimes to enable.

Dashboard → Account → Resource limits. Per account:

  • Disk — XFS / ext4 user quota, hard + soft caps with a grace window.
  • Databases — count + total size.
  • Mailboxes — count + total mail storage.
  • Cron jobs — count.
  • PHP-FPM children — concurrent process cap.
  • Bandwidth — monthly outbound transfer (advisory; surfaced as a warning).

Defaults inherited from the account’s hosting package, override per-account when needed.

Capacity planning

The sidebar capacity widget shows your engine’s current utilisation vs license limits at a glance. Click → Settings → License for the full breakdown.

Two dimensions to watch:

  • max_instances — running apps. Counted per app: a WordPress install with no PHP-FPM children running counts as zero; one with active workers counts.
  • max_linux_users — distinct hosting accounts.

When you hit a cap, the next create attempt returns 402 + the Upgrade prompt. Plan for: cap × 0.8 = soft alert, cap × 0.95 = “upgrade before you’re stuck”.

Monitoring + alerts

Dashboard → Monitoring → see live CPU / RAM / disk / network / load on the host; per-process + per-account breakdowns.

Setting up alert channels

Settings → Notifications. Add a channel:

  • Email — to an external SMTP relay or your local Postfix.
  • Slack — incoming webhook URL.
  • Discord — incoming webhook URL.
  • Generic webhook — any HTTPS endpoint that accepts a JSON POST.
  • PagerDuty — events API v2 integration key.

Per alert, pick severity threshold + which channels fire. Common alerts to set up day 1:

  • Disk > 85% (warning), > 95% (critical)
  • RAM > 90% sustained for 5 min
  • Load average > N (CPU count × 1.5)
  • SSL cert expiring in < 14 days
  • Backup job failed last run
  • Engine update available (CRITICAL only — auto-update handles routine patches)

Backups

Dashboard → Backups. Schedule per-account or for the whole host.

Default schedule

  • Daily 03:00 UTC
  • Keep 7 daily + 4 weekly + 12 monthly
  • Tarballs land at /var/lib/vloud/backups/<slug>/<date>.tgz

What’s in a backup

Per account: public_html/ files, MySQL dumps, Postgres dumps, mailbox maildirs, the per-tenant nginx config, the PHP-FPM pool config. Crontab if used.

Not included by default: the engine’s own state (vloud.db, /etc/vloud.env). For that, script the manual snapshot from Recovery & safe mode.

Restoring

Dashboard → Backups → pick a tarball → Restore. Restore modes:

  • Files only — replaces public_html/, leaves DB / mail.
  • Database only — drops + recreates from dump.
  • Mail only — replaces maildir.
  • Full — everything.

Restore-over-existing prompts for confirmation. Restore-to-different-slug supports cloning an account.

Per-tenant mail management

Dashboard → Email → domain → mailboxes. Per mailbox:

  • Disk quota.
  • Forwarding rules (catch-all, per-address forwards, autoresponder).
  • DKIM signing on/off.
  • Sieve filters via the tenant portal.

DNS for mail is your responsibility — Vloud generates the records (MX, SPF, DKIM, DMARC) and you copy them to your DNS provider. Verify with Dashboard → Email → Verify DNS.

When something needs investigation

For a problem on a specific account (slow site, mail bouncing, app crashing):

  1. Account detail page in the dashboard → Activity tab. Shows recent deploys, restarts, suspensions.
  2. Logs tab on the account → live tail of access log, error log, PHP-FPM pool log.
  3. sudo -u <slug> from the server → impersonate the account for shell-level debugging.
  4. Support bundle → Help → Report a bug from the dashboard, attach the bundle. The bundle redacts secrets but includes the recent error context. See Reporting bugs.

Common tasks reference

NeedWhere
Add a domain to an existing accountDashboard → Domains → New domain
Renew an expiring SSL manuallyDashboard → Domains → domain → SSL → Re-issue
Add a tenant user to an accountDashboard → Account → Tenant users → Invite
Force a job-worker restartsudo systemctl restart vloud-job-worker
Re-trigger a heartbeat (after license change)sudo systemctl restart vloud
Disable a daemonModules & runtimes
Recover from a broken updateRecovery & safe mode

What’s next