インストール手順

環境およびファイルの用意

以下の環境およびファイルを用意してください。

  1. サーバ(ノードとして起動する分のサーバをご用意ください)。
    以下推奨スペックになります。
    • CPU:4コア以上
    • メモリ:8GB以上
    • ハードディス:250GB以上
    • ノード数:4台以上
    • ※上記スペックで 100tx/sec 前後のトランザクション処理になります。
  2. mijin ファイルをご用意ください。
    テックビューロから以下ファイルを送付いたします。
    • mijin_install_files フォルダ内
    • serverjars ... mijin プログラムファイル
    • nemesis-mijinnet.bin ... 最初にブロックを生成するアカウントの設定ファイル(編集不可)
    • config-user.properties ... ノードごとの設定ファイル(編集可)
    • peers-config_mijinnet.json ... 各ノードを接続する設定ファイル(編集可)
    • startnem.sh ... mijin 起動ファイル(編集不可)
    • nemesis-accounts.txt
    • nemesis-mijinnet.bin に設定されているアカウントになります。アドレス、公開鍵、秘密鍵の情報になりますので、取り扱いに注意ください

サーバ環境の設定

mijin を起動するために各サーバに以下設定を行います。

  • アカウント(mijin)の作成
  • 必要ソフトウエア(Java8、Screen)のインストール
  • ポートの設定

mijin の現バージョンはJava8で作成されており、mijin を起動するには Java8が必要です。またサーバ再起動時に自動スタートするために、Screenを使用しております。各ポートはデフォルト 7895、7778 を使用していますが、他のポートを使用いただいても構いません。その場合、あとで記載する config-user.properties 、peers-config_mijinnet.json のポート箇所に、設定したポートを記載ください。

アカウント(mijin)の作成

// 以下、各サーバにログイン
$ ssh root@host
// アカウント作成
$ adduser mijin
// パスワード設定
$ passwd mijin
※同じパスワードを2度入れる

必要ソフトウエア(Java8、Screen)のインストール

// 以下 yum にて Java8 と Screenをインストール
$ yum install -y java-1.8.0
$ yum install -y screen

ポートの設定

// 以下ポートの設定
// 7778 は WebSocket用
// 7895 は mijin 用
$ systemctl start firewalld.service
$ firewall-cmd --permanent --add-port=7778/tcp
$ firewall-cmd --permanent --add-port=7895/tcp
$ firewall-cmd --reload
$ systemctl enable firewalld.service

mijin インストールと起動

mijin のインストールは、下記ステップになります。

  1. config-user.properties の編集
  2. peers-config_mijinnet.json の編集
  3. サーバにファイルをアップロード
  4. mijin の起動
  5. mijin の起動確認
  6. ファイルの削除

上記を各サーバごとに実施します。
以下手順になります。

1. config-user.properties の編集

各ノードごとの設定ファイルになります。起動時に必要な下記について設定を行います。ノードとして起動させるサーバ分、用意します。

nem.host:ノードの host(19行目あたり)

ノードとして設定するサーバの host を記入ください。

// 記入例:
nem.host = 52.242.27.206

nis.bootName:ノードの名(46行目あたり)

ノード名を記載ください。ノード名は任意名で構いません。

// 記入例:
nis.bootName = mijin01

nis.bootKey:ノードの bootKey(45行目あたり)

ノードとして設定するアカウントの秘密鍵を記載ください。ノードにはそれぞれアカウントを設定し起動します。nemesis-accounts.txt に記載のハーベストアカウントのいずれかを使用ください。

// 記入例:
nis.bootKey = 7616b36c518b2bc0454821qqc4a94887112f3a6fb7564a58abbe87c8aca7032c

nis.additionalLocalIps:秘密鍵が流れるAPIの使用制限(101行目あたり)

秘密鍵が通信に流れるAPIの使用制限を、通信元のIPアドレスにて行います。制限をかけない(どのIPアドレスからでもOKとする場合)は、下記のようにワイルドカードにて設定ください。

// 記入例:
nis.additionalLocalIps = *.*.*.*

2. peers-config_mijinnet.json の編集

ノード間で直接接続を行うための設定ファイルになります。ブロードキャストし合うノード分、記載します。

  • host ... nem.host と host を記載ください。
  • name ... nis.bootName と同様のノード名を記載ください。
  • public-key ... nis.bootKey と対になる公開鍵を記載ください。
{
  "_info": "this file contains a list of all trusted peers and can be shared",
  "knownPeers": [
    {
      "endpoint": {
        "host": "27.133.152.53",
        "port": 7895,
        "protocol": "http"
      },
      "identity": {
        "name": "mijin01",
        "public-key": "c48850b863c2fe13066a8aed308da9b4d897e62ef8d81ae5bc04ff85bfb31a74"
      }
    }
    {
      "endpoint": {
        "host": "59.106.214.132",
        "port": 7895,
        "protocol": "http"
      },
      "identity": {
        "name": "mijin02",
        "public-key": "029111bc1c9903f094d207cfb55e97733e7e2a0044b1869a28f3e4705219b777"
      }
    }
  ]
}

