diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 33 |
1 files changed, 24 insertions, 9 deletions
@@ -2,11 +2,17 @@ Update a [Firefly III](https://www.firefly-iii.org/) instance on Debian. -Installs the latest (or a pinned) release via Composer, carries over your -`.env`, uploads, exports, and SQLite database, runs the migrations and -upgrade steps, then swaps the new version in and restarts Apache. A -timestamped database backup is taken before anything is touched, and -`--restore` rolls back to the previous version. +Downloads the latest (or a pinned) release, carries over your `.env`, uploads, +exports, and SQLite database, runs the migrations and upgrade steps, then swaps +the new version in and restarts Apache. A timestamped database backup is taken +before anything is touched, and `--restore` rolls back to the previous version. + +Installs from the **official GitHub release zip**, not `composer +create-project`. The composer/Packagist dist ships source only and lacks the +compiled frontend bundles, which leaves the UI broken (no graphs, 404s on +`/v1/js/app.js`). The release zip is prebuilt. + +Requires `curl`, `unzip`, `php`, and `sqlite3` on the host. ## Usage @@ -14,7 +20,7 @@ Run as root (it chowns files and restarts Apache): ```bash sudo ./firefly-update # update to latest release -sudo ./firefly-update -v 6.1.0 # update to a specific tag +sudo ./firefly-update -v 6.6.5 # update to a specific tag (v-prefix optional) sudo ./firefly-update --restore # roll back to the previous version sudo ./firefly-update --help ``` @@ -36,9 +42,18 @@ WORKDIR=/srv INSTANCE=ff sudo -E ./firefly-update ## Notes - Assumes an SQLite database at `storage/database/database.sqlite`. -- `set -euo pipefail`: any failed step aborts before the live instance is - swapped, so a broken build never replaces a working one. -- The previous version is kept at `$INSTANCE-old` until the next run. +- `set -euo pipefail` plus an `ERR` trap: any failed step aborts before the + live instance is swapped (a broken build never replaces a working one) and + prints the failing line, so a partial run cannot masquerade as success. +- Before migrating, the script reconciles Laravel Passport's OAuth migrations: + Passport renames its migration files between versions, so a carried-over DB + has the `oauth_*` tables while the new filenames look pending, and a naive + `migrate` would fail trying to recreate existing tables. The script records + those already-present tables as migrated and lets genuinely-missing ones be + created. +- The previous version is kept at `$INSTANCE-old` until the next run; + `--restore` swaps it back and overlays the newest DB backup. A failed restore + leaves the broken version at `$INSTANCE-broken`. ## License |
