Snipe-IT 3.xを4.xへアップグレードする(オープンソースIT資産管理ツール)

メモ:

パソコンやプリンタ、その他周辺機器の資産管理ツール Snipe-IT を 3.x から 4.x へアップグレードする手順を確認していきます。公式ドキュメントの「Snipe-IT Documentation - Upgrading」を参考に作業を進めていきます。

Snipe-IT 3.xを4.xへアップグレード

データベースのバックアップ

Snipe-IT には、バックアップ機能もあるので管理者権限のあるユーザでログインし、[管理] - [バックアップ]に移動してバックアップを作成します。

[管理]> [バックアップ]

バックアップ作成ボタンを押下し、バックアップを作成します。

バックアップ作成
バックアップ作成済み

Snipe-ITのインストール先にある「storage/app/backups/」ディレクトリにバックアップファイルが保管されるのでファイルを安全な場所に保管します。

バックアップファイルの作成先

アプリケーションのバックアップ

インストールされている Snipe-IT 3.x をコピーしてバックアップを作成します。ここでは、「/var/www/」にアップグレード前の Snipe-IT がインストールされているものとします。

# cd /var/www/
# mkdir snipe-it-bkup
# cp -R /var/www/snipe-it/ /var/www/snipe-it-bkup

Snipe-IT をメンテナンスモードへ変更する

念のため Snipe-IT をメンテナンスモードへ変更します。Snipe-IT をLaravel の artisan コマンドを使ってメンテナンスモードへ変更します。 Artisan は、Laravelに用意されたコマンドで Laravelのコントローラやモデルの作成、マイグレーションの実行などが行えます。

# cd /var/www/snipe-it/
# php artisan down

キャッシュファイルの削除

次の3つのキャッシュファイルを削除します。 ※私の環境では、「services.php」と「compiled.php」の2つしか存在しませんでした。

  • bootstrap/cache/config.php
  • bootstrap/cache/services.php
  • bootstrap/cache/compiled.php
# rm services.php
# rm compiled.php
# cd /var/www/snipe-it/
# php composer.phar dump
# php artisan cache:clear
# php artisan view:clear
# php artisan config:clear

マニュアルには、ファイルを削除した後に「composer dump」を実行するような記述がありますが、今回の環境にはグローバルなcomposerを用意していないので「php composer.phar」を使っています。

最新のSnipe-ITをダウンロード(アプリケーションの更新)

git pull を使って最新のSnipe-ITへ更新します。

# git pull

パッケージの依存関係を更新

必要なパッケージの依存関係を更新するため composer の install を実行します。

# php composer.phar install --no-dev --prefer-source

コマンドを実行すると次のメッセージが表示され更新に失敗しました。

Loading composer repositories with package information
Installing dependencies from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for aws/aws-sdk-php 3.36.32 -> satisfiable by aws/aws-sdk-php[3.36.32].
    - aws/aws-sdk-php 3.36.32 requires ext-simplexml * -> the requested PHP extension simplexml is missing from your system.
  Problem 2
    - Installation request for tecnickcom/tc-lib-barcode 1.15.6 -> satisfiable by tecnickcom/tc-lib-barcode[1.15.6].
    - tecnickcom/tc-lib-barcode 1.15.6 requires ext-bcmath * -> the requested PHP extension bcmath is missing from your system.
  Problem 3
    - aws/aws-sdk-php-laravel 3.1.0 requires aws/aws-sdk-php ~3.0 -> satisfiable by aws/aws-sdk-php[3.36.32].
    - aws/aws-sdk-php-laravel 3.1.0 requires aws/aws-sdk-php ~3.0 -> satisfiable by aws/aws-sdk-php[3.36.32].
    - aws/aws-sdk-php 3.36.32 requires ext-simplexml * -> the requested PHP extension simplexml is missing from your system.
    - Installation request for aws/aws-sdk-php-laravel 3.1.0 -> satisfiable by aws/aws-sdk-php-laravel[3.1.0].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php.ini
    - /etc/php.d/20-bz2.ini
    - /etc/php.d/20-calendar.ini
    - /etc/php.d/20-ctype.ini
    - /etc/php.d/20-curl.ini
    - /etc/php.d/20-exif.ini
    - /etc/php.d/20-fileinfo.ini
    - /etc/php.d/20-ftp.ini
    - /etc/php.d/20-gd.ini
    - /etc/php.d/20-gettext.ini
    - /etc/php.d/20-iconv.ini
    - /etc/php.d/20-json.ini
    - /etc/php.d/20-mbstring.ini
    - /etc/php.d/20-mcrypt.ini
    - /etc/php.d/20-mysqlnd.ini
    - /etc/php.d/20-pdo.ini
    - /etc/php.d/20-phar.ini
    - /etc/php.d/20-sockets.ini
    - /etc/php.d/20-sqlite3.ini
    - /etc/php.d/20-tokenizer.ini
    - /etc/php.d/30-mysqli.ini
    - /etc/php.d/30-pdo_mysql.ini
    - /etc/php.d/30-pdo_sqlite.ini
    - /etc/php.d/40-zip.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

「Problem 1~3」が出力され何やら不足していることがわかります。

次のコマンドを実行して、不足している拡張機能をインストールします。

# yum -y --enablerepo=remi-php70 install php-xml
# yum -y --enablerepo=remi-php70 install php-bcmath

もう一度 composer の install を実行します。

# php composer.phar install --no-dev --prefer-source
Loading composer repositories with package information
Installing dependencies from lock file
Package operations: 31 installs, 47 updates, 3 removals
  - Removing misterphilip/maintenance-mode (1.0.2)
  - Removing classpreloader/classpreloader (3.0.0)
...

今度は正しく更新されたので composer dump-autoloadを実行し、Composerに登録します。

# php composer.phar dump-autoload
Generating optimized autoload files

環境設定とパーミッションの確認

.env ファイルに変更箇所があれば修正します。また、ファイルやディレクトリのパーミッションが正しく設定されているか確認します。私の場合は、特に変更点が無かったためそのまま使用しています。

※新規インストール時に設定したパーミッションは、次のように設定しています。

# chown -R nginx:nginx /var/www/snipe-it
# chmod -R 755 storage
# chmod -R 755 storage/private_uploads
# chmod -R 755 public/uploads

データベースのマイグレート

Snipe-IT をLaravel の artisan コマンドを使ってデータベースを更新します。「コマンドを実行しますか?」と聞かれるので「yes」と入力してデータベースを更新します。

# php artisan migrate
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 >

メンテナンスモードの終了

更新作業が完了したので、メンテナンスモードから抜けます。

# php artisan up

ブラウザから接続して、ログイン画面が表示されることを確認します。

確認時に次のような「Whoops」というエラー画面が表示されたのですが、Cookieに情報が残っている可能性があるとのことでしたのでブラウザを終了して、情報をクリアした状態で再度接続し正しくアップグレードできたことを確認できました。

Whoops エラー

以上で Snipe-IT のアップグレードが完了しました。