3. サーバにファイルをアップロード

上記設定したファイルを含め、以下ファイルを /home/mijin/ 配下に配置します。

  • serverjars.tgz
  • nemesis-mijinnet.bin
  • config-user.properties
  • peers-config_mijinnet.json
  • startnem.sh

下記 scp コマンド等にてファイル一式をアップロードします。

$ scp -P 22 ./* mijin@host:/home/mijin/

4. mijin の起動

作成したアカウント mijin でサーバにログインします。ファイルを解凍し、cron tab を設定します。cron tab はサーバ再起動時に、mijin を自動で起動するための設定になります。

// 実行権限の付与
$ chmod +x startnem.sh

// ファイル解凍
$ tar zxvf serverjars.tgz

// cron tabの設定
$ echo "@reboot screen -S mijin -d -m /home/mijin/startnem.sh" | sort - | uniq - | crontab -

// cron tabの確認
$ crontab -l

以下にて mijin を起動します。

$ screen -S mijin -d -m /home/mijin/startnem.sh

起動後、以下ファイルおよびフォルダが作成されます。

  • gc.txt
  • nemフォルダ ... ログファイルおよび H2DB ファイルが生成されます。

5. mijin の起動確認

起動させた mijin の状態を確認します。

/heartbeat

/status

以下コマンドにて mijin API をコールする形でも、ノードの稼働状況は確認できます。
jq コマンドを使用すると、返却された json を整形して確認できます。
https://stedolan.github.io/jq/

// ノードの稼働状況確認
$ curl http://host:7895/status

// jq を使用して json をパース
$ curl http://host:7895/status | jq .

6. ファイルの削除

ノードの起動が確認されたら、以下ファイルを削除します。削除前に各ファイルをローカル環境にバックアップしてください。

  • config-user.properties
  • serverjars.tgz
  • nemesis-mijinnet.bin

config-user.properties 内にはノードの秘密鍵が含まれます。config-user.properties を削除することで、仮にノードに不正ログインされたとしても、ノードのアカウント情報を取得できない状態を作ります。

ノードの設定を変更したい場合は、ローカル環境にバックアップした config-user.properties を再度アップロードし、mijin の再起動を行います。

よりセキュアにするために

初期アカウントの変更について

各ノードごとに設定するアカウントをテックビューロを含めた第三者が知り得ない状態にするために、少し面倒ですが、起動している mijin のノードの起動アカウントの変更および初期アカウントから別アカウントに xem を送金して企業のみが管理するプライベートブロックチェーン環境にします。

全体の大まかな流れは下記のようになります。

  1. アカウントを新規に作成
  2. 作成したアカウントに初期アカウントが所持するすべての xem を送金
  3. ノードを停止し、xemを送金したアカウントを起動アカウントに変更し mijin を起動
  4. 初期アカウントで起動しているノードを1台だけ残して、他のノードはすべて新規アカウントに変更
  5. ※ 新規アカウントに importance が反映されるまで 1日待つ
  6. 新規アカウントに importance が反映後、初期アカウントのノードを新規アカウントに変更する

1. アカウントを生成

以下起動中のノードの host からアカウントを発行してください。アカウントはいくつでも発行できますが、1度発行されたアカウントのアドレス・公開鍵・秘密鍵情報は mijin 上には保持されませんので、手元の環境にメモするなどしておいてください。

/account/generate

2. 初期アカウントの所持 xem を確認

初期アカウント(mijin起動で使用しているアカウント以外のアカウント)の所持 xem を確認します。

/account/mosaic/owned

3. 初期アカウントから作成したアカウントに xem を送金

初期アカウントから作成したアカウントに所持 xem を送金します。

/transaction/announce

4. 送金がブロックチェーンに書き込まれたことを確認

アカウントへの送金されたことおよび初期アカウントから xem がなくなったことを確認します。

/account/mosaic/owned

5. config-user.properties を編集

以下箇所を編集します。

// 45行目あたり
// xem を送金したアカウントの秘密鍵を記入 nis.bootKey = 56f3366cce8c643cbfbd4884ad9ed231e58915e64998ed667edcaf2ad05816cd

6. peers-config_mijinnet.json を編集

起動しているノードからファイルをダウンロードし、変更するノードの public-key に nis.bootKey に設定したアカウントの公開鍵を記入します。

{
	"_info": "this file contains a list of all trusted peers and can be shared",
	"knownPeers": [
		{
			"endpoint": {
				"host": "27.133.131.154",
				"port": 7895,
				"protocol": "http"
			},
			"identity": {
				"name": "mijin01",
				"public-key": "442159366e13c9b899e53d4f0b64e6139910a6679fc30d6941e234de13f587e5"
			}
		}
		{
			"endpoint": {
				"host": "27.133.154.6",
				"port": 7895,
				"protocol": "http"
			},
			"identity": {
				"name": "mijin02",
				"public-key": "f7321ebe78dc09dac511893984ac1e194dfcffa3c3c3224192156ee94c304780"
			}
		}
		.
		.
		.
	]
}
					

7. ファイルをアップロード・mijin を再起動

編集した下記ファイルおよび nemesis-mijinnet.bin ファイルをアカウントを変更するノードにアップロードし、mijin を再起動します。

  • peers-config_mijinnet.json
  • config-user.properties
  • nemesis-mijinnet.bin

再起動は以下手順で行います。

// java のプロセスを取得
$ ps aux | grep java

root 14925 2.0 82.3 8315404 837156 pts/2 Sl+ 18:20 4:53 java -Xms6G -Xmx6G -XX:+PrintGC -XX:+PrintGCDateStamps -Xloggc:./gc.txt -cp .:./serverjars/* org.nem.deploy.CommonStarter
root 15227 0.0 0.0 9032 660 pts/0 S+ 22:20 0:00 grep --color=auto java
上記の場合、14925 が該当

// プロセス番号を指定し停止
$ kill -9 プロセス番号

// mijin 再起動
$ screen -S mijin -d -m /home/mijin/startnem.sh

8. mijin の起動確認

起動させた mijin の状態を確認します。再起動時に、保持しているハッシュDBを読み取りメモリにアクティブなアドレス等を記録するため、起動に時間がかかる(数分ほど)場合があります。

/heartbeat

/status

9. ファイルを削除

起動した mijin 上にあるノードから下記ファイルをバックアップを取り削除します。

  • config-user.properties
  • nemesis-mijinnet.bin

10. 同様の手順を他のノードにも実施

上記 1.〜9. の手順を各ノードに対して実施します(1台だけ初期起動のアカウントを残します)。

11. 設定したアカウントの importances を確認

新規に設定したアカウントの重要度(ブロックをチェーンにつなぐための権限)を確認します。新規で作成したアカウントに xem を送金後、重要度に反映されるまでは 1日かかります。

/account/importances

12. 残りのノードを新規アカウントに移行

新規で設定したアカウントの "importance" の isSet が 1 になったら残りのノードを新規アカウントに変更します。変更手順は上記と同様です。

残っている初期アカウントから他のアカウントへ xem 送金

初期アカウントで、xem を所持したままになっているアカウントについて、他のアカウントへ xem を送金し、初期アカウントから xem をなくします。それにより、初期アカウントの不正利用を防ぎます。

  • 初期アカウントから xem をなくす
  • アカウントの変更後トランザクション処理が正常に行われているかどうかの確認

以下手順になります。

1. 送金先アカウントを生成

/account/generate

2. 送金元アカウントの所持 xem を確認

送金元アカウントの所持 xem を確認します。

/account/mosaic/owned

3. 作成したアカウントに xem を送金

/transaction/announce

4. アカウントの所持 xem を確認

アカウントの所持 xem を確認し送金されたことを確認します。

/account/mosaic/owned

上記が完了すると、テックビューロから最初にお渡しした nemesis-accounts.txt のアカウントから xem がなくなり、初期アカウントはただのトランザクションを生成できないただのアカウントになります。

ノードの追加

最初に稼働させた mijin と同様の手順で設定を行い、mijin を起動させます。peers-config_mijinnet.json には、最初に記載したノードの情報に加え、今回追加するノードの情報を記載します。すでに起動中のノードの peers-config_mijinnet.json の変更は不要です。互いに認識しあい、新規で追加するノードが起動中のノードに追加されます。

ノード追加手順

(1) サーバを用意し、mijin 起動に以下必要ファイルを配置

  • config-user.properties … 各ノード単位の設定ファイル
  • nemesis-mijinnet.bin … マスターアカウント設定ファイル
  • peers-config_mijinnet.json … ノード間をつなぐ設定ファイル
  • serverjars.tgz … mijin ファイル
  • startnem.sh … mijin 起動ファイル

(2) 「config-user.properties」に以下を記載

  • ノードとして設定するアカウントの秘密鍵
  • そのノード自身のhost
  • 各ノードの名前(任意)

(3) 「peers-config_mijinnet.json」に以下を記載

  • 自身のノードの host と 起動アカウントの公開鍵
  • 相手(1つだけでも可)の host と起動アカウントの公開鍵

(4) mijin 起動

たとえば、3台のノードがつながっていて1台追加する場合、追加するノードの peers-config_mijinnet.json には、自身のhostと相手のhost(3台分は不要、1台だけで可)を追加すれば、ノード間で交信しあい、新規で追加されたノードを認識します。


改訂履歴

  • 2017年12月6日:第3版(よりセキュアに使うためにの手順変更)
  • 2017年8月2日:第2版
  • 2017年8月1日:初版

レスポンス

左側の説明内でボタンクリック時に、mijin からのレスポンス結果を以下に表示します。