하이퍼레저1.4 네트워크 시작 (1부)

min71·2021년 7월 20일
1

하이퍼레저

목록 보기
1/12

fabric-sample의 byfn를 실행시켜 하이퍼레저 맛보기

> 준비과정

1. 우분투 20.04 설치

2.패키지 업데이트

sudo apt-get update && sudo apt-get upgrade

3. 도커 & 도커컴포즈 설치(나는 20.10.7 버전 설치함)

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo usermod -a -G docker $USER
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose;
sudo chmod +x /usr/local/bin/docker-compose;
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose;

4. Go언어(나는 1.12 버전 설치함) 설치

curl -LO https://dl.google.com/go/go1.12.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.12.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
sed '$!N; /^\(export GOPATH=.*\) \1$/!P; D' -i ~/.bash_profile
source ~/.bash_profile

5. Nodejs & NPM 설치

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install build-essential
sudo apt-get install -y nodejs
sudo npm install npm@5.6.0 -g

6. 파이썬 2.7 설치

sudo apt-get install python

하이퍼레저 패브릭 1.4 설치

하이퍼레저 패브릭 1.4 설치

1. 소스 다운로드

curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.12 1.4.9 0.4.22
export PATH=/home/hyperledger/fabric-samples/bin:$PATH

필요한 도커이미지 자동으로 pull함

2. 네트워크 구조 변경

변경 전 구조

변경 후 구조

2.1 fabric-samples/first-network/docker-compose-cli.yaml파일 변경



2.2 fabric-samples/first-network/base/docker-compose-base.yaml파일 변경


2.3 fabric-samples/first-network/crypto-config.yaml파일 변경

네트워크 시작

3. 네트워크 시작

3-1. byfn 스크립트를 이용한 시작
./byfn.sh generate
./byfn.sh up
3-2. 사용자가 수동으로 네트워크 시작
  • 필요조건
    - crypto-config 디렉터리가 존재하지 않아야 함
    - channel-artifacts 디렉터리가 비어있어야 함
    - 실행중인 하이퍼레저 관련 컨테이너가 없어야 함
rm -rf crypto-config/
rm -rf channel-artifacts && mkdir channel-artifacts
docker kill $(docker ps -aq)
docker rm $(docker ps -aq)
  • 각 노드에 필요한 서명키와 인증서 생성(./byfn.sh generate와 동일)
../bin/cryptogen generate --config=./crypto-config.yaml

  • 설정 트랜잭션 생성
    - 오더러 제네시스 블록(genesis.block) 생성
    • 채널 설정 트랜잭션(channel.tx) 생성
    • 조직별 앵커피어 업데이트 트랜잭션(Org1MSPanchors.tx, Org2MSPanchors.tx) 생성
제네시스블록 생성
export FABRIC_DFG_PATH=$PWD
../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

채널트랜잭션 생성
export CHANNEL_NAME=mychannel
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

조직별 앵커피어 트랜잭션 생성
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

결과물은 모두 channel-artifacts 디렉터리에 저장됨

  • 노드 실행
docker-compose -f docker-compose-cli.yaml up -d

  • 채널 가입
cli 컨테이너 접속
docker exec -it cli bash
채널 생성
export CHANNEL_NAME=mychannel
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

peer0.org1 (기본값으로 설정되 있음) 채널 가입
peer channel join -b mychannel.block

peer1.org 채널 가입
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
peer channel join -b mychannel.block
peer channel list

peer2.org1 채널 가입
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer2.org1.example.com:18051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/tls/ca.crt
peer channel join -b mychannel.block
peer channel list

peer0.org2 채널 가입
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
peer channel join -b mychannel.block
peer channel list

peer1.org2 채널 가입
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt
peer channel join -b mychannel.block
peer channel list

peer2.org2 채널 가입
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer2.org2.example.com:11051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer2.org2.example.com/tls/ca.crt
peer channel join -b mychannel.block
peer channel list

  • 조직별 앵커피어 업데이트
org1의 앵커피어 업데이트
export CHANNEL_NAME=mychannel
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

org2의 앵커피어 업데이트
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp 
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

↓↓↓ 실행된 피어 & 오더러 & cli ↓↓↓

Hits

profile
한 줄 소개

1개의 댓글

comment-user-thumbnail
2021년 8월 17일

잘 배우고 갑니다.

답글 달기