UpdraftPlus (Premium)
Source |
Private (Premium) — baked from the licensed zip |
Purpose |
Scheduled backup of database + uploads to offsite storage; restore |
Special infra |
Dedicated backup PVC; restore-staging |
Install
UpdraftPlus Premium is not on wordpress.org. Bake the licensed zip (root folder updraftplus/)
into the image and activate it in bootstrap:
unzip -q packages/updraftplus-*.zip -d web/app/plugins
Licence activation
There is no licence file. The Premium code is the baked zip; activation is a one-time online connect in UpdraftPlus → Premium / Extensions — logging in with the account registers the site and stores the connection in the database, so it survives every pod restart. Do it once after first deploy. Remote-storage providers (OneDrive, S3, Dropbox, Google Drive, …) are likewise authorised once via OAuth in the settings and persisted in the DB.
Storage — the two directories that matter
UpdraftPlus touches two writable locations. Getting the volume types right is essential.
Backup directory — its own PVC
The backup directory defaults to wp-content/updraft. It must be its own PVC, mounted at
web/app/updraft:
- name: updraft
mountPath: /var/www/html/web/app/updraft # own PVC, sibling of uploads
Do not implement it as a subPath of the uploads PVC. Doing so places the backups at the
uploads-PVC root, where they surface as wp-content/uploads/updraft — inside the media tree. A
media restore then collides with UpdraftPlus' own backup folder (Delete …/uploads/updraft:
Failed), and the uploads archive ends up containing the backup store recursively. A dedicated
PVC makes updraft a true sibling of uploads. UpdraftPlus honours absolute paths too, but the
default location on its own volume is the simplest correct answer.
Restore-staging directory — an emptyDir
Restores unpack archives into wp-content/upgrade. UpdraftPlus deletes and recreates that
directory between steps, so it must be an emptyDir, not a PVC subPath — a subPath bind
mount goes stale the moment the app `rmdir`s it (writes then fail with the directory reporting a
link count of 0). See the writable-path traps.
- name: upgrade
mountPath: /var/www/html/web/app/upgrade # emptyDir
Schedule
Backups run on WordPress cron, which on an immutable site is driven by the out-of-band CronJob (see WP-Cron). The interval and report email can be seeded in bootstrap:
wp option update updraft_interval 'daily'
wp option update updraft_interval_database 'daily'
wp option update updraft_email '<ops-address>'
The exact time-of-day and the remote-storage connection are set once in the admin.
Immutability boundary
UpdraftPlus can restore the database and uploads — both are writable. It cannot restore plugins, themes or core: those directories are baked read-only. Recover code by redeploying the matching image tag, not through UpdraftPlus. Deselect the code components when restoring.
|
Backups taken before the backup dir was moved to its own PVC contain a nested
|