Skip to main content
ImpulseMinio

Adding a storage server to ImpulseObjects

Register a storage host with the module — either have it provision a fresh RustFS VPS for you, or connect an existing RustFS server you already run.

Last updated 20 days ago

Adding a storage server to ImpulseObjects

You can't sell plans until ImpulseObjects has at least one storage host to land customers on. Each server runs RustFS, an S3-compatible storage engine. The module supports two paths: provision a new VPS, or connect an existing storage server.

Path A — provision a new server

This is the default. The module spins up a VPS on your configured provider, runs cloud-init to install RustFS + Nginx + the Python admin proxy + certbot, issues a Let's Encrypt cert via DNS-01, and waits for the proxy health check before flipping the row to online.

From the addon, click Servers → Provision New Storage Server. Fields you'll fill in:

  • Server Name — admin-facing label, e.g. US Central — Dallas.
  • Hostname — FQDN that becomes the S3 endpoint, e.g. us-central-dallas.example.com. Must be a subdomain of a zone you control on the configured DNS provider.
  • Region (canonical) — provider-agnostic slug like us-central-dallas. Customer order routing matches on this; multi-provider installs can pool capacity across vendors who all serve the same canonical region.
  • VPS Provider — pick from your configured providers.
  • VPS Plan — click Find Best Server Size to query the provider's catalog, or paste a plan slug directly (Vultr vc2-2c-4gb, Hetzner cx22, DO s-2vcpu-4gb, Linode g6-standard-2).
  • Block Storage — size in GB. The addon attaches the volume, formats it, and mounts at /data.
  • Max Tenants — load-balancer cap. Hard limit on how many customer services land on this server.
  • Mark as default for this region — the load balancer prefers default servers when routing new orders.

Click Provision Server. The flow takes 5–10 minutes. Watch the row from the Servers tab; View Log fetches the bootstrap log over SSH if anything stalls.

The most common stalls are SSH key mismatches, DNS API tokens missing the Zone:Read permission, hostnames that haven't propagated, or brand-new provider accounts hitting default volume/instance caps (DigitalOcean is the most restrictive at 100 GiB per volume by default).

Path B — connect an existing server

For self-managed RustFS hosts you don't want the addon to provision. Click Servers → Connect Existing.

  1. Install the ImpulseObjects admin proxy on the host. The addon shows a copy-paste install script under Tools → Help → Admin Proxy. Runs as a systemd unit, listens on TCP 9099, requires Bearer auth.
  2. Confirm https://your-storage.example.com is reachable from your WHMCS server.
  3. In the Connect form, fill in hostname, region slug, admin proxy port (default 9099), admin proxy Bearer token, and the RustFS root user / password — so the addon can create per-tenant users and buckets via RustFS's admin API.
  4. Click Connect. The addon hits /admin/v1/health and /admin/v1/info to confirm everything, then writes the row to mod_impulseobjects_servers.

By default, connect-existing servers are not in the Security & Maintenance pipeline — you patch the host yourself. To opt in, check Manage OS patching for this server on the Connect form; the addon then runs the same Collector / Actuator path as a provisioned server.

Dedicated vs shared from the operator's perspective

Every server you add is a shared host by default — multiple customers land on it, isolated at the storage engine's tenant level. Customer services on shared hosts patch at the host level on your maintenance schedule.

A dedicated host carries a single customer. Plans pinned to a single server (via the Plan server restrictions field) effectively become dedicated when each customer gets their own server. Dedicated-host customers see a Defer button on their Security tab; shared-host customers see a neutral "patched at the host level" message.

Audit trail

Every provisioning step writes to Core's audit log. Successful provisions log the provider order id, VPS id, public IP, and the moment the proxy first responded. Failed provisions log the SSH-side error and the point in cloud-init where the bootstrap halted. Query from Core's Audit Log tab, scoped to module impulseobjects.