Snipe-IT

資産管理ソフト、Snipe-ITの

など

Ubuntu 22.04(24.04)にSnipe-ITをインストール

Ubuntu 22.04環境下での資産構成システム「Snipe-IT」をインストールする方法についての手順です。
→ Ubuntu 24.04でも動作を確認しました。

環境

前提

さっくりとした手順

  1. Snipe-IT用のDBを作成します。
  2. Snipe-ITをダウンロードします。
  3. Composerでインストールを行います。
  4. Apacheの設定を行います。
  5. Web画面からインストールを行います。

手順

MySQLでDB作成

mysql -u root -p
CREATE DATABASE snipeit character set utf8mb4;
CREATE USER 'snipeit'@'localhost' IDENTIFIED BY 'password';

この'password'は任意のパスワードに変更してください

GRANT ALL ON snipeit.* TO 'snipeit'@'localhost';
flush privileges;
exit
mysql -u snipeit -p
SHOW DATABASES;

snipeitがあることを確認

exit

プログラム配置

cd /home/www-data && pwd

自分の環境に合わせます。

sudo -u www-data git clone https://github.com/snipe/snipe-it snipe-it
cd snipe-it
sudo cp -pi .env.example .env

※教義・信仰に沿ったエディタで編集します。※

APP_URL=http://ドメイン名

snipe-itを動かすドメイン名です。

APP_TIMEZONE='Asia/Tokyo'

タイムゾーンを指定します。

DB_DATABASE=snipeit
DB_USERNAME=snipeit
DB_PASSWORD= 

DB名/ユーザ名/パスワードは上述したDB作成で指定したものです。

修正後、.envを保存します。

composerでsnipe-itインストール

sudo -u www-data composer update --no-plugins --no-scripts
sudo -u www-data composer install --no-dev --prefer-source --no-plugins --no-scripts
sudo -u www-data php artisan key:generate

途中のプロンプトには「yes」を入力します。

バーチャルサイト作成

sudo mkdir -p /var/log/snipeit

※自分の環境に合わせます。

sudo chown -R www-data:www-data /var/log/snipeit
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/snipeit.conf
<VirtualHost *:80>
    # ドメイン名を指定します
    servername 【hoge.example.com】
    # HTTPアクセスを強制的にHTTPSにリダイレクトします
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    # ドメイン名を指定します
    ServerName 【hoge.example.com】
    # 上述したログディレクトリを指定します。
    CustomLog /var/log/snipeit/snipeit_access.log combined
    ErrorLog /var/log/snipeit/snipeit_error.log

    # Snipe-ITのプログラムを配置したディレクトリを指定します。
    DocumentRoot 【/home/www-data/snipe-it/public】
    <Directory 【/home/www-data/snipe-it/public】>
        Options -MultiViews
        AllowOverride All
        Require all granted
    </Directory>

#SSL設定
  SSLEngine on
    Protocols h2 http/1.1

    # SSL証明書を指定します
    SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
    # 秘密鍵を指定します
    SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】

    # 中間証明書が発行元から別ファイルで提供されている場合は、このすぐ下をコメントアウトして中間証明書を指定します
    # SSLCACertificateFile 【/etc/certs/hoge.example.com.CA.crt】

#セキュリティヘッダー付与

    Header always set Strict-Transport-Security "max-age=63072000"
    Header set X-Content-Type-Options "nosniff"
    Header always append X-Frame-Options "SAMEORIGIN"
    Header set X-XSS-Protection "1; mode=block"

</VirtualHost>

# これらのセクションはSSL暗号化強度を高めるための記述です
# </VirtualHost>の外側に書くことにご注意ください

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
__EOF__
sudo a2ensite snipeit.conf
sudo apache2ctl configtest

Syntax OKを確認します

sudo systemctl restart apache2.service

Web画面からの設定確認

ブラウザで

https://設定したURL

にアクセスします。

のような画面が出てきます。「Next:Create Database Tables」をクリックします。

「Next: Create User」をクリックします。

この画面が出てきたら成功です。

Snipe-ITをv6.3.3からv6.3.4にアップグレード。

概要

資産管理システムSnipe-ITのアップグレードを行いました。

前提

以下の環境で動いています。

