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

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

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

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

環境

  • 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

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

 

 

関連記事

echo spotでスマホを持ってない人とテレビ電話をする方法

MiSTEL BAROCCO MD650Lをbluetooth接続にしてmobilityを爆上げ

MiSTEL BAROCCO MD650Lを持ち運びやすくするマグネット足を作った

MiSTEL BAROCCO MD650Lレビュー: 左右分離型ロープロのメカニカルキーボード

workaround for a Orange PI problem USB WiFi with Armbian cannot be found from network

中華系防水bluetoothイヤホンでちゃんと防水できたのは1社だけだった

コメント

コメントを返信する

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