Skip to main content

Snipe-ITのデータを別サーバに移行。(Ubuntu20.04/v6→Ubuntu24.04/v7)

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配下にある.envAPP_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)を確認します。

  • データ移行確認
  1. 移行先のSnipe-ITをインストールしたURLにアクセスします。
  2. 移行元のアカウントでログインできることを確認します。
  3. 移行元と同じデータがあることを確認します。