Part III - Storage Pools

Store files, back up to S3, check diffs, and schedule deployments across all members.

Introduction

Storage Pools

Storage Pools are the central distribution platform for ServersCTL. Publish backups, configuration files and deployment packages from browsers, agents or external software, then compare, version, schedule and deploy them safely across your infrastructure.

Storage Pools hold things you care about in production:

Each pool is a named, regional destination with its own quota, S3 credentials, and object browser. Storage is account-scoped: one login can have multiple pools (for example London Recovery and Toronto DR). Pools are not tied to a single server pool—you can send or restore from a Storage Pool to any enrolled member in your account when compatibility rules allow.

The product thinks in objects (for example example.com vhost, all-databases dump, nginx site config), not raw folder paths. Repeated backups of the same site become new versions under the same object.

Where to find Storage Pools

Location

What you get

Left sidebar → Storage Pools

Account overview and list of all pools

/app/storage-pools

Storage Pools overview (usage, recent objects, live activity)

/app/storage-pools/new

Create a new pool (region + capacity + name)

/app/storage-pools/{pool}

Objects — browse, upload, discover, deploy, restore

/app/storage-pools/{pool}/activity

Live incoming/outgoing jobs

/app/storage-pools/{pool}/credentials

S3 endpoint and keys for WHM/cPanel/scripts

/app/storage-pools/{pool}/settings

Slug, region, quota breakdown

The sidebar footer also shows aggregate storage used / quota across all pools.

Plans, costs, and quota

Storage capacity is billed at the account level. Each Storage Pool has its own assigned quota slice of that account capacity.

Included with Pro

Plan

Base storage

Community

0 bytes — you must purchase add-on capacity before backups can upload

Pro (active subscription)

5 GiB included

14-day trial

Same as Pro while trial is active

When you create a Storage Pool, you can apply the Included 5 GiB (Pro) capacity option once per account (until that entitlement is fully claimed). The create wizard shows how much included storage is still available.

Storage Pool add-ons (monthly)

If you need more space, purchase a Storage add-on. Prices are per month; checkout uses the region of the pool or vault you are protecting.

Capacity

Monthly price

10 GiB

$4

50 GiB

$12

100 GiB

$20

250 GiB

$40

500 GiB

$65

How add-ons combine with Pro: add-on bytes add to your account quota. A Pro account with a 10 GiB add-on has 15 GiB total (5 GiB included + 10 GiB add-on), not 10 GiB replacing the included amount.

Where to buy add-ons: the Storage Pool tier picker appears when:

Purchases go through Stripe Checkout (Account billing). Upgrading an existing storage subscription changes the current Stripe item with proration instead of creating a duplicate subscription.

What counts toward quota

When the quota is full, new uploads fail with a clear insufficient storage message until you delete objects or buy more capacity.

Feature access by plan

Action

Community

Pro / active trial

Browse & download objects

Yes

Yes

Run backups into storage

Only with purchased quota

Yes (with quota)

Browser upload

Locked

Yes (max 5 GiB per file)

Delete objects

Locked

Yes

Restore to server

Locked

Yes (compatible targets)

Deploy config to server

Locked

Yes

Configuration Discovery

Locked

Yes

Deployment Wizard

Locked

Yes

Regions and endpoints

When you create a Storage Pool, you choose a region (physical vault cluster). Pick the region closest to your servers and restore targets for lower latency.

Billing regions (Stripe)

Add-on checkout is priced per vault region:

Region key

Label shown in billing

eu-west

EU West

ca-east

CA East

sgp-central

SG Central

Additional regions may appear in the create wizard, marked Coming soon.

Your pool’s hostname

Each pool gets a dedicated endpoint on serversctl.com storage infrastructure:

{pool-slug}.{region}.storage.serversctl.com

Example: slug london-recovery in EU West → london-recovery.eu-west.storage.serversctl.com

Use this hostname for:

Credentials for the pool are under Storage Pools → {pool} → Credentials.

