Hyperledger Fabric v0.6.1-previewで複数ノードが通信するブロックチェーン環境を作る

4台のEC2環境を使って、Hyperledger Fabric環境を構築したため、その手順を記載します。
1台上に論理的に4つdockerコンテナを立てて、セットアップする方法は残っているものの
物理的に複数台で構成している例はあまり見なかったのでその方法です。

docker-compose.yaml を分割・修正して起動しています。

```yaml:membersrvc.yaml
version: '2'
services:
  baseimage:
    image: hyperledger/fabric-baseimage:x86_64-0.2.0

  membersrvc:
    image: hyperledger/fabric-membersrvc:x86_64-0.6.1-preview
    container_name: "membersrvc1"
    ports:
    - "7054:7054"
    command: membersrvc
    environment:
      - MEMBERSRVC_CA_LOGGING_SERVER=INFO
      - MEMBERSRVC_CA_LOGGING_CA=INFO
      - MEMBERSRVC_CA_LOGGING_ECA=INFO
      - MEMBERSRVC_CA_LOGGING_ECAP=INFO
      - MEMBERSRVC_CA_LOGGING_ECAA=INFO
      - MEMBERSRVC_CA_LOGGING_ACA=INFO
      - MEMBERSRVC_CA_LOGGING_ACAP=INFO
      - MEMBERSRVC_CA_LOGGING_TCA=INFO
      - MEMBERSRVC_CA_LOGGING_TCAP=INFO
      - MEMBERSRVC_CA_LOGGING_TCAA=INFO
      - MEMBERSRVC_CA_LOGGING_TLSCA=INFO
```
```yaml:peer0.yaml
version: '2'
services:
  baseimage:
    image: hyperledger/fabric-baseimage:x86_64-0.2.0

  vp0:
    image: hyperledger/fabric-peer:x86_64-0.6.1-preview
    container_name: "peer0-0.6.1"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "7050:7050"
      - "7051:7051"
      - "7053:7053"
    environment:
      - CORE_PEER_ID=vp0
      - CORE_SECURITY_ENROLLID=test_vp0
      - CORE_SECURITY_ENROLLSECRET=MwYpmSRjupbT
      - CORE_PEER_DISCOVERY_PERIOD=60s
      - CORE_PEER_DISCOVERY_TOUCHPERIOD=61s
      - CORE_PEER_ADDRESSAUTODETECT=false
      - CORE_PEER_ADDRESS=${peer0_IP}:7051
      - CORE_VM_ENDPOINT=unix:///var/run/docker.sock
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_PKI_ECA_PADDR=${membersrvc_IP}:7054
      - CORE_PEER_PKI_TCA_PADDR=${membersrvc_IP}:7054
      - CORE_PEER_PKI_TLSCA_PADDR=${membersrvc_IP}:7054
      - CORE_SECURITY_ENABLED=true
      - CORE_PEER_VALIDATOR_CONSENSUS_PLUGIN=pbft
      - CORE_PBFT_GENERAL_MODE=batch
      - CORE_PBFT_GENERAL_N=4
    command: sh -c "sleep 10; peer node start"
```

その他のPeerはvp1~vp3まで、読み替えて作成してください。
${other_peer_IP}はそれぞれのローカルIPです。
CORE_SECURITY_ENROLLSECRETはmembersrvcの"membersrvc/membersrvc.yaml"に記載されているパスワードを使います。(下のコードはtest_vp1のものとしています。)

```yaml:other_peer.yaml
version: '2'
services:
  baseimage:
    image: hyperledger/fabric-baseimage:x86_64-0.2.0

  vp[1-3]:
    image: hyperledger/fabric-peer:x86_64-0.6.1-preview
    container_name: "peerx-0.6.1"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "7050:7050"
      - "7051:7051"
      - "7053:7053"
    environment:
      - CORE_PEER_DISCOVERY_ROOTNODE=${peer0_IP}:7051
      - CORE_PEER_ID=vp[1-3]
      - CORE_SECURITY_ENROLLID=test_vp[1-3]
      - CORE_SECURITY_ENROLLSECRET=5wgHK9qqYaPy
      - CORE_PEER_DISCOVERY_PERIOD=60s
      - CORE_PEER_DISCOVERY_TOUCHPERIOD=61s
      - CORE_PEER_ADDRESSAUTODETECT=false
      - CORE_PEER_ADDRESS=${other_peer_IP}:7051
      - CORE_VM_ENDPOINT=unix:///var/run/docker.sock
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_PKI_ECA_PADDR=${membersrvc_IP}:7054
      - CORE_PEER_PKI_TCA_PADDR=${membersrvc_IP}:7054
      - CORE_PEER_PKI_TLSCA_PADDR=${membersrvc_IP}:7054
      - CORE_SECURITY_ENABLED=true
      - CORE_PEER_VALIDATOR_CONSENSUS_PLUGIN=pbft
      - CORE_PBFT_GENERAL_MODE=batch
      - CORE_PBFT_GENERAL_N=4
    command: sh -c "sleep 10; peer node start"
```

ポイントはCORE_PEER_ADDRESSAUTODETECT=false　としてアドレスを定義してあげることです。
trueとしてオート設定にすると、dockerコンテナのIPが設定されるため、外部から通信ができません。

あとは、それぞれのサーバーで
membersrvc→peer0→other_peerの順に起動してあげるだけです。

```bash
//command each server
docker-compose -f {membersrvc/peer0/other_peer}.yaml up -d
```

参考リンク
[Blockchain(Hyperledger)のローカル環境を作ってみた(Fabric Starter Kit) - Qiita](http://qiita.com/ishida330/items/887ae52c9f6ce4ff3b7f)