【IT資産管理】Snipe-itのインストール
この記事でわかる・できること
- WindowsにLinuxの仮想環境を作成してSnipe-itを構築
この記事の対象者
- Snipe-itを使ってみたい人
動作環境・使用するツールや言語
- Windows Server 2019 Standard
- Ubuntu 22.04
はじめに
IT資産管理では基本的にExcelを使用することが多いと思いますが、情報があちこちに分散して何がどこにあるのかわかりにくくなったり関数やマクロが増えてブラックボックスになったりしがちです。
今回はオープンソースの資産管理ソフトであるSnipe-itをインストールしてみます。
Windows上にLinux環境を構築
前回のzabbix構築時と同様ですがあらためて記載します。
もし途中で失敗して初期化して最初からやり直ししたい場合は
powershellから
wslconfig /u ubuntu
で登録解除してフォルダごと削除します。
WSLの有効化
コントロールパネルの「Windowsの機能の有効化または無効化」から 「Linux用Windowsサブシステム」にチェックを入れて再起動します。
もしこれがエラーになる場合はBIOSで仮想化機能が有効になっていない可能性があります。この場合、DockerやVirtual Boxなど他の仮想化ソフトも使えません。
BIOSから有効化してください。
WSLのインストール
コマンドプロンプトかPowerShellを管理者権限で起動します。
Windowsのバージョンによっては単純に
wsl --install
でインストールされますが、今回の環境であるWindows Server 2019 Standardでは--install自体が使えません。
なおこの環境では関係ありませんが、WSLにはバージョン1と2があって、1だとsystemctlが使えないので可能であれば2にした方がよいです。(デフォルトで1がインストールされる場合もあるようです)
Microsoftの公式サイトからパッケージをダウンロードする必要があります。拡張子がappxになっていて、公式サイトでは色々とコマンドが書いてありますが、環境によってはエラーになって通らない場合もあります。
やることは拡張子をzipにして解凍するだけです。ディストリビューションによるかもしれませんが、appxを解凍するとさらにx64やARM64などのappxに分かれているので、それをさらにzipにして解凍します。
今回はUbuntu22.04のx64を選択しました。
最終的にexeが出てくるので、それを実行することでWSLおよびLinux環境が起動します。
最初にユーザ名とパスワードを聞かれるので設定します。
rootのパスワードも設定しておきましょう。
sudo passwd root
Linuxの設定
DNS
ダウンロード時に名前解決エラーが出るかもしれないので
/etc/resolve.confを編集してNameServerを8.8.8.8(GoogleのDNSサーバ)にしておきましょう。
apacheをインストール
apt update && apt upgrade -y
起動時に警告「Failed to enable APR_TCP_DEFER_ACCEPT」が出るので
/etc/apache2/apache2.conf
を編集して
AcceptFilter http none
AcceptFilter https none
を追記します。
windows環境ではenableにできないオプションなのでnoneにしておくということのようです。
WSL2があるなら
systemctl start apache2
systemctl enable apache2
で自動起動できますが、今回は無いのでとりあえず
service apache2 start
で手動起動しておきます。
mysqlのインストールと設定
apt install mysql-server -y
service mysql start
公式サイトのマニュアルに従ってデータベースを設定しますが、mysql8以降だと権限付与の構文が違うようです。
mysql -u root -p
create database snipeit;
create user 'snipe_user'@'localhost' identified by 'P_ssw0rd';
grant all privileges on snipeit.* to 'snipe_user'@'localhost' with grant option;
flush privileges;
quit
phpのインストール
標準インストール(8.1)でいいです。
最新版をインストールすると拡張機能をインストールするときにエラーになって面倒になります。
apt install -y php
apt install -y php-{opcache,pdo,bcmath,calendar,ctype,fileinfo,ftp,gd,intl,json,ldap,mbstring,mysqli,posix,readline,sockets,bz2,tokenizer,zip,curl,iconv,phar}
その他
使いそうなものをインストールします。
apt install -y openssl curl git wget zip
Snipe-itのインストール
公式サイトのマニュアルに従ってダウンロードします。
git clone https://github.com/snipe/snipe-it /var/www/html/snipe-it
環境設定します。
環境設定ファイルはexampleがあるのでそれをコピーします。
cd /var/www/html/snipe-it
cp .env.example .env
こちらの環境の都合上80番は競合するので3000番を使用しました。
APP_URLでlocalhostを使うと他の端末からアクセスしたときにURLがlocalhostになってうまくいかない(アクセス元の端末が自分自身を見ようとする)ので注意が必要です。
APP_URL=http://【サーバ名】:3000
APP_TIMEZONE='Asia/Tokyo'
APP_LOCALE='ja-JP'
DB_DATABASE=snipeit
DB_USERNAME=snipe_user
DB_PASSWORD=P_ssw0rd
MAIL_HOST=【送信メールサーバ】
MAIL_USERNAME=【メールアドレス】
MAIL_PASSWORD=【パスワード】
MAIL_FROM_ADDR=【メールアドレス】
MAIL_REPLYTO_ADDR=【メールアドレス】
phpの設定
phpの依存関係をインストールします。
コンポーザー(依存関係の管理ツール)をダウンロードしますが、rootで実行しようとすると怒られるので、ここまでrootで実行している場合は先に抜けておきます。
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
アクセス権限を変更しておきます。(不要かもしれませんが念のため)
chmod -R 775 /var/www/html/snipe-it
windows側のipv6を切っておかないと次のコマンドがエラーになる可能性があるようなので切っておいた方がよいでしょう。
コマンドはcomposerがあるディレクトリで実行する必要があります。
警告が出ても無視します。
composer update --no-plugins --no-scripts
composer install --no-dev --prefer-source --no-plugins --no-scripts
アプリキーを生成します。暗号化の処理に関係するようです。
.envのAPP_KEYが自動的に設定されます。
php artisan key:generate
ラジオボタンでYesかNoか聞かれるのでYesを選択します。
apacheの設定
apacheの実行ユーザはデフォルトで「www-data」なので所有者にしておきます。
sudo chown -R www-data:www-data /var/www/html/snipe-it
ここからはrootでもいいです。
su -
設定ファイルを編集します。
デフォルトは「000-default.conf」ですが、無効化して別のファイルを作成します。
cd /etc/apache2/sites-available
a2dissite 000-default.conf
snipeit.conf(名前はなんでもいいです)を作成して下記のように編集します。
serverNameはlocalhostにすると他の端末からアクセスできないのでIPアドレスかFQDNを指定します。
<VirtualHost *:3000>
<Directory /var/www/html/snipe-it/public>
Allow From All
AllowOverride None
Options None
</Directory>
DocumentRoot /var/www/html/snipe-it/public
ServerName 【サーバ名】:3000
# Other directives here
RewriteEngine On
# From public/.htaccess
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</VirtualHost>
ポート番号を変更している場合は
/etc/apache2/ports.conf
を編集しておく必要があります。
apache2を再起動する時にRewriteEngineがエラーにならないよう下記を実行します。
a2enmod rewrite
先ほど作成したsnipeit.confを有効化してapache2を再起動します。
a2ensite snipeit.conf
service apache2 restart
これで
http://【サーバ名】:3000
でブラウザからアクセスできるようになります。
自動起動の方法
タスクスケジューラにトリガ「スタートアップ時」で下記の内容のバッチを登録すればwindowsを起動した時に自動起動します。
wslコマンドのhelpを見ればわかりますが、--でLinux側に対してコマンドを渡すことができます。
wsl -u root -- service mysql start
wsl -u root -- service apache2 start
Snipe-itの操作
画面の挙動が不安定な場合は
php artisan config:cache
service apache2 restart
で直ることが多いです。
資産を登録する場合は必須の列(「Category」と「Model Name」)があるので、インポート時にその列がないとエラーになります。
インポートはコマンドでも実行可能です。画面上のインポートより高速です。
WSLでは/mntでwindowsのフォルダをマウントしているので、例えばC:\temp\sample-assets.csvをインポートする場合は下記のようになります。
cd /var/www/html/snipe-it
php artisan snipeit:import /mnt/c/temp/sample-assets.csv
画面上でインポートする場合はインポートした列とSnipe-itで定義した列との対応づけを行うことになりますが、コマンドの場合は事前に同名の列を定義しておく必要があるようです。(オプションで設定できるかもしれませんが確認はしていません)
画面上で資産を削除すると論理削除扱いになります。
完全に削除する場合は管理画面でのパージが必要になりますが、初期状態では操作できず、「.env」ファイルに以下を追記する必要があります。
ALLOW_DATA_PURGE=true
パージする時は「DELETE」を入力するように画面上で指示されます。
どうしても2次元の表となるとExcelが比較対象になると思いますが、さすがにExcelに比べるとかなり操作しづらいので、そうなるとやはりExcelに戻らざるを得ないようにも思います。
Windows PCの情報を自動収集してSnipe-itに登録するSnipe-PCViewというソフトもあります。systeminfoやpowershellを駆使して自前で作るという手もあると思います。
次回はそのあたりの記事を作成します。