firefly-iiiのアップグレードを試みたところ、失敗。その記録と原因についてメモを残します。
環境
- Ubuntu 24.04
- Apache 2.4
- MySQL 8.0.39
- PHP 8.3.16
- Composer 2.7.9
- firefly-iii 6.1.5
- → 6.2.5にアップグレードを試みた
試した手順
- DBのバックアップを取得します。
- 最新版のパッケージをダウンロードして展開します。
- 利用中のfirefly-iiiを待避させます。
- 待避させたfirefly-iiiからファイル/ディレクトリをコピーします。
- アップグレードを行います。(失敗)
DBのバックアップ
- 作業ディレクトリに移動
cd /hoge && pwd
任意の作業ディレクトリに移動します。
- DBバックアップ
mysqldump --no-tablespaces --single-transaction -u username -h localhost -p database_name > DB_Backup.$(date +%Y%m%d).sql
usename
、database_name
、及びDB_Backup
は自分の環境に合わせます。
- バックアップ確認
head -100 DB_Backup.$(date +%Y%m%d).sql
バックアップができていること、平文でSQLが読めることを確認します。
パッケージ取得
- 作業ディレクトリに移動
cd /hoge && pwd
任意の作業ディレクトリに移動します。
- wget
wget https://github.com/firefly-iii/firefly-iii/releases/download/v6.2.5/FireflyIII-v6.2.5.zip
- ファイル所有者変更
sudo chown www-data:www-data FireflyIII-v6.2.5.zip
- ファイル確認
ls -l FireflyIII-v6.2.5.zip
ファイルがあること、所有者がWebアプリ実行ユーザ(www-data)であることを確認します。
アップデート前のfirefly-iiiを待避
- ディレクトリごと待避
sudo mv /home/www-data/firefly-iii /home/www-data/firefly-iii.$(date +%Y%m%d)
自分の環境に合わせます。firefly-iiiがインストールされているディレクトリをまるごと移動します。
- 待避確認
ls -ld /home/www-data/firefly-iii
→ ディレクトリが無いこと
ls -ld /home/www-data/firefly-iii.$(date +%Y%m%d)
→ ディレクトリがあること
アップデートパッケージの解凍と配置
- 解凍
sudo -u www-data unzip -o /hoge/FireflyIII-v6.2.5.zip -x "storage/*" -d /home/www-data/firefly-iii
/hoge
は先ほど取得したパッケージがある場所です。アップデート前と同じ位置、名前に解凍します。
- 解凍・配置確認
ls -l /home/www-data/firefly-iii
ファイル一式があり、www-dataが所有者になっていること
アップデート前のファイル・ディレクトリをコピー
- 待避させたディレクトリに移動
cd /home/www-data/firefly-iii.$(date +%Y%m%d) && pwd
自分の環境に合わせます。
.env
ファイルをコピー
sudo -u www-data cp -pi .env /home/www-data/firefly-iii/.env
コピー先のディレクトリは自分の環境に合わせます。
.env
ファイルコピー確認
ls -l /home/www-data/firefly-iii/.env
ファイルがあることを確認します。
- storageディレクトリのコピー
sudo -u www-data cp -pir storage /home/www-data/firefly-iii/
- storageディレクトリのコピー確認
ls -l /home/www-data/firefly-iii/storage
ファイルやディレクトリがあることを確認します。
アップグレード → 失敗
- アップグレード後のディレクトリに移動
cd /home/www-data/firefly-iii && pwd
先ほど展開したディレクトリに移動します。
- DBマイグレーション
sudo -u www-data php artisan migrate --seed
ここで失敗。以下のエラーが出ました。
Composer detected issues in your platform:
Your Composer dependencies require a PHP version ">= 8.4.0". You are running 8.3.16.
PHP Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.4.0". You are running 8.3.16. in /home/www-data/firefly-iii/vendor/composer/platform_check.php on line 22
そのため、切り戻しを行います。
失敗したため切り戻し
- Webコンテンツ配置ディレクトリに移動
cd /home/www-data && pwd
自分の環境に合わせます。
- 展開したディレクトリ削除
sudo rm -rf /home/www-data/firefly-iii
- ディレクトリ退避から復旧
sudo mv /home/www-data/firefly-iii.$(date +%Y%m%d) /home/www-data/firefly-iii
- ディレクトリ復旧確認
ls -l /home/www-data/firefly-iii
ファイル一式があり、www-dataが所有者になっていること
切り戻し反映・確認
- Webサービス再起動
sudo systemctl restart apache2.service
- Webサービス再起動確認
systemctl status apache2.service
- 霧もろし確認
- アップデートを行ったfirefly-iiiサイトにブラウザでアクセスします。
- ログインできることを確認します。
- バージョンが上がっていることを確認します。
- 登録操作などができることを確認します。
失敗の要因
これは明白にして単純です。
リリースノートを確認していなかった
に尽きます。LAMP環境で動くからこそ、ミドルウェアのバージョン(この場合はPHP)の必要とするバージョンを確認していなかった自分の落ち度です。
v6.2.0のリリースノートに
Firefly III requires PHP 8.4.
と書かれていることを見落としていました。
切り戻しが迅速だった要因
「切り戻しを前提としていた手順」に助けられました。
- 作業前にDBのバックアップ
- 動いていた環境を退避
させる二段構えにより、迅速な切り戻しが可能になりました。
結局のところ、
「自分の確認不足」から来るミスを「自分の確認不足を想定した手順」でカバーした形です。