参考手順

https://snipe-it.readme.io/docs/upgrading

さっくりとした手順

Snipe-ITがインストールされているサーバでコマンド操作を行います。

  1. Snipe-ITのインストールディレクトリに移動します。
  2. バックアップ用の仮ファイルを作成します。
  3. アップグレードスクリプトを実行します。
  4. ブラウザでアップグレードを確認します。

Snipe-ITのインストールディレクトリに移動

cd /home/www-data/snipe-it

自分の環境に合わせます。

仮ファイル作成

sudo -u www-data touch ./storage/app/backup-temp

アップグレード

sudo -u www-data php upgrade.php
スクリプト例
--------------------------------------------------------
WELCOME TO THE SNIPE-IT UPGRADER! 
--------------------------------------------------------

This script will attempt to: 

- validate some very basic .env file settings 
- check your PHP version and extension requirements 
- check directory permissions 
- do a git pull to bring you to the latest version 
- run composer install to get your vendors up to date 
- run migrations to get your schema up to date 
- clear out old cache settings

Launching using branch: master
Found PHP requirements, will check for PHP > 7.4.0 and < 8.2.0
Proceed with upgrade? [Y/n]: 

確認はこの部分だけです。PHPのバージョンを確認した上で「y」を入力します。

(中略)

--------------------------------------------------------
STEP 9: Migrating database:
--------------------------------------------------------

Migrating: 2024_03_18_221612_update_legacy_locale
Migrated:  2024_03_18_221612_update_legacy_locale (154.60ms)

--------------------------------------------------------
STEP 10: Checking for OAuth keys:
--------------------------------------------------------

√ OAuth keys detected. Skipping passport install.

--------------------------------------------------------
STEP 11: Taking application out of maintenance mode:
--------------------------------------------------------

-- Application is now live.

---------------------- FINISHED! -----------------------
All done! Clear your browser cookies and re-login to use 
your upgraded Snipe-IT!
--------------------------------------------------------

ここまで進めばスクリプトは完了です。

アップグレード確認

  1. ブラウザからSnipe-ITにログインし直します。(一度ログアウトします)
  2. Web画面の右下のバージョンが上がっていれば成功です。

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

Snipe-IT のv7からPHP 8.1以降(PHP8.3含む)で動くようになりました。

こちらの方法を用いることでUbuntu24.04でもインストール可能だったことを確認していますが、データ移行はかなりハマりました。

うまくいかなかった手段1:データのバックアップ/リストア機能

Snipe-ITはデータ全体のバックアップとリストア機能を備えていますが、

のため、PHPのバージョンが合わないせいかインポート時にエラー発生。再アクセスしようとすると500エラーが発生。

うまくいかなかった手段2:データの移行とSQLリストア

と同じように、アップロードしたファイルを移行先に持っていき、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:

とあります。上記サイトにある情報を元に、手順化を行います。

【移行先】Snipe-ITを新たにインストールします。

セットアップを行い、管理者アカウントを作成するところまで進めます。

【移行元】→【移行先】各種データを転送します。

mysqldump -h localhost -u snipeit -p --no-tablespaces --single-transaction snipeit > snipeit_db.$(date +%Y%m%d).sql

パスワードは移行元のDBパスワードです。取得したダンプファイルは、任意の安全な方法で移行先に転送します。

移行元先ルートディレクトリ/storage配下にある.envAPP_KEY=base64:移行の文字列を、

移行元のAPP_KEY=base64:のものにそのまま上書きして保存します。

移行元のルートディレクトリ配下

public/uploads
storage/private_uploads

のディレクトリ一式を、同じように移行先に転送した上で、移行先のディレクトリに上書きます。(アクセス権は一致させます)

移行元のルートディレクトリ/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

転送したディレクトリにあるダンプファイルのパスを指定します。

cd /var/www/html/snipe-it && pwd

など、移行先のsnipe-itのルートディレクトリに移動します。

sudo -u www-data php artisan migrate

途中のプロンプトはyesを指定します。

sudo -u www-data php artisan config:clear

Webサービスを再起動し、データ移行を確認します。

sudo systemctl restart apache2.service
systemctl status apache2.service

active(running)を確認します。

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