Snipe-IT のv7からPHP 8.1以降(PHP8.3含む)で動くようになりました。
こちらの方法を用いることでUbuntu24.04でもインストール可能だったことを確認していますが、データ移行はかなりハマりました。
うまくいかなかった手段1:データのバックアップ/リストア機能
Snipe-ITはデータ全体のバックアップとリストア機能を備えていますが、
- 移行元:Ubuntu 20.04
- v6
- PHP8.1
- Apache2.4
- MySQL8
- 移行先:Ubuntu 24.04
- v7
- PHP8.3
- Apache2.4
- MySQL8
のため、PHPのバージョンが合わないせいかインポート時にエラー発生。再アクセスしようとすると500エラーが発生。
うまくいかなかった手段2:データの移行とSQLリストア
- firefly-iii
- BookStack
と同じように、アップロードしたファイルを移行先に持っていき、mysqldumpで取得したファイルをインポートすることでうまくいくのではと思いましたが、これでも500エラーが発生。
お手上げ状態だった時に公式ドキュメントを見ると、答えが書いてありました。
うまくいった手段:keyファイルの上書きとマイグレーション
「手段2:データの移行とSQLリストア」に加えて、これが必要でした。
Moving Snipe-ITによると
Moving/migrating Snipe-IT to a new server should be a pretty painless process. You really only have a few things to worry about:
- Your .env
- Your database
- Your uploaded files
- Your OAuth keys
とあります。上記サイトにある情報を元に、手順化を行います。
【移行先】Snipe-ITを新たにインストールします。
セットアップを行い、管理者アカウントを作成するところまで進めます。
【移行元】→【移行先】各種データを転送します。
- SQLのダンプファイル
mysqldump -h localhost -u snipeit -p --no-tablespaces --single-transaction snipeit > snipeit_db.$(date +%Y%m%d).sql
パスワードは移行元のDBパスワードです。取得したダンプファイルは、任意の安全な方法で移行先に転送します。
- .envのAPP_KEY
移行元先ルートディレクトリ/storage
配下にある.env
のAPP_KEY=base64:
移行の文字列を、
移行元のAPP_KEY=base64:
のものにそのまま上書きして保存します。
- ファイルディレクトリ一式の転送
移行元のルートディレクトリ配下
└public/uploads
└storage/private_uploads
のディレクトリ一式を、同じように移行先に転送した上で、移行先のディレクトリに上書きます。(アクセス権は一致させます)
- OAuth key
移行元のルートディレクトリ/storage
配下にある
└oauth-private.key
└oauth-public.key
を、移行先の同じディレクトリにコピーして上書きます。
【移行先】DBのリストアとマイグレーションを行います。
これ以降は移行先のみで作業を行います。
- ダンプファイルのリストア
mysql -h localhost -u snipeit -p snipeit < /path/to/backup/directory/snipeit_db.$(date +%Y%m%d).sql
転送したディレクトリにあるダンプファイルのパスを指定します。
- Snipe-ITのルートディレクトリに移動
cd /var/www/html/snipe-it && pwd
など、移行先のsnipe-itのルートディレクトリに移動します。
- DBマイグレーション
sudo -u www-data php artisan migrate
途中のプロンプトはyesを指定します。
- コンフィグクリア
sudo -u www-data php artisan config:clear
Webサービスを再起動し、データ移行を確認します。
- Webサービス再起動
sudo systemctl restart apache2.service
- Webサービス再起動確認
systemctl status apache2.service
active(running)
を確認します。
- データ移行確認
- 移行先のSnipe-ITをインストールしたURLにアクセスします。
- 移行元のアカウントでログインできることを確認します。
- 移行元と同じデータがあることを確認します。