Nekoniumのパブリックノードを立ててみよう その1

##はじめに
Ethereumフォークで国産の仮想通貨「[Nekonium](https://nekonium.github.io/)」のパブリックノードを構築する方法を記載します。

##手順

###サーバーの準備

####ドメインの取得
ドメイン取得代行サイトで任意のドメインを取得してください。
今回は[バリュードメイン](https://www.value-domain.com/)で「nekonium.site」というドメインを取得しました。
![6f8a0b14a8ebedac1a4f06f79d869909.png](https://qiita-image-store.s3.amazonaws.com/0/232554/080c5aac-9275-c885-33aa-9b42a145f24a.png)

####サーバーの用意
Linuxサーバーを立ち上げます。
今回は[AWS](https://aws.amazon.com/jp/)の「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」を選びました。
インスタンスタイプはとりあえず「t2.micro」にしておきます。
![6c6f74d298db3a429170ea318c1c0f79.png](https://qiita-image-store.s3.amazonaws.com/0/232554/e45c0f9c-5f58-ad12-dfc2-507d828aa526.png)
---
![7d7f92cd7b6508e061f3359b66d8f7e7.png](https://qiita-image-store.s3.amazonaws.com/0/232554/a4fd7b51-45b9-1a2b-1f5a-ef01ba205e87.png)

####固定IPの取得
インスタンスが立ち上がったら、「Elastic IP」でグローバル固定IPを取得します。
今回は「13.250.141.96」が割り当てられました。
![25c3837c292cd288d1cb3764e591a67e.png](https://qiita-image-store.s3.amazonaws.com/0/232554/84b3515f-bc3e-62ba-41bb-494970437a13.png)
---
![ce05ba10abc1663ecb5ca215c4f42ade.png](https://qiita-image-store.s3.amazonaws.com/0/232554/bc9dde8a-aa86-c55f-1d00-d418cebaf93f.png)

####固定IPを関連付ける
「アクション」から、先ほど作成したインスタンスにグローバル固定IPを割り当てます。
![fecc0f17c15c79323bdf10b356659bb0.png](https://qiita-image-store.s3.amazonaws.com/0/232554/7a93197c-3a26-1b0d-b08e-e79bb89c6887.png)
---
![2149ad15b781c83db22d304fec96cbf9.png](https://qiita-image-store.s3.amazonaws.com/0/232554/a2e7e414-ebb4-b44b-e61b-cd9cffac1434.png)

####ファイアウォールの設定
「セキュリティグループ」のインバウンド設定から、今回使用するTCPの「8293」ポートを空けておきます。
![fc94efd8a8d97c5f51fcd88aeade4e5c.png](https://qiita-image-store.s3.amazonaws.com/0/232554/5d20e81b-164c-9cd9-d236-be30ae1c1a8b.png)
---
![7741084b046e610c2c866f6dc7e34294.png](https://qiita-image-store.s3.amazonaws.com/0/232554/c5d9b6cd-7cda-32be-6ef1-bed37be85f39.png)

####DNSの設定
今回割り当てられたグローバル固定IPをドメイン名に紐付けます。
バリュードメインのDNS設定からAレコードのワイルドカードを「13.250.141.96」に設定します。
![5eb1c556527577746cc330d68a304589.png](https://qiita-image-store.s3.amazonaws.com/0/232554/5bbfdd27-0b78-e0aa-5923-f8b2b4a79cb3.png)

###サーバーの設定

####インスタンスへの接続
Windowsの場合は「PuTTY」を使用します。詳しい接続方法はAWSのページを参照してください。
[Linux インスタンスへの接続 - AWS Documentation]
(https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstances.html?icmpid=docs_ec2_console)
![bf4285edd2c350ebf6f0f76b4dfa7fd7.png](https://qiita-image-store.s3.amazonaws.com/0/232554/eae28a22-ad7f-819c-83c2-58b3d24d370e.png)
---
![ab7c4cc2774f32febd5961a870c946ef.png](https://qiita-image-store.s3.amazonaws.com/0/232554/498389e9-e2fb-2e26-78c6-671917456d2f.png)

####Ubuntuのアップデート
ログインができたら、まずUbuntuをアップデートして再起動します。
`sudo apt-get update`
`sudo apt-get dist-upgrade`
`sudo reboot`

####build-essentialのインストール
下記コマンドを実行してbuild-essentialをインストールします。
`sudo apt-get install build-essential make`

####Goのインストール
下記コマンドを実行してGoをインストールします。
`wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz`
`sudo tar -xvf go1.9.2.linux-amd64.tar.gz`
`sudo mv go /usr/local`
`export GOROOT=/usr/local/go`
`export PATH=$GOPATH/bin:$GOROOT/bin:$PATH`
`export GOPATH=$HOME/go`
`go version` と入力して`go version go1.9.2 linux/amd64`と出力されればインストール成功です。

####gnekoniumのインストール
下記コマンドを実行してgnekoniumをインストールします。
`mkdir nekonium`
`cd nekonium`
`git clone https://github.com/nekonium/go-nekonium`
※もしgitがインストールされていない場合は、`sudo apt-get install git`を実行して下さい。
`cd go-nekonium`
`export GOROOT=/usr/local/go`
`export PATH=$GOPATH/bin:$GOROOT/bin:$PATH`
`export GOPATH=$HOME/go`
`make gnekonium`

####gnekoniumの初回起動
#####ブロックチェーンの同期
下記コマンドを実行してブロックチェーンの同期を行います。
`build/bin/gnekonium --fast --cache=256 console`
少し時間がかかります。(15分くらい)
※注意 `--cache=512`だとインスタンスのメモリ容量が足りず失敗します。
#####同期終了
`Fast sync complete, auto disabling`と表示されれば同期が成功したことになります。

####パブリックノードの開始
PuTTYでセッションを開きなおして下記コマンドを実行するとパブリックノードが開始されます。
`cd nekonium/go-nekonium`
`build/bin/gnekonium -rpc --rpcaddr 0.0.0.0 --rpcport 8293`

####動作確認
ノードが動作しているか確認するには別セッションで下記コマンドを実行します。
`curl -s -X POST --data '{"jsonrpc":"2.0","id":0,"method":"eth_getBalance","params":["アドレス","latest"]}'  http://nekonium.site:8293/`
`アドレス`にはNekoniumのアカウントを入力して下さい。
16進数でアカウントの残高が表示されれば無事動作していることになります。

####セッションを維持するには
現状のままだとセッションが途切れたりPuTTYを終了したりするとgnekoniumも終了してしまいます。
解決方法としては下記コマンドで仮想ターミナルを使用してパブリックノードを開始します。
`tmux new -s gnekonium`
`cd nekonium/go-nekonium`
`build/bin/gnekonium -rpc --rpcaddr 0.0.0.0 --rpcport 8293`
Ctrl+bのあとにdを押すと元の画面に戻りますが、このままPuTTYを終了してもgnekoniumの実行を持続することができます。

##おわりに
これでパブリックノードの構築が完了しました。
他のドメインレジスタやVPSサービス、Linuxディストリビューションを使用する際は適宜読み替えて下さい。
次回はSSL通信に対応したNekoniumのパブリックノードの構築方法を投稿したいと思います。

##参考サイト
[Installation Instructions for Ubuntu - Go Ethereum](https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu)
[EthereumノードにJSON-RPC API経由でアクセスする - Qiita](https://qiita.com/kanehara/items/5f09401813b52a326ac5)