Upgrading
Replace the application files, keep your data and settings, run one command.
Your configuration, branding, wording and data live outside the application files, which is what makes an upgrade a file replacement rather than a migration project.
| Replaced by an upgrade | Kept |
|---|---|
app/ bootstrap/ config/ cron/ database/ lang/ public/ resources/ routes/ vendor/ bin/ | .env, everything under storage/, and the whole database |
The upgrade
- Back up first. The database and
.envat minimum. See backup and restore. - Read the changelog in the new package for anything that needs action.
- Upload the new files over the old ones. Do not delete the folder first:
that would take
.envandstorage/with it. Do not copy the new package's.env.exampleover your.env. - Apply schema changes:
php bin/migrate.php. It is safe to run again: existing tables, columns and indexes are left alone. If you have no shell, ask support for the statements or run them in phpMyAdmin. - Refresh roles and permissions if the changelog says a permission was
added:
php bin/seed.php. It never touches user accounts or certificates. - Check
/admin/diagnosticsand open one existing certificate. Two minutes of checking is worth more than any amount of confidence.
Delete nothing under storage/. It holds your branding assets,
your certificate background images, your wording overrides and your issued PDFs. An upgrade
that starts with an empty storage/ loses all four.
If a version is skipped
Upgrading straight from an older release to the newest is supported. The schema step is cumulative, so one run brings the database to the current shape whatever version you started from. Read the intervening changelog entries, though: a required action in a version you skipped still applies.
Rolling back
Restore the previous package files and the database backup you took in step 1, together. Rolling back the files alone against an upgraded database is not supported: the newer schema may hold columns the older code does not know about, and the older code may write values the newer constraints reject.
Checking what you are running
The version is in the VERSION file in the package root, and in the footer of
these documentation pages. If the two disagree, an upload was incomplete.