AWSとDockerを使用したOmiseGo / ewallet環境構築

【本文】
---

この記事は [Blockchain Advent Calendar 2018](https://qiita.com/advent-calendar/2018/blockchain)  の15日目の記事です。
空いていたので、急遽ねじ込みました！

OmiseGoのewalletをAWS上でdockerイメージを使って簡単に構築する手順について共有します。



【前提】
---
+ EC2の基本的な設定まで終わっている前提。以下を参考にすれば、AWS上で基本的なWebアプリケーション環境構築が可能。

　　（参考）[Qiita: 0から始めるAWS入門](https://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde)

+ Elastic IPを取得してパブリックIPアドレスを固定化しておく方が良い。（※固定していない場合、インスタンス起動の度にDNSとパブリックIPが変わる。）

　　（参考）[【AWS】IPを固定しよう！Elastic IPの設定【初心者】](http://pandagame.hatenablog.com/entry/2016/09/22/223404)

【EC2起動】
---
+ AWSコンソール上からインスタンス立ち上げ

【サーバへログイン】
---
+ ssh接続(mac or Linux)もしくはTeraterm(windows)を利用してEC2へログイン（※通常、ユーザー名は`ec2-user` ）

【docker環境構築】
---
+ 以下を参考に導入（※特に「docker環境初期構築」のあたり）

　　（参考）[Qiita: 初心者がAWS Linux環境にdocker-composeでELK環境を構築してみた](https://qiita.com/piro87084806/items/2d0601fd2d854f9da2b9)

**＜コマンド＞**

+ リポジトリのアップデートチェック
+ dockerをインストール
+ dockerを起動
+ `ec2-user`をdockerグループに追加（ubuntuの場合はubuntu）

>```
$ sudo yum update
$ sudo yum install -y docker
$ sudo service docker start
$ sudo usermod -a -G docker ec2-user
>```
 
+ Doicker-composeの導入は公式ドキュメントに従った方が良い。

　　（参考）[Install Docker Compose](https://docs.docker.com/compose/install/)

【OmiseGo: ewalletのdockerイメージ導入】
---
+ 任意の場所に`docker-compose.yml`ファイルを作成し、以下リンク内の内容をコピー＆ペーストする。

　　（参考）~~[omisego/ewallet: Option 1: Using Docker Compose]( https://github.com/omisego/ewallet/blob/master/docs/setup/docker.md)~~
→（2019/6/12修正）　https://raw.githubusercontent.com/omisego/ewallet/master/docker-compose.yml

＊基本は、以下リンクの手順をこなせば起動する。
https://github.com/omisego/ewallet

+ なお、`docker-compose.yml`の配置場所は何処でも良いが、プロジェクトに紐づいたディレクトリ内に配置する等しておくと後々分かりやすい。

　　（参考）[Qiita: Docker compose ことはじめハンズオン](https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a)

+ それ以降の設定も`Option 1`の終わりまで実行。

+ `docker-compose.yml`の内容に従って、ほぼ自動で環境設定からdockerコンテナのサービス起動まで実行してくれるが、実行途中で管理者の`E-mail/Password`設定を訊かれるので、任意のものを入力。あくまでもサンプル用なのでE-mailアドレスは何でもよく、例えば、`admin@example.com`でもよい。（※`Email/Password`は後のログイン時に使用するので覚えておく。）


**（備考）OmiseGo/ewallet側での環境構築自体はこれだけ。シンプルです！**

【EC2：セキュリティグループ設定追加】
---
+ 以下参考リンクの「EC2セキュリティグループの修正」を参照しながら、EC2のセキュリティグループに設定追加。

　　（参考）[AWSのEC2に、docker-composeを使用してredmineとGitBucketをインストール]( https://walking-succession-falls.com/awsのec2に、docker-composeを使用してredmineとgitbucketをインストール/)



（**図1**）
![セキュリティグループ.png](https://qiita-image-store.s3.amazonaws.com/0/167054/47e467f6-20a6-798b-dbe5-373f54cd5877.png)

+ 図1の赤枠を参考。

**タイプ：**

+ `カスタムTCPルール`を指定。

**ポート範囲：**

+ dockerコンテナのPORTSを指定。
+ OmiseGoのewalletの場合、`docker-compose.yml`でポート番号を`4000`に設定しているので、そちらを使用。

**ソース：**

+ IPアドレスを指定。（`0.0.0.0/0`にすればすべてのIPアドレスを受け付ける。）


【OmiseGoのe-walletの管理者画面へログイン】
---

+ Webブラウザ上で　`http://{EC2のパブリックIP}:4000/admin` を指定し実行

（**図2**）
![ログイン画面.png](https://qiita-image-store.s3.amazonaws.com/0/167054/cac3bee3-8b1a-51fe-36a7-266bf87801d8.png)

+ `Email/Password` はdokerイメージ導入中に設定したものを使用。

（**図3**）
![管理者画面top.png](https://qiita-image-store.s3.amazonaws.com/0/167054/e8ddcded-2cae-1ecd-78f9-0b55666bfd9f.png)

+ これで管理者画面へのログインまで完了。
+ トークン発行／移転やアカウント追加等もここからでも可能。

（**図4**）
![トークン移転.png](https://qiita-image-store.s3.amazonaws.com/0/167054/34493898-7ad7-9a8a-4c70-3d6e6544b1f0.png)

+ 一例として、TestToken(TST)を発行し、一部を管理者アカウントから作成したtest1アカウントにトークン移転した際のトランザクション。

+ 補足として、一般ユーザ側で使用できるようにするには、APIを使用してクライアントウォレットを作成する。API詳細はドキュメント参照。


【おわりに】
---
OmiseGoのewallet環境構築は、現状では`Bare-metal`と`Dockerイメージ`を使用する場合の2通りあります。
`Bare-metal`を使用する場合は、以下リンクの手順が詳しいですが、端末の環境にも左右されて思わぬところで嵌ることも多いかもしれません。

（参考）[OmiseGoのeWalletをRuby on Railsで利用する(アルゴリズムとかオーダーとか)](https://y-nakajo.hatenablog.com/entry/2018/08/01/002853)

今回のようにAWS + docker使用の場合は、嵌る可能性があるとすればAWS設定くらいなので、より簡単に環境構築できると思います。（その代わり、慣れない人はAWSの設定で嵌る可能性もありますが。）

以上


*BUIDL the blockchain world!*