Adding a MinIO server to ImpulseMinio

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

Last updated 20 days ago

Adding a MinIO server to ImpulseMinio

You can't sell plans until ImpulseMinio has at least one MinIO host to land customers on. The module supports two paths: provision a new VPS, or connect an existing MinIO 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 MinIO + 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 MinIO 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 MinIO hosts you don't want the addon to provision. Click Servers → Connect Existing.

  1. Install the ImpulseMinio 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-minio.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 MinIO root user / password — so the addon can create per-tenant users and buckets via the MinIO admin API.

  4. Click Connect. The addon hits /admin/v1/health and /admin/v1/info to confirm everything, then writes the row to mod_impulseminio_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 MinIO 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 impulseminio.

Related