【Shinobi】OSSな監視カメラシステムを構築してみた話ー前編

「Shinobi」は、RTSP(Real-Time-Streaming-Protocol)プロトコルを利用して一つもしくは複数のネットワークカメラをWEB管理画面から一括で制御することができるオープンソースソフトウェアです。よくあるNVR(ネットワークビデオレコーダー)をこのソフトで構築することができます。

「Shinobi」公式WEBサイト
Shinobi is a Digital Video Recorder – Home

Shinobiを利用したNVRを構築する

Step.01_OSインストール

今回Shinobiをインストールするのは、ProxmoxVE上に作成したVMにUbuntuをインストールしそれをマシンとして使用します。

  • OS:Ubuntu-Server-23.10
  • CPU:6コア
  • RAM:2048MB
  • Storage:32GB

VMの作成と初期設定が終われば、まず最初にパッケージを更新していきます。

sudo apt update -y
sudo apt upgrade -y

Step.02_Shinobiインストール

Shinobiのインストールなどの作業はすべてrootユーザにて行っていきます。
今回は手軽な「The Ninja Way」でShinobiをインストールします。対話形式で質問に答えていくと3分程度でインストールが完了します。

sudo su
sh <(curl -s https://cdn.shinobi.video/installers/shinobi-install.sh)

Q.Install the Development branch?
そのままエンタキーを押すとDefault選択肢の「No」が選択されます。

root@sv-nvr:~# sh <(curl -s https://cdn.shinobi.video/installers/shinobi-install.sh)
sh <(curl -s https://cdn.shinobi.video/installers/shinobi-install.sh)

Opening Install Location : "/home"
Install the Development branch?
(y)es or (N)o? Default : No

Q.Select your OS
数字を入力してインストール行うマシンのOSを選択します。仮想マシンのOSは、Ubuntu-Serverを使用しているので「1」を入力します。

  1. Ubuntu Fast and Touchless(簡単なので今回はこれを選択)
  2. Ubuntu Advanced(高度な設定が行なえます)
  3. Alma Linux 9.2 / Rocky 9 / CentOS 8(RedHat系の簡単バージョン)
  4. CentOS
  5. MacOS
  6. FreeBSD
  7. OpenSUSE
Select your OS
If your OS is not on the list please refer to the docs.
========
1. Ubuntu - Fast and Touchless
2. Ubuntu - Advanced
3. Alma Linux 9.2 / Rocky 9 / CentOS 8 - Fast and Touchless (Red Hat)
4. CentOS
5. MacOS
6. FreeBSD
7. OpenSUSE
========
1

Q.Shinobi – Do you want to temporarily disable IPv6?
IPv6通信が原因でパッケージ更新が失敗してしまう可能性があるため、IPv6通信を一時的にOFFにするかどうか、「y」Yesを選択

Shinobi - Do you want to temporarily disable IPv6?
Sometimes IPv6 causes Ubuntu package updates to fail. Only do this if your machine doesn't rely on IPv6.
(y)es or (N)o
y

これにて一通りShinobiのインストールが完了しました。

Step.03_サイトにアクセスできるか試してみる

Shinobiのインストールが完了すると、サイトにアクセスするためのURLがコンソール画面に表示されています。このURLを同じネットワーク内に属している機器のWEBブラウザに入力してアクセスしてみます。その際に利用するUser名とPasswordも同じく書かれています。
(今回の場合、http://192.168.1.109:8080/superになります)

矢印で示した「Email」と「Password」の部分に表示されていた「admin@shinobi.video」「admin」を入力しログインを行います。

EmailとPasswordを使用してログインを行うとSUPER USER管理画面に移行するので、ここでは通常利用時に使用する別ユーザのログイン情報を作成します。矢印の「+Add」をクリックします。

「+Add」をクリックすると、新規作成するユーザの登録画面が出てくるので、矢印のEmailPasswordPassword Again(パスワード再入力)の3つを埋めて画面下の「Save」をクリックします。

ユーザの追加が完了すると入力したEmailとそのユーザ用に作成されたユーザIDが表示され、追加が完了したことがわかると思います。今回は新規ユーザを作成する方法を紹介しましたが、スーパーユーザのみで運用をする場合は、「Preferences」のタブより既存のアカウントの変更をする方法でも大丈夫です。初期ユーザであるEmail「admin@shinobi.video」Pass「admin」は、どちらの場合でもセキュリティ上の理由により変更することをおすすめいたします。

Step.04_サイトをSSL化する(HTTPS接続)

現在のままだとShinobiとWEBブラウザの通信はHTTPによる暗号化されない通信で行われています。メールアドレスやパスワードの情報やり取りするWEBサイトということですのでローカル運用であってもSSL化しておくに越したことはないでしょう。ということで証明書の更新などはしないものの、HTTPSによる暗号化通信に対応させていきます。

暗号化されていない場合の表示例

手順は公式ドキュメントで公開されている方法を参考に行っていきます。
まず最初にShinobiがインストールされているディレクトリを開きます。もちろんこの作業もroot権限で行います。

cd /home/Shinobi

そこに「ssl」というディレクトリを作成し、使用する証明書を作成します。途中でいくつか対話形式で質問された場合はすべてEnterキーを押して(デフォルト回答)次に進んでください。

mkdir ssl
openssl req -x509 -newkey rsa:4096 -nodes -out ssl/cert.pem -keyout ssl/key.pem -days 99999

証明書の作成が完了したら、「/home/Shinobi/conf.json」をお好きなエディタ開いて以下の内容を書き加えます。今回はnanoを使用しました。

# テキストエディタで開く
nano /home/Shinobi/conf.json
# 追記する内容
"ssl": {
   "key": "./ssl/key.pem",
   "cert": "./ssl/cert.pem"
},
# 追記後のconf.json
{
   "ssl": {
      "key": "./ssl/key.pem",
      "cert": "./ssl/cert.pem"
   },
   "port": 8080,
   "debugLog": false,
   "enableFaceManager": false,
   "videosDir": "__DIR__/videos",
   "passwordType": "sha256",
   "detectorMergePamRegionTriggers": true,
   "wallClockTimestampAsDefault": true,
   "useBetterP2P": true,
   "smtpServerOptions": {
      "allowInsecureAuth": true
   },
   "addStorage": [
      {
         "name": "second",
         "path": "__DIR__/videos2"
      }
   ],
   "db": {
      "host": "127.0.0.1",
      "user": "majesticflame",
      "password": "",
      "database": "ccio",
      "port": 3306
   },
   "mail": {
      "service": "gmail",
      "auth": {
         "user": "your_email@gmail.com",
         "pass": "your_password_or_app_specific_password"
      }
   },
   "cron": {
      "key": "88888888888888888888888888888888888888888888888888888888888"
   },
   "pluginKeys": {}
}

Step.05_外部ストレージを追加する

今回ShinobiのインストールはProxmoxVE上の仮想マシンに行っており、ストレージも32GBと心もとないので外部のNASをカメラ映像の保存先としてVMにマウントして使用していきます。NASは以下のものを使用します。

  • メーカ:BUFFALO
  • シリーズ:TS5410RN
  • 容量:6TB [2TB×4台(RAID5)]
    今回はLVM機能にて500GB分を割り当てています。
  • 共有プロトコル:Smaba

NASをマウントする際に使用するファイルシステムのユーティリティをインストールする。

apt update
apt -y upgrade
apt install cifs-utils

マウントするために「terastation」という名前のディレクトリを作成します。

mkdir /mnt/terastation

NASをマウントする。今回は「shinobi」という名前の共有ディレクトリとユーザーを用意したのでそれらを使用して接続します。

mount -t cifs //<NASのIPアドレス>/shinobi /mnt/terastation -o user=<ユーザー名>,pass=<パスワード>

マウントが完了しましたが、現在のままだと起動するたびに再度コマンドを実行する必要があるので、自動でマウントされるように設定していきます。好きなエディタで「/etc/fstab」を開いて以下の内容を追記します。

# テキストエディタで開く
nano /etc/fstab
# fstabの編集
//<NASのIPアドレス>/shinobi /mnt/terastation cifs username=<ユーザー名>,password=<パスワード>,defaults 0 0

fstabの編集が完了したら一度再起動をしてみて、自動でマウントされるのかを確認しておいてください。単純にマウントされているのかを確認するときは以下のコマンドで確かめることができます。

df -h /mnt/terastation

NASのマウントが完了したらShinobiの設定ファイルに新しいストレージを登録していきます。/home/Shinobi/conf.jsonファイルに下記の内容を追加します。

# nanoでファイルを開く
nano /home/Shinobi/conf.json
# 追加する内容
,
{
   "name": "TeraStation",
   "path": "/mnt/terastation"
}

ストレージの名前は「TeraStation」でパスは「/mnt/terastation」ここはご自身の環境に合わせて設定してください。

# ストレージ追記後のconf.json
{
   "ssl": {
      "key": "./ssl/key.pem",
      "cert": "./ssl/cert.pem"
   },
   "port": 8080,
   "debugLog": false,
   "enableFaceManager": false,
   "videosDir": "__DIR__/videos",
   "passwordType": "sha256",
   "detectorMergePamRegionTriggers": true,
   "wallClockTimestampAsDefault": true,
   "useBetterP2P": true,
   "smtpServerOptions": {
      "allowInsecureAuth": true
   },
   "addStorage": [
      {
         "name": "second",
         "path": "__DIR__/videos2"
      },
      {
         "name": "TeraStation",
         "path": "/mnt/terastation"
      }
   ],
   "db": {
      "host": "127.0.0.1",
      "user": "majesticflame",
      "password": "",
      "database": "ccio",
      "port": 3306
   },
   "mail": {
      "service": "gmail",
      "auth": {
         "user": "your_email@gmail.com",
         "pass": "your_password_or_app_specific_password"
      }
   },
   "cron": {
      "key": "88888888888888888888888888888888888888888888888888888888888"
   },
   "pluginKeys": {}
}

SSL化とストレージの登録が終わったら以下のコマンドでShinobiを再起動し、設定を反映させます。

pm2 restart all

カメラの追加は別記事で紹介しますー

コメントを残す