知人のノードを構築することがあったのでメモ。

やることはかんたんで、以下の2つです。

  • スーパーノード(NIS)を動かす
  • リワードの受け取りが出来るようにする(servant)

基本的にはみなりんさんのブログのとおりにすればOKですが、Ubuntu 16なのでsystemdを使ってるのと、監視等独自のやり方も入れてます:

Contents

環境

  • nis 0.6.93
  • ubuntu 16.04 (Xenial Xerus)
  • さくらVPS 8GBメモリインスタンス(7,776円/月)

なぜさくらのVPSを選んだか

  • 安定性: 同居している他のVMに帯域やリソースを食われることがVPSではよくあるが、さくらはさほど無く安定している
  • CPU性能: 格安VPSは古いCPUなどを使うことでコストを浮かせているが、さくらは演算性能が高め。(NISにはCPU性能はそんなに必要ないが、その他の点でも質が良いことが想像される)
  • 通信に課金されない

0. サーバーの前準備

# パッケージをアップグレードして、unzipをインストール
sudo apt update
sudo apt upgrade
sudo apt install unzip

# ssh設定で、ポート変更 & 秘密鍵認証を設定
sudo vi /etc/ssh/sshd_config 
mkdir .ssh
vi .ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sudo /etc/init.d/ssh restart

# nem SNで使うポートと、sshに使うポート以外を閉じる
# (下記はすべてSNのもの)
sudo ufw default DENY
sudo ufw allow 2828
sudo ufw allow 7880
sudo ufw allow 7881
sudo ufw allow 7890
sudo ufw allow 7891
sudo ufw allow 7778
sudo ufw enable
sudo ufw status

# セキリティアップデートを自動で適用するように設定
sudo apt-get install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

 

1. NISのインストール

# java8のインストール
sudo apt-get -y install apt-file
sudo apt-file update
sudo apt-file search add-apt-repository
sudo apt-get -y install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer
java -version

# nisとサーヴァントのダウンロード&展開
cd
wget http://bob.nem.ninja/nis-0.6.95.tgz
wget http://bob.nem.ninja/servant_0_0_4.zip
tar xzf nis-0.6.95.tgz 
unzip servant_0_0_4.zip 
rm nis-0.6.95.tgz 
rm servant_0_0_4.zip 

# 実行権限を付与
chmod 755 servant/startservant.sh
mv servant package/
mv package/ nemServer/
cd nemServer/

# nisの設定ファイルを書き換える
# nis.bootKeyを、「デリゲートアカウントの委任秘密鍵」に
# nis.bootNameを、任意のノード名にする(あとで登録の際に使う)
vi nis/config.properties 

# 試しに起動。SN登録が済んでいなくてもブロックの同期はできる。
# 初回は同期に1時間程度かかる
./nix.runNis.sh

# 同期が終わったら、以下のようにして走らせたままにしておける
nohup ./nix.runNis.sh &

# servantの設定ファイルを変更
# nem.hostをサーバのIPアドレスに
# servant.keyを、nisと同じ「デリゲートアカウントの委任秘密鍵」にする
cd servant/
vi config.properties 
chmod u+x startservant.sh

# 試しに起動
./startservant.sh

# 問題なければ、以下のようにして走らせたままにしておける
nohup ./startservant.sh &

# nisもservantも以下のコマンドでログを確認できる。
# 安定してきたらnohup.outは削除しても問題ない。
tail -f nohup.out

2. 自動起動設定

再起動した時に自動的にnisとservantが立ち上がるようにします。Ubuntu 16.04ではsystemdでサービス管理をしますので、

/etc/systemd/system/nem-nis.service というファイルを下記のような内容で作ります。
/home/hogehoge/nemServerとなっているところは、自分のnemServerの置き場所にしてください(User、Groupも自分のものに変更が必要):

[Unit]
Description=nem nis

[Service]
ExecStart=/home/hogehoge/nemServer/nix.runNis.sh
Restart=always
Type=simple
User=hogehoge
Group=hogehoge

[Install]
WantedBy=multi-user.target

次は、servant用の自動起動ファイルです。
/etc/systemd/system/nem-servant.service を以下のように作ります。nisのときと同様に自分の環境用に書き換えてください:

[Unit]
Description=nem servant

[Service]
ExecStart=/home/hogehoge/nemServer/servant/startservant.sh
Restart=always
Type=simple
User=hogehoge
Group=hogehoge

[Install]
WantedBy=multi-user.target

そしたら、

sudo systemctl list-unit-files --type=service| grep nem

と打ってnisとservantがサービスとして検知されていることを確認します。

nem-nis.service 
nem-servant.service 

のどちらも表示されてればおkです。あとは以下のコマンドで有効化し、再起動してps auxでプロセスが起動していることを確認します。

sudo systemctl enable nem-nis
sudo systemctl enable nem-servant
sudo systemctl start nem-nis
sudo systemctl status nem-nis
sudo systemctl start nem-servant
sudo systemctl status nem-servant

3. プロセス監視

以前このブログでも書いた方法を使ってnisとservantのプロセスが落ちていないか監視します。

落ちていた場合、1分以内にメールが送られてきます

check_process_to_gmail.py というファイルを以下の内容で作り、上記記事内のsendGmail.pyと同じディレクトリに配置します

FROM_ADDR@gmail.comは送信に使うgmailアドレス、FROM_ADDR_PASSWORDはそのログインパスワード、TO_ADDRはメール送付先アドレスです。:

# coding: utf-8
import subprocess
import sendGmail


if __name__ == '__main__':
    arg = "java"
    cmd = "ps ax | grep " + arg + " | grep -v grep | wc -l"
    from_addr = "FROM_ADDR@gmail.com"
    passwd = "FROM_ADDR_PASSWORD"
    to_addr = "TO_ADDR@gmail.com"
    title = arg + " end."
    body = ""

    try:
        result = subprocess.check_output(cmd, shell=True).decode("utf-8").strip()
        if result != "2":
            body = "Java process count was " + result + "!!!!"
    except Exception as e:
        body = str(e.args)

    if body != "":
        msg = sendGmail.create_message(from_addr, to_addr, title, body)
        sendGmail.send_via_gmail(from_addr, to_addr, passwd, msg)

そしたら、crontabに下記のように設定します。毎分チェックが走る感じです。

*/1 * * * * python3 /home/hogehoge/check_process_to_gmail.py

これでプロセス側の監視はできました。リワードプログラムのチェック通過監視とかトラブルシューティングは次回以降に。

 

 

関連記事

fitbitの睡眠スコアを90弱で安定させる良い睡眠を続ける簡単な方法

m1 ipad pro 12.9 2021のusb-cハブはコレがベスト

Time Machine不要!Macを11.2.3にダウングレードして原神をm1 macbook airでプレイする

MH-Z19CとM5StickCで二酸化炭素濃度モニタリング

【神軽量HMD】Avegant Glyph 改造: 瓶詰堂さんのaltglyphを作った

PC、iPad、Android、switchもドックいらず!あまりに万能なusb-cハブが最強だった

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です