Create your first Storage Pool

  1. Open Storage Pools in the left sidebar.

  2. Click Create Storage Pool (or go to /app/storage-pools/new).

  3. Step 1 — Region: select an available region (healthy clusters show S3 endpoint).

  4. Step 2 — Capacity:

    • Included 5 GiB (Pro) — free, uses your Pro entitlement (shown only while remaining).

    • Paid tiers — 10 GiB through 500 GiB monthly options (when checkout is enabled for your account).

  5. Step 3 — Name: give the pool a clear name (for example Frankfurt Recovery). The wizard suggests a name from the region.

  6. Click Create Storage Pool.

You land on the pool Objects page. Activation provisions vault space, DNS, TLS, and S3 credentials for that pool.

Tip: use separate pools for separate purposes (production backups vs config baselines vs a second geography). Always secure your account with Two-Factor authentication.

Navigation overview

Account overview (/app/storage-pools)

Per-pool tabs

Tab

Purpose

Objects

Main work surface — browse, upload, discover, deploy, restore, delete

Activity

Live jobs only (running backups, uploads, Send To, deploy, restore)

Credentials

S3 URL, bucket/slug, access key, secret — for WHM and automation

Settings

Read-only pool metadata (slug, region, quota, default flag)

Objects and versions

Object browser layout

Objects are grouped by source server first (member folders), not dumped in a flat list.

  1. Top level: folders per source member (hostname / site name).

  2. Inside a member: service folders such as Backups, OpenLiteSpeed, MariaDB, NGINX, WordPress, SSL, Cron, Firewall, PHP, cPanel, Services.

  3. Inside a service folder: individual objects.

Backups from a server stay under that server’s folder, then Backups — so an old site backup does not create a second root folder for the domain name.

Search flattens the tree and shows matching objects across the pool.

Object row actions

Button

When it appears

What it does

Open

Always

Version history, metadata, compare, download

Deploy

Object is deployable (for example OLS vhost config, discovered .conf)

Push config to compatible members

Restore

Object is a restorable backup snapshot

Guarded restore on compatible members

Row menu adds Send latest to inbox, Deploy latest, Restore latest, Download, Delete (Pro).

Versions

Each object has one or more versions (v1, v2, …). Version states include active, archived, and deprecated. Deploy and restore the default to the latest active version unless you pick another in the UI.

Open an object to:

Getting data into a Storage Pool

Managing Data

Member backups

From any enrolled server’s member tabs:

Source

Typical path

OpenLiteSpeed → Backups

Full / site / web backup jobs

MariaDB → Backup

Database dump

cPanel → account backup

WHM pkgacct style packages

Backups tab

Snapshot backups

When the job supports it, you choose the destination Storage Pool before the job runs. Progress appears under Activity (incoming lane).

Agent backups flow: check quota → collect → dump/package → upload → confirm stored. Install a current agent (v204+ recommended) for step-by-step byte progress.

WHM / cPanel S3 destination

  1. Open Storage Pools → {pool} → Credentials.

  2. Copy S3 endpoint, bucket (your pool slug), access key, and secret.

  3. In WHM: Backup → Additional Destinations → S3 Compatible.

  4. Set endpoint to your pool hostname, bucket to slug, path as documented on the Credentials page.

  5. Run WHM backups — they land as objects in that pool.

Quota is enforced on the vault; over-quota uploads receive 507 Insufficient Storage.

Browser upload (Pro)

  1. Open pool Objects.

  2. Click Upload.

  3. Select file(s) — large files upload in 16 MiB chunks (max 5 GiB per file).

  4. After upload, publish: attach as a new version of an existing object, keep as a separate object, or cancel.

Configuration Discovery (Pro)

Baseline server configs without running a full backup:

  1. On Objects, click Run Discovery.

  2. Pick one member to scan (account-wide member list).

  3. Choose categories (HAProxy, nginx, OpenLiteSpeed, PHP, SSL, MariaDB, cPanel, cron, firewall, apps, and more) or select all.

  4. Options: include SSL private keys (off by default), include system package units under /lib/systemd/system (off by default), force fresh baseline (ignore agent cache).

  5. Confirm — a read-only scan runs on that member only. Discovered text files become objects; unchanged files do not create new versions.

