Keeps off-server copies of your backups in any S3-compatible bucket (AWS S3, Cloudflare R2, MinIO, Wasabi, Backblaze B2, IDCloudHost Object Storage…) and downloads objects back again. The S3 work is done by a shipped Go engine that implements SigV4 signing and a streaming, concurrent multipart upload directly — no AWS SDK — so memory stays around 50 MB whatever the archive size. Credentials are stored in PluginData encrypted with Fernet (keyed from the panel's SECRET_KEY), decrypted only in-process, and passed to the binary through its environment; the secret key is never returned to the browser, only whether one is set.
Settings cover bucket, region, endpoint, key prefix and access key, which is enough for AWS S3, Cloudflare R2, MinIO, Wasabi or Backblaze B2. A test-connection action actually lists the bucket rather than just validating the form. Every transfer reports live progress (percent, speed, time left), shown here and on the Backups page. Each upload request carries a Content-MD5 and the final ETag is compared with the bytes read. Uploads run as a detached background job that returns a job id immediately; the job's completion is determined by the result file the engine writes, not by probing the PID, which avoids both the zombie-reads-as-alive and recycled-PID failure modes.
Restore downloads a single object into a folder on the server as a background job that does every filesystem step as the destination's owner (website owners: as their own account, inside their own website folders or backups folder), resumes a dropped download and verifies it against the object's checksum. The file is not extracted, and an existing file is never overwritten. An archive restored into a backups folder is listed on the Backups page again, ready to restore. Website owners get a reduced action set: they may back up only paths that resolve (after symlink resolution) inside a docroot they own, into a per-tenant S3 prefix they cannot escape, and may list and poll only their own backups — the bucket name, region and credentials stay admin-only.
Off-site copies of scheduled backups: pick S3 as the destination of an automatic backup (Backups → Automatic Backups) and every archive the panel makes — website files, database dumps, folders — is uploaded in the background after it is written, then copies beyond the schedule's off-site limit are pruned. Uploads run as a detached job that opens the archive with its owner's identity, so they work for every account's backups without reading anything that account could not. The uploaded payload itself is not encrypted (only the stored credentials are).
Storage options (admins): the storage class uploads are stored with (AWS S3 classes on AWS; STANDARD on other providers), an optional expiry rule for the key prefix added to the bucket's lifecycle configuration without touching its other rules, an upload bandwidth limit (MB/s) and, on buckets created with Object Lock, immutable copies retained in GOVERNANCE or COMPLIANCE mode for N days. Locked copies cannot be deleted before their retention ends; pruning skips them until then.
The page has four tabs. Backups lists the panel's own backups with an Upload to S3 button per row; Back up now makes a fresh backup of a website, database, home folder or folder (website owners: only their own) and copies it to S3 when the archive is finished; Bucket files lists and restores objects; Settings holds the bucket and keys (admins only). All panel-backup copies go through the same background off-site uploader as scheduled backups.
Availability: Included at no extra cost with the Profesional and Enterprise plans. On the Free and Starter plans it is available per server as a monthly subscription ($3.99/month) or a one-time purchase ($39).
Use VinzaPanel's REST API to download and install this app programmatically.
POST /plugins/api/download/s3-backup/ Content-Type: application/json { "panel_version": "1.0.0" }
{
"success": true,
"plugin_id": "s3-backup",
"version": "1.4.5",
"download_url": "..."
}