##はじめに
前回は通常の「Nekonium」パブリックノードの構築方法を記載しましたが、今回はhttp-proxyを使ったSSL通信対応パブリックノードの構築方法を記載します。
その1にいくつか手順を加えたものになりますので、事前に一度ご覧頂けると幸いです。
##手順
###ドメインとSSL証明書の準備
####ドメインの取得
ドメイン取得代行サイトで任意のドメインを取得してください。
なお、今回は既にバリュードメインで取得したドメイン「nekonium.site」のサブドメイン「www.nekonium.site」を使用します。
####メールアドレスの取得
SSL証明書を発行するには事前にドメイン管理者のメールアドレスが必要になります。
今回はG Suiteで「admin@nekonium.site」というメールアドレスを作成します。
####ドメインの確認とメール設定
ドメインの所有者であることを証明するために、今回はDNSのTXTレコードを使用します。
G Suiteの指示に従いながら、バリュードメイン側でDNSの設定をします。
####メール設定の完了
ドメインの確認とメール設定が完了したら、メールの送受信をテストして下さい。
####CSR・秘密鍵の生成
SSL証明書を発行するには事前にCSRと秘密鍵(プライベートキー)を用意する必要があります。
バリュードメインがオンラインでCSRと秘密鍵の生成と管理をするツールを提供していますので、そちらを利用します。
CSRとプライベートキー(パスフレーズあり)とプライベートキー(パスフレーズ無し)の3つが生成されます。
####SSL証明書の発行
生成されたCSRと秘密鍵を使用してSSL証明書発行代行サイトよりSSL証明書を取得します。
今回はバリュードメインでそのままSSL証明書を発行します。
(生成されたCSRと秘密鍵は他の発行サイトでも使えます)
作成済のCSRを選択して、「admin@nekonium.site」に承認メールが来るようにします。
これでSSL証明書が発行されました。
###サーバーの準備
####サーバーの用意
Linuxサーバーを立ち上げます。
今回もAWSの「Ubuntu Server 16.04 LTS (HVM), SSD Volume Type」を選びました。
インスタンスタイプも同じく「t2.micro」にしておきます。
####固定IPの取得
インスタンスが立ち上がったら、「Elastic IP」でグローバル固定IPを取得します。
今回は「52.10.12.170」が割り当てられました。
####固定IPを関連付ける
「アクション」から、先ほど作成したインスタンスにグローバル固定IPを割り当てます。
####ファイアウォールの設定
「セキュリティグループ」のインバウンド設定から、今回使用するTCPの「8293」ポートを空けておきます。
####DNSの設定
今回割り当てられたグローバル固定IPをドメイン名に紐付けます。
バリュードメインのDNS設定からAレコードのwwwを「52.10.12.170」に設定します。
ドメイン確認に使用したTXTレコードの行は削除して構いません。
###サーバーの設定
####インスタンスへの接続
Windowsの場合は「PuTTY」を使用します。詳しい接続方法はAWSのページを参照してください。
[Linux インスタンスへの接続 - AWS Documentation]
(https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AccessingInstances.html?icmpid=docs_ec2_console)
####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
####nodejsのインストール
下記コマンドを実行してnodejsをインストールします
cd
sudo apt-get install nodejs
sudo ln -s `which nodejs` /usr/bin/node
nodejs -v
と入力すると、バージョンが確認できます。
####npmのインストール
下記コマンドを実行してnpmをインストールします
sudo apt-get install npm
####http-proxyのインストール
下記コマンドを実行してhttp-proxyをインストールします
mkdir tools
mkdir tools/proxy
cd tools/proxy
npm init
途中で止まりますが、Is this ok? (yes)
までEnterキーで進んでいきます。
npm install http-proxy --save
npm install fs --save
touch stop.sh
vi stop.sh
stop.shに下記のように書き込みます。
#!/bin/bash
ps aux | grep 'node index.js' | grep -v grep | awk '{print $2}' | xargs kill -9
vi package.json
package.jsonを下記のように編集します。
{
"name": "proxy",
"version": "1.0.0",
"description": "Proxy server for ethereum node",
"main": "index.js",
"scripts": {
"start": "node index.js &",
"stop": "./stop.sh"
},
"author": "Robert Lie",
"license": "ISC",
"dependencies": {
"fs": "0.0.1-security",
"http-proxy": "^1.16.2"
}
}
touch index.js
vi index.js
index.jsに下記内容を書き込みます。
var httpProxy = require('http-proxy');
var fs = require('fs');
httpProxy.createServer({
target: {
host: 'localhost',
port: 8292
},
ssl: {
key: fs.readFileSync(
'/home/ubuntu/tools/proxy/ssl/www.nekonium.site.key', 'utf8'),
cert: fs.readFileSync(
'/home/ubuntu/tools/proxy/ssl/www.nekonium.site.pem', 'utf8')
}
}).listen(8293);
#####SSL証明書のインストール
mkdir ssl
cd ssl
touch www.nekonium.site.key
touch www.nekonium.site.pem
touch www.nekonium.site.ca.pem
vi www.nekonium.site.key
取得したSSL秘密鍵(プライベートキー パスフレーズ無し)の内容を書き込みます。
-----BEGIN RSA PRIVATE KEY-----
中略
-----END RSA PRIVATE KEY-----
vi www.nekonium.site.pem
取得したSSL証明書の内容を書き込みます。
-----BEGIN CERTIFICATE-----
中略
-----END CERTIFICATE-----
vi www.nekonium.site.ca.pem
取得したSSL中間証明書の内容を書き込みます。
-----BEGIN CERTIFICATE-----
中略
-----END CERTIFICATE-----
cat www.nekonium.site.ca.pem >> www.nekonium.site.pem
2つの証明書を結合します。
これでhttp-proxyの準備が出来ました。
####gnekoniumの初回起動
#####ブロックチェーンの同期
下記コマンドを実行してブロックチェーンの同期を行います。
cd
cd nekonium/go-nekonium
build/bin/gnekonium --fast --cache=256 console
少し時間がかかります。(15分くらい)
※注意 --cache=512
だとインスタンスのメモリ容量が足りず失敗します。
#####同期終了
Fast sync complete, auto disabling
と表示されれば同期が成功したことになります。
####http-proxyの開始
新しいセッションを開き、下記コマンドを実行してhttp-proxyを開始します。
cd tools/proxy
npm start
####SSL通信対応パブリックノードの開始
cd
tmux new -s gnekonium
cd nekonium/go-nekonium
build/bin/gnekonium -rpc --rpcaddr 0.0.0.0 --rpcport 8292
今回はポート8293ではなく8292で起動します
####動作確認
ノードが動作しているか確認するには別セッションで下記コマンドを実行します。
curl -s -X POST --data '{"jsonrpc":"2.0","id":0,"method":"eth_getBalance","params":["アドレス","latest"]}' https://www.nekonium.site:8293/
アドレス
にはNekoniumのアカウントを入力して下さい。
16進数でアカウントの残高が表示されれば無事SSL通信で動作していることになります。
##おわりに
これでSSL通信対応のパブリックノードの構築が完了しました。
しかし、SSL証明書やメールアドレスの維持費が気になりますね。
次回はもっと安上がりで簡単なSSL通信対応パブリックノードの構築方法を投稿したいと思います。