Live progress shows on the Objects page until complete. Requires agent v208+ for discovery (older agents may still be selectable; the job reports the real result).

Privacy: application configs (WordPress, Laravel, Docker Compose, and similar) store redacted copies — passwords and secrets are stripped. Redacted objects show Secrets redacted and cannot be deployed back to production.

Track Changes (daily discovery)

On a member folder row menu → Track Changes:

Agent CLI upload (large files)

On the server (agent v195+):

sudo /usr/local/bin/balctl_heartbeat.py --send-to-storage /path/to/file-or-folder

The agent packages the path, checks quota, uploads as an Agent upload object. Useful when browser limits are awkward.

Protection replication

Protection jobs (cPanel / OpenLiteSpeed standby) can replicate into vault storage tied to your account quota. If space is insufficient, the replication wizard prompts for Cloud Backup Storage add-ons.

Send To, Deploy, and Restore

Send To inbox

Delivers a copy to a member’s storage inbox (/var/lib/balctl/storage-inbox/) without changing production files. Use for inspection or manual steps.

  1. Open object or version → Send To (or row menu).

  2. Select one or more target members.

  3. Confirm — progress appears in Activity (outgoing).

Deploy

Writes configuration to production paths on selected members. The agent:

OpenLiteSpeed vhost deploy uses a guarded vhost path. Discovered configs deploy to the same member or another member with matching OS/service (agent v215+).

  1. Click Deploy on a deployable object, or Deployment Wizard for multiple objects.

  2. Pick version if prompted.

  3. Select compatible targets (incompatible members are shown but blocked).

  4. Review paths, optional reload OpenLiteSpeed, optional advanced path override.

  5. Deploy now or schedule (wizard).

A live deploy spotlight shows progress per target member.

Restore

For backup objects linked to a snapshot (OLS site/web/full, cPanel account, database dumps):

  1. Click Restore on object or version.

  2. Select compatible members (OLS backups → OLS members, cPanel → cPanel, and so on).

  3. Confirm — guarded restore runs on each target; Activity tracks progress.

Restore replaces production data for that backup scope — use with care.

Deployment Wizard

Objects → Deployment Wizard (Pro, when deployable/restorable objects exist):

  1. Source member — same grouping as the object browser.

  2. Objects — pick deploy and/or restore objects (one action type per run).

  3. Targets — compatible members only.

  4. Paths (deploy) or Confirm (restore).

  5. Schedule (deploy only) — now or future time.

Activity, S3, Settings & Deleting Objects

Activity tab

Shows live work only — not historical logs.

Lane

Examples

Incoming

Running backups, browser/S3 uploads, discovery archiving

Outgoing

Send To, deploy jobs, restore jobs

Refreshes every few seconds. Completed or failed jobs disappear from Activity; the finished object remains in Objects.

Credentials and S3 setup

Storage Pools → {pool} → Credentials

Field

Use

Endpoint

S3 URL for WHM, rclone, restic, etc.

Bucket

Pool slug

Access key / Secret

Authentication

Regenerate keys from the panel if compromised. Keys are scoped to your account and pool.

WHM tips:

Settings

Settings shows:

Rename and delete pool flows (if exposed in UI) respect active usage — check quota and objects before removing a pool.

Deleting objects

Pro: select objects with checkboxes → Delete selected, or delete from row menu / object details.

Deletion removes the logical object and version history from your storage. There is no way to recover a file after deletion.

Troubleshooting & Glossary

“Insufficient storage” / backup won’t start

Upload button disabled

Deploy / Restore target greyed out

Discovery stuck or slow

WHM S3 backup fails

Objects missing after backup “succeeded”

Glossary

Term

Meaning

Object

A named thing in a pool (site backup, config file, dump)

Version

A point-in-time revision of an object

Artefact

Internal platform type (OLS vhost, cPanel account, etc.) — you see the friendly object name

Publish

Finalize an upload into the object catalog

Send To

Copy to member inbox without production changes

Deploy

Write config to production with rollback

Restore

Replay a backup snapshot on a compatible server

Discovery

Read-only inventory of config files into the pool