Snapshots of an application — its files and its database — taken on demand or on a schedule, kept locally or offsite, and restorable with a safety copy taken first.
Getting here: Servers → a server → Applications → an application → Backup & Restore
1. What a backup actually contains
Two things, either or both:
| Part | What it is |
|---|---|
| App files | A compressed archive of the application's document root, including dotfiles such as .env |
| Database | A compressed dump of the application's database — MySQL/MariaDB, PostgreSQL or MongoDB, whichever the application uses |
The database dump uses the engine's own tool (mysqldump, pg_dump, mongodump), so it is a normal dump you could restore by hand if you ever needed to.
What is not included: anything outside the document root. System packages, PHP or Node versions, web server configuration, cron jobs, SSL certificates and other applications on the same server are not part of an application backup.
2. Permissions
| Section | Permission |
|---|---|
| Manual Backup, Auto-Backup Schedule | Application_Backup |
| The restore action on a backup | Application_Restore |
Without the permission the section is hidden entirely rather than disabled. Note that the delete button on a backup is not gated by either — anyone who can see the tab can delete a backup.
3. Manual Backup
Scope
| Option | Contents |
|---|---|
| 🗂️ Full Backup | App files + Database |
| 📁 Code Only | App files only |
| 🗄️ Database Only | Database dump only |
Full is the right default. The two narrow options are for specific moments: Code Only before a deployment where the schema is not changing, Database Only before a data migration or a bulk edit.
Be careful with the asymmetry: restoring code without its database can leave an application running new code against old data, or the reverse. A Full backup gives you the option to restore either part later; a narrow one does not.
Backup Destination
A Local / Offsite switch.
| Destination | Where the snapshot lives |
|---|---|
| Local | On the server itself, under /root/backups/<application>/ |
| Offsite | Uploaded to object storage, and the local copy is then deleted |
Two things about this switch matter more than they look:
It saves the moment you flip it. There is no separate save button — the choice is stored on the application immediately, and it also governs where scheduled backups go. It is not just a setting for the next manual backup.
Offsite is a move, not a copy. Once the upload succeeds the server-side archive is removed, so an offsite backup exists in exactly one place. That is the point — a server that dies takes its local backups with it — but it also means restoring from offsite has to download first, and an offsite backup is only as reachable as the storage service.
When Offsite is selected:
The per-GB rate comes from your account's configured pricing and appears on your bill alongside other storage.
Backup Now
Starts the backup, showing Starting…, then:
The backup runs in the background. The response comes back immediately; the work continues on the server. You can leave the page.
4. Backup List
While anything is running, a Backup in progress… pill appears and the list refreshes itself every 5 seconds until nothing is in the creating state.
Local and Offsite tabs
The list is split by destination. The tab you land on defaults to the application's current destination, and a pulsing dot on either tab means a backup is being created there — so you see activity on the tab you are not looking at.
The table
| Column | What it shows |
|---|---|
| Type | How it was created |
| Content | What is inside it |
| Name | The generated snapshot name |
| Date & Time | When it was taken |
| Size | KB or MB; — when nothing was measured |
| Status | Current state |
| Action | Restore, delete |
Type badges:
| Badge | Meaning |
|---|---|
| Manual | You pressed Backup Now |
| Daily / Weekly / 14 Days / Monthly / Scheduled | Created by the schedule |
| Pre-Restore | Taken automatically just before a restore |
Content badges: Full, Code, DB.
Status:
| Status | Meaning |
|---|---|
| Available (green) | Complete and restorable |
| Creating… (amber, pulsing) | In progress |
| Failed (red) | Something went wrong — it cannot be restored |
| Expired (red) | No longer usable |
Restore is only offered on an Available backup. Delete is always offered.
Empty states are specific: No backups yet. Click "Backup Now" to create the first one. on a fresh application, and No Local backups yet / No Offsite backups yet when the other tab has them.
Retention — only 5, and pre-restore backups count
All types count toward the five, including the automatic Pre-Restore snapshots. That has a consequence worth internalising:
When a backup is pruned, its files are removed from the server and its offsite objects are deleted. Pruning is not a database-only cleanup.
If you need a snapshot to survive beyond five, take it out of the rotation — restore it somewhere, or export the data — rather than assuming it will still be there next week.
5. Auto-Backup Schedule
Frequency
| Option | Described as |
|---|---|
| None | No automatic backups |
| Daily | Every 24 hours |
| Weekly | Every 7 days |
| 14 Days | Every 14 days |
| Monthly | Every 30 days |
Time
Hour, Minute and AM/PM selectors, with a timezone shown beside them.
Weekly adds a Day of Week selector.
Next backup available
The heading shows when the next run is due — the schedule name for Daily and Weekly, and a specific date for the longer intervals, calculated from the most recent backup plus the interval.
Saving
Save Schedule is disabled until something changes, and opens a confirmation listing exactly what you are about to set:
Confirming reports Auto-backup set to: Weekly on monday at 02:00.
Scheduled backups use the scope Full and the application's current destination.
6. Restoring
The restore icon on an Available backup opens Confirm Restore, showing the snapshot's name, date and size.
What to restore
Only a Full backup offers a choice — Full, Code Only or Database Only. A Code-only or Database-only backup restores exactly what it contains.
This is the most useful capability in the tab: a Full backup lets you undo a bad deployment without touching the database, or roll the data back without reverting code.
The warning is accurate
Both halves are true and both matter.
The safety backup is real, and it is always a full snapshot — files and database — even if you are restoring only one of them. It inherits the destination of the backup you are restoring, and if an offsite upload of it fails, it is kept locally rather than being lost. It appears in the list as Pre-Restore, and it is your way back if the restore was a mistake.
The restore itself is destructive, and specifically:
| Step | What happens |
|---|---|
| Files | The entire document root is deleted and recreated from the archive — including dotfiles such as .env. Anything added since the backup is gone |
| Ownership | Files are re-owned to the application user and the web server group, directories set to 775 and files to 664 |
| Database | The existing data is cleared first — tables dropped, or the schema recreated — then the dump is loaded |
| Services | The web server is reloaded, the running PHP-FPM version reloaded, and a PM2 process for the application restarted |
The .env point deserves emphasis: a restore replaces your environment file with the one from the snapshot. If you changed database credentials, API keys or an APP_URL since then, those changes are reverted along with everything else. Check the file after any restore.
An offsite backup is downloaded back to the server first, restored from there, and the temporary copy cleaned up afterwards — so an offsite restore takes longer than a local one, proportional to the snapshot's size.
Starting a restore reports:
It then runs in the background, and the list polls until it settles.
7. Deleting a backup
Confirmed with Delete Permanently. The archives are removed from the server and, for an offsite backup, from object storage too.
8. Sensible practice
- Back up before you change anything — a deployment, a plugin update, a schema migration, a bulk data edit. A manual Full backup takes seconds to start.
- Use Offsite for anything you would miss. A local backup does not survive the server it sits on.
- Prefer Weekly over the longer intervals until 14 Days and Monthly behave as labelled.
- Set your profile timezone, or your schedule fires at an hour you did not intend.
- Check
.envafter every restore. - Remember the limit of five, and that restores consume slots. Do not treat this as long-term archival.
- Test a restore before you need one. A backup you have never restored is an assumption, not a safety net — and the pre-restore snapshot means testing is reversible.
- Take a Full backup rather than a narrow one when you are unsure. You can always restore part of it later; you cannot restore a part you never captured.
9. Common problems
| Problem | Cause |
|---|---|
| Backup stuck on Creating… | Still running — a large document root or database takes time; the list polls every 5 seconds |
| Backup shows Failed | The server was unreachable, the database credentials did not work, or an offsite upload failed |
| Size shows — | Nothing measurable was produced — usually a failed dump or an empty scope |
| An old backup disappeared | The five-backup limit pruned it; Pre-Restore snapshots count too |
| No restore icon | The backup is not Available, or you lack Application_Restore |
| Restore finished but the site is broken | Check .env — it was replaced by the snapshot's version |
| Restore finished but the old data is still there | You restored Code Only; the database was untouched |
| Restore reverted code you wanted to keep | The document root is wiped and recreated; anything newer than the snapshot is gone — use the Pre-Restore backup |
| Offsite restore is slow | The archive is downloaded to the server before restoring |
| Scheduled backups running more often than expected | 14 Days and Monthly lack the duplicate check that Daily and Weekly have |
| Backup fired at the wrong hour | The schedule uses your profile timezone, not the one displayed |
| Offsite charges higher than expected | Billed per GB of stored snapshots, and up to five are kept |
| Backup has no stored files to restore from | The snapshot's files are gone — deleted, pruned, or never written |
10. How this relates to other places
| Where | Scope |
|---|---|
| Backup & Restore (this tab) | One application's files and database |
| Server Backup | The whole server, including everything on it |
| Access → Database Import | A one-way import of a dump you supply; no safety copy taken |
| Managed Databases → Backups | Cluster-level database backups, independent of any application |
The division worth remembering: a server backup protects the machine, this protects the application. They are not substitutes — restoring a whole server to undo one bad deployment is a much larger operation than restoring one application.
Something here not matching what you see in the panel?
Tell us