BlockApps社のSTRATOをWindowsローカル環境で起動してみた

# 概要

BlockApps社のSTRATOをWindowsローカル環境で起動してみました。
基本的には[チュートリアル](https://github.com/blockapps/strato-getting-started)に即しています。

**STRATOとは** 
Ethereumのブロックチェーンを操作することができ、ブロックチェーンを利用したアプリケーションの開発環境構築を簡単にするサービスです。

* Bloc API
ユーザ／アカウントやスマートコントラクトの管理をするAPIが提供されています。

* STRATO API
ブロックやトランザクションなどブロックチェーンを管理するAPIが提供されています。

# 起動方法

## 0. STRATO Testnetに登録する（省略可）

https://signup.blockapps.net/
STRATOにアカウントの申請（無料）をします。

## 1. クローン

```
git clone https://github.com/blockapps/strato-getting-started.git
cd strato-getting-started
```

## 2. docker login

```
docker login -u blockapps-repo -p P@ssw0rd registry-aws.blockapps.net:5000
```
Docker for Windowsはサポートしていないと記載がありますが、仮想化を有効にしていれば問題なく動作します。

## 3. 起動

```
strato.sh --single
```

docker-compose.ymlを取得するため、wgetが入っていないと動きません。

```
Creating strato_kafka_1     ... error

\\run\\\\docker.sock:/var/run/docker.sock"\nis not a valid Windows path'
```

上記のエラーが出たら、パスを修正しましょう。
docker-compose.ymlの最下部にあります。

```docker-compose.yml
volumes:
- C:\var\run\docker.sock:/var/run/docker.sock
```

再び起動すると、13個ものコンテナがあがってきます。

```
strato-getting-started>docker ps
CONTAINER ID        IMAGE                                                            COMMAND                  CREATED             STATUS              PORTS                                                          NAMES
9fec7c940206        registry-aws.blockapps.net:5000/blockapps-repo/nginx:3.1.2       "/docker-run.sh"         6 seconds ago       Up 5 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp                       strato_nginx_1
b38f7e8d13af        registry-aws.blockapps.net:5000/blockapps-repo/smd:3.1.2         "sh /usr/src/app/doc…"   7 seconds ago       Up 6 seconds        3002/tcp                                                       strato_smd_1
b2112d318223        registry-aws.blockapps.net:5000/blockapps-repo/apex:3.1.2        "sh /usr/src/app/doc…"   10 seconds ago      Up 7 seconds        3001/tcp                                                       strato_apex_1
caa4eeee1495        registry-aws.blockapps.net:5000/blockapps-repo/dappstore:3.1.2   "sh /usr/src/app/doc…"   10 seconds ago      Up 8 seconds        3000/tcp                                                       strato_dappstore_1
c6816d69c065        registry-aws.blockapps.net:5000/blockapps-repo/cirrus:3.1.2      "sh /doit.sh"            11 seconds ago      Up 10 seconds       3333/tcp                                                       strato_cirrus_1
1007876f283e        registry-aws.blockapps.net:5000/blockapps-repo/bloc:3.1.2        "/usr/bin/bloc/doit.…"   12 seconds ago      Up 11 seconds       8000/tcp, 8002/tcp                                             strato_bloc_1
064fe3eb3498        registry-aws.blockapps.net:5000/blockapps-repo/strato:3.1.2      "/var/lib/doit.sh"       13 seconds ago      Up 12 seconds       3000/tcp, 0.0.0.0:30303->30303/tcp, 0.0.0.0:30303->30303/udp   strato_strato_1
9ccb0d987bc9        wurstmeister/kafka:1.1.0                                         "start-kafka.sh"         14 seconds ago      Up 13 seconds                                                                      strato_kafka_1
de49b416c1e9        registry-aws.blockapps.net:5000/blockapps-repo/postgrest:3.1.2   "sh /doit.sh"            5 minutes ago       Up 5 minutes        3001/tcp                                                       strato_postgrest_1
5b4da01a7185        wurstmeister/zookeeper:3.4.6                                     "/bin/sh -c '/usr/sb…"   5 minutes ago       Up 5 minutes        22/tcp, 2181/tcp, 2888/tcp, 3888/tcp                           strato_zookeeper_1
70eaab998732        postgres:9.6                                                     "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        5432/tcp                                                       strato_postgres_1
ab3ebd559572        redis:3.2                                                        "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        6379/tcp                                                       strato_redis_1
df72cabf4aab        registry-aws.blockapps.net:5000/blockapps-repo/docs:3.1.2        "sh /usr/share/nginx…"   5 minutes ago       Up 5 minutes        8080/tcp                                                       strato_docs_1
```


## 4. 動作確認

ブラウザでlocalhostと入力すると
ログインを求められるので、下記を入力してください。

username: admin
password: admin

添付画像のような画面が表示されたら成功です。
![screencapture-localhost-dashboard-2018-07-12-14_17_59.png](https://qiita-image-store.s3.amazonaws.com/0/132064/7dcce2a1-26cb-1746-1303-88efd86620aa.png)
画面は「STRATO管理ダッシュボード（SMD）」と呼ばれるもので、Bloc APIやSTRATO APIを使用したローカル環境のEthereumブロックチェーンネットワーク用のダッシュボードです。ユーザやコントラクトの管理が可能です。
Swaggerにも対応しているため、APIの挙動確認は以下で実施できます。

strato-api: http://localhost/strato-api/eth/v1.2/docs
bloc api: http://localhost/bloc/v2.2/docs

## 5. 停止

```
strato.sh --stop
```

## 6. 抹消

以下のコマンドでブロックチェーン内に作成されたトランザクションやデータは削除できます。

```
strato.sh --wipe
```

ブロックチェーンのテストでは、再検証の際、ブロックチェーンを一から構築する必要があるので、テストを自動化した方がよいかもしれません。

## 7. 補足

[AWS](https://aws.amazon.com/marketplace/pp/B071NV8MXT)や[Azure](https://azuremarketplace.microsoft.com/ja-jp/marketplace/apps/blockapps.strato-blockchain-multinode-templates-latest)のマーケットプレイスでも使用できる（有料）ので、試してみてはいかがでしょうか。