Hyperledger Fabric v1.4 のサンプルアプリケーションを AWS EC2 で動かしてみる

# はじめに
HyperledgerFabricって公式サンプル以外に実装例が全然なくて（特に日本語だと…）、色々と調べるだけでどんどん時間が溶けていきます。特に安定版としてリリースされた v1.4 の実装例はほとんど見つかりません。エンタープライズユースが中心で、 Qiita や GitHub などではオープンにしづらいということなんでしょうかね。

さて、この記事では以下のリポジトリのサンプルを AWS EC2 で動かしてみたので、その手順を備忘録的にまとめています。

[Build Blockchain Insurance Application](https://github.com/IBM/build-blockchain-insurance-app)

# サンプルを動かすまでの流れ
## AWS EC2 (Ubuntu-18.04)でインスタンス作成
EC2でインスタンスを作成。OS は Ubuntu-18.04 を選択しておきます。インスタンスタイプは適当に t2.xlarge とかでよいです。

セキュリティグループは、SSHとカスタムTCPルールを設定します。SSHはポート22を、カスタムTCPルールではポート3000を空けておきましょう。

## インスタンスへSSH接続
作成したインスタンスへSSHで接続し、ターミナルで操作していきます。

SSHで接続する際のユーザー名は`ubuntu`であることに注意。普段はよく`ec2-user`で入ることが多いので、ここで少しハマりました。OSがAmazonLinuxのときは`ec2-user`、Ubuntuのときは`ubuntu`なので注意。

[Build Blockchain Insurance Application](https://github.com/IBM/build-blockchain-insurance-app)リポジトリをクローンする前に必要な環境を整えます。

### DockerとDockerComposeをインストール
`apt`パッケージを更新

```
$ sudo apt-get update
```
HTTPS経由でリポジトリを使用できるようにパッケージをインストール

```
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
```
Dockerの公式GPGキーを追加

```
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
stableリポジトリの設定

```
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
```
もう一度`apt`パッケージを更新

```
$ sudo apt-get update
```
Dockerをインストール

```
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
```
`sudo`がなくても一般ユーザーがDockerを実行できるように設定

```
// ユーザーの確認
$ whoami
ubuntu

// 初期設定では使えない
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at ~

// 権限の確認
$ cat /etc/group | grep docker
docker:x:999:

// 権限の追加
$ sudo gpasswd -a ubuntu docker

// 追加されたことを確認
$ cat /etc/group | grep docker
docker:x:999:ubuntu

// Dockerが使用するソケットを一般ユーザーが読み込めるように
$ sudo chmod 666 /var/run/docker.sock

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```
DockerComposeをインストール
インストール前に`/usr/local/bin/`へ移動

```
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```
実行可能権限を適用

```
$ sudo chmod +x /usr/local/bin/docker-compose
```
インストールの確認

```
$ docker-compose --version
docker-compose version 1.24.1, build xxx~
```
### Node.js、nvm、npmのインストール
nvm（ノードバージョンマネージャ）をインストール

```
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.0/install.sh | bash

$ . ~/.nvm/nvm.sh
```
nodejsとnpmのインストール

```
$ nvm install 8.9.4

$ node -v
v8.9.4

$ npm -v
5.6.0
```

### pythonのインストール
Ubuntu-18.04にはデフォルトでpython3が入っているので、python2は別途インストールする必要がある。

```
$ sudo apt-get install python
```
### Gitのインストール

```
$ sudo apt-get install git
```
## アプリケーションを実行
リポジトリのクローンを作成

```
$ git clone https://github.com/IBM/build-blockchain-insurance-app
```
Dockerへログイン

```
$ docker login
```
Ubuntuで実行する際、`config`ファイルを一部修正します。

```
// フォルダを移動
// /build-blockchain-insurance-app/web/www/blockchain/

// vimで修正
$ vi config.js
```
`/build-blockchain-insurance-app/web/www/blockchain/config.js`の９ライン目の`isUbuntu: false`を`isUbuntu: true`へ書き換え。

シェルの実行

```
$ cd build-blockchain-insurance-app

$ ./build_ubuntu.sh
```
これでしばらくするとネットワークが作成されて、ブラウザからアプリケーションを触れるようになります。

URL : http://ec2-xx-xx-xx-xx.compute-x.amazonaws.com:3000/

EC2インスタンスのパブリックDNSに`:3000/`を付ければOKです。セキュリティグループの設定でポート`:3000`を開放しているので、ブラウザで以下のページが見れるようになっていれば成功です。

![hlfsample1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260591/d1d47e95-9eca-60ac-44f7-b84e90ecc58a.png)

# おわりに
Hyperledger Fabric v1.4 のサンプルアプリケーションを動かすところまでできました。

SDKを使ったアプリケーション側の実装がまだよく分からないので動かしながら、勉強していくしかないですね。