Data and certificates

Backups, restore and snapshots

A site backup captures files and databases together. Schedule them, copy them off the server, and restore into the same site or a fresh one; provider snapshots cover the whole machine.

Verified against auraPanel 1.21.3· Last updated 17 September 2026

What a backup contains

A site backup is a directory under /var/lib/aurapanel/backups/<domain>/<date>/, readable by root only, holding:

  • one gzipped SQL dump per database bound to the site;
  • with scope DB + files, a files_….tar.gz of the document root plus any application data directory the panel knows lives outside it (Moodle's data root, Nextcloud's data);
  • a manifest describing the site, its type and what was captured.

Not included: nginx server blocks, certificates and keys, cron entries, Linux users, the panel's own database, and anything outside the document root and registered data directories. Those are recreated by the panel or the restore wizard, not restored from the archive.

Schedule backups

  1. Open the site's Backups tab.
  2. Choose the scope: Databases only (the default), or DB + files.
  3. Choose a frequency: hourly, every 3, 6 or 12 hours, daily, weekdays, weekends or weekly, with an hour of day (UTC) and, for weekly, a weekday.
  4. Set retention: keep backups for 1 to 365 days (default 14), and always keep at least N most recent (default 7).

The scheduler runs inside the panel and checks every ten minutes; it does not use system cron.

Back up now

Back up now on the site, or apcli backup create example.com. The backup runs as a background job with a two-hour ceiling; the panel shows its steps ("Dump databases and archive files", then "Copy to remote storage" when configured) and you can leave the page.

apcli backup create example.com
apcli backup list example.com

apcli backup restore appears in the CLI help but is not implemented in this release: it replies that restore must be done from the panel. Use the restore wizard below.

Copy backups off the server

Backups in the main menu configures one off-site destination through rclone. Providers offered: Amazon S3, Backblaze B2, Dropbox, Google Drive, SFTP and OpenStack Swift, plus a free-form parameter box for anything else rclone supports, and a remote:path target. After each backup the new files are copied there. A failed copy is reported as a warning and the local backup is kept.

Restore

The Restore action on a backup opens a three-step wizard with two destinations:

  • Over the existing site. The panel takes an automatic backup of the current state first, then replaces the databases (and files, if the backup has them).
  • Into a new site. The panel creates a fresh site of the same type and restores into it. This is how you clone a site or move a domain.

Restoring into a different site is only offered for applications the panel knows how to re-home: rewriting the restored configuration to the new database credentials so the copy cannot keep reading the original site's live database. WordPress, WooCommerce and Moodle are re-homed; plain PHP, static, Node.js, Python and reverse-proxy sites need nothing rewritten. Other applications are refused for a new-site restore and can only be restored over their own site.

Expected result

The wizard reports success and the site serves the restored content. If only databases were in the backup, the wizard says so: "Only the database will be replaced — … keeps its current files."

"This backup contains only databases, so there is no site content to create a new site from…"

The backup was taken with the Databases scope. Restore it over an existing site, or take a DB + files backup.

"restoring … to a different domain isn't supported yet."

That application has no re-home step. Restore over the original site.

Whole-server snapshots

Snapshots in the main menu takes provider-level images of the entire server on a schedule, with the same frequency and retention options as backups (default: daily at 03:00, keep 7 days and at least 2). Credentials are stored encrypted. Only snapshots the panel labelled are listed and pruned.

ProviderCredentialRestore
Hetzner CloudAPI token (read and write), server IDFrom the panel
DigitalOceanAPI token (write), droplet IDFrom the panel
VultrAPI token allow-listed to this server's IPFrom the panel
HostingerhPanel API token; one rolling snapshotFrom the panel
AWSAccess key, secret, region, instance IDIn the provider console
Google CloudAttached service account or a key fileIn the provider console
AzureManaged identity or a service principal, VM resource IDIn the provider console

Restoring from the panel replaces the running server and asks you to type RESTORE to confirm.

Try the live demo

A real auraPanel on a real server, shared with everyone. Sign in with the demo account and click around.

Email
demo@goaura.one
Password
demo1234
Open the demo panel ↗

Shared public demo, so please don’t put anything personal in it. More about the demo →

Talk to us

Tell us what you need and how to reach you. A person reads this, not a queue.

We use these details only to reply to you. Privacy

Recent updates

What shipped in the last releases. With automatic updates on, each lands on your server the moment it is published.

  1. v1.21.3
    Framework sites were undetectable, and a restore could silently point the copy at the original's live database.

    DetectApp looked for each application's signature relative to the docroot — but every PHP framework in the registry serves from a subdirectory (DocrootSub: public, webroot, web, pub, docroot) and keeps the file that identifies it one level *above* that. So the Laravel signature searched <project>/public/artisan,…

  2. v1.21.2
    Restarting nginx now blocks the panel and reconnects, instead of showing a notice.

    v1.21.1 stopped the false "HTTP 520" but only put up a toast — and a toast is the wrong affordance when the panel itself is about to go away: the page sat there looking broken while every request failed underneath it.

  3. v1.21.1
    Restarting nginx from Services no longer reports a false failure.

    It showed "Restart failed — HTTP 520". The panel is reverse-proxied *by* nginx, so the request deadlocked against itself: the handler blocked waiting for the restart to finish, while nginx's graceful stop waited for that very request to drain. Neither could proceed until nginx's stop-retry timeout force-killed it,…

  4. v1.21.0
    Per-site X-Frame-Options, fixing page builders that couldn't load their preview.

    Elementor's editor failed with *"Multiple 'X-Frame-Options' headers with conflicting values ('DENY, SAMEORIGIN')"*. The cause is that nginx's add_header appends rather than replaces: when the application also sets the header — a WordPress security plugin, or a CDN transform — the browser received two values,…

  5. v1.20.6
    The multi-database restore refusal now says what is in the backup and what still works.

    It read only "Restoring a multi-database site isn't supported yet", which is a dead end: it named neither the databases involved, nor why one of them is the limit, nor any route forward.

  6. v1.20.5
    Services: cards in a row now match heights.

    Like the settings grid before it, the Services grid pinned each card to its own content height, so a row often showed one card noticeably shorter than the card beside it. Each row now takes the taller card's height and both fill it, and it re-balances as content changes — a runtime installed, a longer service list.

  7. v1.20.4
    Settings: paired cards now match heights.

    Organisation / Panel Domain and auraPanel Updates / Session timeout each sat at their own content height, so a row showed one card visibly shorter than its neighbour. Each row now takes the taller card's height and both fill it — driven by content, not a fixed value, so it still adapts as a card grows (a validation…

  8. v1.20.3
    Settings: Organisation and Panel Domain now share a row too.

    They were full-width blocks stacked above the rest of the page; they now sit side by side in the same two-column grid as the Updates / Session timeout pair, so the top of Settings reads as two tidy rows instead of four stacked bands. Both cards shrink cleanly — the logo drop zone is a fixed 44×44 and the name field…

All releases on GitHub ↗