INSTALL HYPER-LEDGER CLUSTER IN CENTOS

leekyungryul·2024년 3월 21일
0

하이퍼레저

목록 보기
2/3

작업 디렉터리 생성

mkdir /home/blockchain

작업 디렉터리를 volume mount

install docker

install docker

cd /home/blockchain.

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

start docker

systemctl start docker

enable docker

systemctl enable docker

install docker-compose

install docker-compose

curl -SL https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

create symbolic link

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

실행권한 부여

chmod a+x /usr/local/bin/docker-compose

Upload fablic-samples

INSTALL fablic

cd /home/blockchain

curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh 
chmod +x install-fabric.sh
./install-fabric.sh

INSTALL jq

yum install -y epel-release
yum install -y jq

INSTALL GO

download & install 참고

환경변수 등록

vi /etc/profile

# 아래 내용 추가
GO_HOME='/usr/local/go'
PATH=$GO_HOME/bin:$PATH
export GO_HOME PATH

source /etc/profile

확인

go version

사용자 생성(옵션)

root권한으로 실행 하여도 되나 일반사용자를 생성해서 실행해보기로 함

# 사용자 생성
adduser hyperledger_admin

# docker 사용을 위해
usermod -aG docker hyperledger_admin
newgrp docker

별도 준비된 파일 각 노드에 업로드

master node

kopo-network-1
tar xvf kopo-network-1.tar

slave1 node

kopo-network-2
asset-transfer-basic-2

tar xvf kopo-network-2.tar
tar xvf asset-transfer-basic-2.tar

slave2 node

kopo-network-3
asset-transfer-basic-3

tar xvf kopo-network-3.tar
tar xvf asset-transfer-basic-2.tar

hostname 설정

master node

hostnamectl set-hostname master

slave1 node

hostnamectl set-hostname slave1

slave2 node

hostnamectl set-hostname slave2

docker swarm 구성

master node

docker swarm init --advertise-addr 192.168.0.240

# 아래와 같은 결과 확인
Swarm initialized: current node (1ahdy3bi39lkdvsslz1d8ndwv) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-5plo9x3po1gvq6a8k5jobjcb5klwe95f7yfb86gjw4sqzv9we4-0u6wqzg041w7imyfu98k11sgj 192.168.0.240:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

# docker network create
docker network create --attachable --driver overlay fmd-network

slave1, slave2 node

# 위에서 복사해서 아래와 같이 명령을 붙여넣는다.
docker swarm join --token SWMTKN-1-5plo9x3po1gvq6a8k5jobjcb5klwe95f7yfb86gjw4sqzv9we4-0u6wqzg041w7imyfu98k11sgj 192.168.0.240:2377

# 아래와 같은 결과 확인
This node joined a swarm as a worker.

master node

docker node promote slave1
docker node promote slave2

# 아래와 같은 결과 확인
Node slave1 promoted to a manager in the swarm.
Node slave2 promoted to a manager in the swarm.

확인

docker node ls

# 아래와 같은 결과 확인
ID                            HOSTNAME                          STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
dl4jhp8xd6nvnjbfvgqwtyjuf     blockchain-slave1-dev.novalocal   Ready     Active                          26.0.0
721iwr9q3wdn5c9kcap3p53qh     blockchain-slave2-dev.novalocal   Ready     Active                          26.0.0
1ahdy3bi39lkdvsslz1d8ndwv *   master                            Ready     Active         Leader           26.0.0

인증서 생성

인증서 파일 생성

master node

cd /home/blockchain/kopo-network-1
# 기존 파일 삭제를 위함
./network.sh down

# 인증서를 생성
./network.sh up -ca
  • 인증서를 생성하는 설정을 아래 위치의 파일에 있다.
vi /home/blockchain/fabric-samples/kopo-network-1/organizations/fabric-ca/registerEnroll.sh

기존 인증서 삭제

slave1 node

cd /home/blockchain/kopo-network-2
# 기존 인증서 삭제를 위함
rm -rf organization

slave2 node

cd /home/blockchain/kopo-network-3
# 기존 인증서 삭제를 위함
rm -rf organization

master node의 organization 디렉터리를 공유

master node

# master node에서 생성한 인증서파일이 root권한으로 되어있다. 그래서 그 부분을 hyperledger_admin으로 전부 변경해주어야 한다.
cd /home/blockchaiin/kopo-network-1
chown -R organization

slave1 node, slave2 node

  • 기존 organization 디렉터리는 삭제하고 새로운 파일을 해당 위치로 업로드 해준다.

프로젝트 up

master node

  • 현재 파일에 예전에 백업흔적이 남아있어서 수정해주어야 함
cd /home/blockchain/fabric-samples/kopo-network-1/compose
vi compose-test-net.yaml

# 52,53번 라인을 수정해준다.
 52         #- ../bkupOrderer:/var/hyperledger/production/orderer
 53         - orderer.fmd.com:/var/hyperledger/production/orderer
 
cd /home/blockchain/fabric-samples/kopo-network1/
./kopo-network.sh up

slave1 slave2 node

cd /home/blockchain/fabric-samples/kopo-network1/
./kopo-network.sh up

CREATE CHANNEL

master node에서 channel 생성을 위한 설정파일 확인

# 아래 파일을 열어보면 확인이 가능하다.
# 현재는 orderer 5개로 구성된 파일이 작성되어있음
# 사내 서버에는 3대의 node에 orderer를 3개로 구성예정이니 나머지 2개를 삭제해준다.
vi /home/blockchain/fabric-samples/kopo-network-1/configtx/configtx.yaml

# 기존파일
210     Addresses:
211         - orderer.fmd.com:7050
212         - orderer2.fmd.com:8050
213         - orderer3.fmd.com:9050
214         - orderer4.fmd.com:10050
215         - orderer5.fmd.com:11050
216
217     EtcdRaft:
218         Consenters:
219         - Host: orderer.fmd.com
220           Port: 7050
221           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/tls/server.crt
222           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/tls/server.crt
223         - Host: orderer2.fmd.com
224           Port: 8050
225           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/tls/server.crt
226           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/tls/server.crt
227         - Host: orderer3.fmd.com
228           Port: 9050
229           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/tls/server.crt
230           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/tls/server.crt
231         - Host: orderer4.fmd.com
232           Port: 10050
233           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer4.fmd.com/tls/server.crt
234           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer4.fmd.com/tls/server.crt
235         - Host: orderer5.fmd.com
236           Port: 11050
237           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer5.fmd.com/tls/server.crt
238           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer5.fmd.com/tls/server.crt

# 수정파일
210     Addresses:
211         - orderer.fmd.com:7050
212         - orderer2.fmd.com:8050
213         - orderer3.fmd.com:9050
214
215     EtcdRaft:
216         Consenters:
217         - Host: orderer.fmd.com
218           Port: 7050
219           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/tls/server.crt
220           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/tls/server.crt
221         - Host: orderer2.fmd.com
222           Port: 8050
223           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/tls/server.crt
224           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/tls/server.crt
225         - Host: orderer3.fmd.com
226           Port: 9050
227           ClientTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/tls/server.crt
228           ServerTLSCert: ../organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/tls/server.crt

master node

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=${PWD}/configtx
configtxgen -profile TwoOrgsApplicationGenesis -outputBlock ./channel-artifacts/channel1.block -channelID channel1

# 아래 디렉터리로 들어가면 channel1.block이 보인다.
cd /home/blockchain/kopo-network-1/channel-artifacts/

# channel-artifacts 디렉터리를 다운로드 받아서 나머지 slave node들에게 옮긴다.
# 다른 orderer들도 위 block을 기준으로 채널에 join하기 위해

JOIN CHANNEL

ORDERER

master node

export ORDERER_CA=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem
export ORDERER_ADMIN_TLS_SIGN_CERT=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/tls/server.crt
export ORDERER_ADMIN_TLS_PRIVATE_KEY=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer.fmd.com/tls/server.key

# localhost:7053은 orderer1번의 ip
osnadmin channel join --channelID channel1 --config-block ./channel-artifacts/channel1.block -o localhost:7053 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY"

# 위 명령후에 아래 결과가 나온다.
Status: 201
{
	"name": "channel1",
	"url": "/participation/v1/channels/channel1",
	"consensusRelation": "consenter",
	"status": "active",
	"height": 1
}

slave1 node

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=${PWD}/configtx
export ORDERER_CA=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem
export ORDERER_ADMIN_TLS_SIGN_CERT=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/tls/server.crt
export ORDERER_ADMIN_TLS_PRIVATE_KEY=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/tls/server.key

# localhost:8053은 orderer2번의 ip
osnadmin channel join --channelID channel1 --config-block ./channel-artifacts/channel1.block -o localhost:8053 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY"

# 위 명령후에 아래 결과가 나온다.
Status: 201
{
	"name": "channel1",
	"url": "/participation/v1/channels/channel1",
	"consensusRelation": "consenter",
	"status": "active",
	"height": 1
}

slave2 node

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=${PWD}/configtx
export ORDERER_CA=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem
export ORDERER_ADMIN_TLS_SIGN_CERT=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/tls/server.crt
export ORDERER_ADMIN_TLS_PRIVATE_KEY=${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/tls/server.key

# localhost:9053은 orderer3번의 ip
osnadmin channel join --channelID channel1 --config-block ./channel-artifacts/channel1.block -o localhost:9053 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY"

# 위 명령후에 아래 결과가 나온다.
Status: 201
{
	"name": "channel1",
	"url": "/participation/v1/channels/channel1",
	"consensusRelation": "consenter",
	"status": "active",
	"height": 1
}

master node에서 channel 확인

osnadmin channel list -o localhost:7053 --ca-file "$ORDERER_CA" --client-cert "$ORDERER_ADMIN_TLS_SIGN_CERT" --client-key "$ORDERER_ADMIN_TLS_PRIVATE_KEY"

# 아래 결과값 확인
Status: 200
{
	"systemChannel": null,
	"channels": [
		{
			"name": "channel1",
			"url": "/participation/v1/channels/channel1"
		}
	]
}

PEER

slave1 node

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.fmd.com/peers/peer0.org1.fmd.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.fmd.com/users/Admin@org1.fmd.com/msp
export CORE_PEER_ADDRESS=localhost:7051
export FABRIC_CFG_PATH=$PWD/../config/
peer channel join -b ./channel-artifacts/channel1.block
# 아래와 같은 결과 확인
2024-03-21 15:39:12.671 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-21 15:39:15.053 KST 0002 INFO [channelCmd] executeJoin -> Successfully submitted proposal to join channel

slave2 node

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.fmd.com/peers/peer0.org2.fmd.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.fmd.com/users/Admin@org2.fmd.com/msp
export CORE_PEER_ADDRESS=localhost:9051
export FABRIC_CFG_PATH=$PWD/../config/
peer channel join -b ./channel-artifacts/channel1.block

# 아래와 같은 결과 확인
2024-03-21 15:41:20.862 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-21 15:41:21.190 KST 0002 INFO [channelCmd] executeJoin -> Successfully submitted proposal to join channel

앵커 PEER 설정

slave1 node

peer channel fetch config channel-artifacts/config_block.pb -o localhost:8050 --ordererTLSHostnameOverride orderer2.fmd.com -c channel1 --tls --cafile "$ORDERER_CA"
cd channel-artifacts
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
jq '.data.data[0].payload.data.config' config_block.json > config.json
cp config.json config_copy.json
jq '.channel_group.groups.Application.groups.Org1MSP.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "peer0.org1.fmd.com","port": 7051}]},"version": "0"}}' config_copy.json > modified_config.json
configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
configtxlator compute_update --channel_id channel1 --original config.pb --updated modified_config.pb --output config_update.pb
configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
echo '{"payload":{"header":{"channel_header":{"channel_id":"channel1", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb

# 아래와 같은 결과 확인
2024-03-21 15:48:56.765 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-21 15:48:56.772 KST 0002 INFO [cli.common] readBlock -> Received block: 0
2024-03-21 15:48:56.772 KST 0003 INFO [channelCmd] fetch -> Retrieving last config block: 0
2024-03-21 15:48:56.774 KST 0004 INFO [cli.common] readBlock -> Received block: 0

cd ..

# localhost:8050은 orderer ip
peer channel update -f channel-artifacts/config_update_in_envelope.pb -c channel1 -o localhost:8050  --ordererTLSHostnameOverride orderer2.fmd.com --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem"

# 아래와 같은 결과 확인
2024-03-21 15:49:09.382 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-21 15:49:09.411 KST 0002 INFO [channelCmd] update -> Successfully submitted channel update

slave2 node

peer channel fetch config channel-artifacts/config_block.pb -o localhost:9050 --ordererTLSHostnameOverride orderer3.fmd.com -c channel1 --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem"
cd channel-artifacts
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
jq '.data.data[0].payload.data.config' config_block.json > config.json
cp config.json config_copy.json
jq '.channel_group.groups.Application.groups.Org2MSP.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "peer0.org2.fmd.com","port": 9051}]},"version": "0"}}' config_copy.json > modified_config.json
configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
configtxlator compute_update --channel_id channel1 --original config.pb --updated modified_config.pb --output config_update.pb
configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
echo '{"payload":{"header":{"channel_header":{"channel_id":"channel1", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb

# 아래와 같은 결과 확인
2024-03-21 15:49:45.490 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-21 15:49:45.496 KST 0002 INFO [cli.common] readBlock -> Received block: 1
2024-03-21 15:49:45.496 KST 0003 INFO [channelCmd] fetch -> Retrieving last config block: 1
2024-03-21 15:49:45.498 KST 0004 INFO [cli.common] readBlock -> Received block: 1

cd ..
peer channel update -f channel-artifacts/config_update_in_envelope.pb -c channel1 -o localhost:9050  --ordererTLSHostnameOverride orderer3.fmd.com --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem"

# 아래와 같은 결과 확인
2024-03-21 15:51:33.534 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-21 15:51:33.570 KST 0002 INFO [channelCmd] update -> Successfully submitted channel update

peer channel getinfo -c channel1

# 아래와 같은 결과 확인
2024-03-21 15:51:57.559 KST 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
Blockchain info: {"height":3,"currentBlockHash":"8FJI2CTwDrsSGRbbVoxz8RRRV1B4UMfOVrPq83zOZvw=","previousBlockHash":"JbP3Hjw47IiTIno81I1Vsg5onoZ4x84h9sTa2nGHV2s="}

CHAIN-CODE PACKAGING AND DEPLOY

slave1 node

cd ../asset-transfer-basic/chaincode-go
GO111MODULE=on go mod vendor
cd ../../kopo-network/

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
peer lifecycle chaincode package familicare.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label familicare_1.0

# 위 명령을 실행하면 현재 디렉터리에 familicare.tar.gz 파일이 생성된다.

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.fmd.com/peers/peer0.org1.fmd.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.fmd.com/users/Admin@org1.fmd.com/msp
export CORE_PEER_ADDRESS=localhost:7051
peer lifecycle chaincode install familicare.tar.gz

# 위 명령후에 아래와 같이 결과가 반환됨
2024-03-21 16:06:35.956 KST 0001 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Installed remotely: response:<status:200 payload:"\nOfamilicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74\022\016familicare_1.0" >
2024-03-21 16:06:35.958 KST 0002 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Chaincode code package identifier: familicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74

# 위에서 반환된 identifier를 변수에 대입한다.
export CC_PACKAGE_ID=familicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.fmd.com/users/Admin@org1.fmd.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.fmd.com/peers/peer0.org1.fmd.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051
peer lifecycle chaincode approveformyorg -o localhost:8050 --ordererTLSHostnameOverride orderer2.fmd.com --channelID channel1 --name familicare --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem"

# 위 명령후에 아래와 같은 결과가 반환됨
2024-03-21 16:09:15.972 KST 0001 INFO [chaincodeCmd] ClientWait -> txid [876b7a2f69d56ee310949c83a71a7ed69892d2e83f9d916935a8e9d9aa828840] committed with status (VALID) at localhost:7051

slave2 node

cd ../asset-transfer-basic/chaincode-go
GO111MODULE=on go mod vendor
cd ../../kopo-network/

export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
peer lifecycle chaincode package familicare.tar.gz --path ../asset-transfer-basic/chaincode-go/ --lang golang --label familicare_1.0

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.fmd.com/peers/peer0.org2.fmd.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.fmd.com/users/Admin@org2.fmd.com/msp
export CORE_PEER_ADDRESS=localhost:9051
peer lifecycle chaincode install familicare.tar.gz
export CC_PACKAGE_ID=familicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74

peer lifecycle chaincode approveformyorg -o localhost:9050 --channelID channel1 --name familicare --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem"
peer lifecycle chaincode checkcommitreadiness --channelID channel1 --name familicare --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer3.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem" --output json

# 위 명령후에 아래와 같이 결과가 반환됨
{
	"approvals": {
		"Org1MSP": true,
		"Org2MSP": true
	}
}

slave1 node

peer lifecycle chaincode checkcommitreadiness --channelID channel1 --name familicare --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem" --output json

# 아래와 같은 결과 확인
{
	"approvals": {
		"Org1MSP": true,
		"Org2MSP": true
	}
}

peer lifecycle chaincode commit -o localhost:8050 --ordererTLSHostnameOverride orderer2.fmd.com --channelID channel1 --name familicare --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem" --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.fmd.com/peers/peer0.org1.fmd.com/tls/ca.crt"

# 아래와 같은 결과 확인
2024-03-22 02:56:25.588 UTC 0001 INFO [chaincodeCmd] ClientWait -> txid [82dbd8fb7e219db531c66dc6afbdc2ce11d58b6eef1fe27ac4ba62aee6359610] committed with status (VALID) at localhost:7051

peer lifecycle chaincode querycommitted --channelID channel1 --name familicare --cafile "${PWD}/organizations/ordererOrganizations/fmd.com/orderers/orderer2.fmd.com/msp/tlscacerts/tlsca.fmd.com-cert.pem"

# 아래와 같은 결과 확인
Committed chaincode definition for chaincode 'familicare' on channel 'channel1':
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]

앵커 peer가 아닌 peer channel join & chaincode install

slave1 node

CORE_PEER_ADDRESS=localhost:8051 peer channel join -b channel-artifacts/channel1.block

# 아래와 같이 결과 확인
2024-03-22 03:01:17.536 UTC 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-22 03:01:17.964 UTC 0002 INFO [channelCmd] executeJoin -> Successfully submitted proposal to join channel

CORE_PEER_ADDRESS=localhost:8051 peer lifecycle chaincode install familicare.tar.gz

# 아래와 같이 결과 확인
2024-03-22 03:01:53.781 UTC 0001 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Installed remotely: response:<status:200 payload:"\nOfamilicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74\022\016familicare_1.0" >
2024-03-22 03:01:53.782 UTC 0002 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Chaincode code package identifier: familicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74

slave2 node

CORE_PEER_ADDRESS=localhost:10051 peer channel join -b channel-artifacts/channel1.block

# 아래와 같이 결과 확인
2024-03-22 03:02:18.903 UTC 0001 INFO [channelCmd] InitCmdFactory -> Endorser and orderer connections initialized
2024-03-22 03:02:19.238 UTC 0002 INFO [channelCmd] executeJoin -> Successfully submitted proposal to join channel

CORE_PEER_ADDRESS=localhost:10051 peer lifecycle chaincode install familicare.tar.gz

# 아래와 같이 결과 확인
2024-03-22 03:03:00.424 UTC 0001 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Installed remotely: response:<status:200 payload:"\nOfamilicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74\022\016familicare_1.0" >
2024-03-22 03:03:00.424 UTC 0002 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Chaincode code package identifier: familicare_1.0:8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74

최종 컨테이너 확인

master node

CONTAINER ID   IMAGE                               COMMAND       CREATED             STATUS             PORTS                                                                                                                             NAMES
42d32a86e8fd   hyperledger/fabric-tools:latest     "/bin/bash"   About an hour ago   Up About an hour                                                                                                                                     cli
6f231411908b   hyperledger/fabric-orderer:latest   "orderer"     About an hour ago   Up About an hour   0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   orderer.fmd.com

slave1 node

CONTAINER ID   IMAGE                                                                                                                                                                     COMMAND                  CREATED             STATUS             PORTS                                                                                                                                           NAMES
83f0fd4a7dd1   dev-peer1.org1.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74-6d16eec83f797d185279698e066caee6091776bb57efded6883ee7b4f571a860   "chaincode -peer.add…"   3 minutes ago       Up 3 minutes                                                                                                                                                       dev-peer1.org1.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74
8acb9853495e   dev-peer0.org1.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74-66144f52d6b4d2cc7bc5b555236c7be6788aca7c542032919196abb924fee317   "chaincode -peer.add…"   8 minutes ago       Up 8 minutes                                                                                                                                                       dev-peer0.org1.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74
464a454d52b1   hyperledger/fabric-tools:latest                                                                                                                                           "/bin/bash"              About an hour ago   Up About an hour                                                                                                                                                   cli
1204aeb168a2   hyperledger/fabric-peer:latest                                                                                                                                            "peer node start"        About an hour ago   Up About an hour   0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:9444->9444/tcp, :::9444->9444/tcp                                                            peer0.org1.fmd.com
46a5b1e20fa5   hyperledger/fabric-peer:latest                                                                                                                                            "peer node start"        About an hour ago   Up About an hour   0.0.0.0:8051->8051/tcp, :::8051->8051/tcp, 7051/tcp, 0.0.0.0:9445->9445/tcp, :::9445->9445/tcp                                                  peer1.org1.fmd.com
92ebf2e1c16e   couchdb:3.1.1                                                                                                                                                             "tini -- /docker-ent…"   About an hour ago   Up About an hour   4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp, :::5984->5984/tcp                                                                                   couchdb0
dc9d3b584e6b   hyperledger/fabric-orderer:latest                                                                                                                                         "orderer"                About an hour ago   Up About an hour   0.0.0.0:8050->8050/tcp, :::8050->8050/tcp, 0.0.0.0:8053->8053/tcp, :::8053->8053/tcp, 7050/tcp, 0.0.0.0:10443->10443/tcp, :::10443->10443/tcp   orderer2.fmd.com

slave2 node

CONTAINER ID   IMAGE                                                                                                                                                                     COMMAND                  CREATED             STATUS             PORTS                                                                                                                                           NAMES
79382935bbeb   dev-peer1.org2.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74-6a16ee4c297e5eba5c0a76096af03d33df60111e0be094603894611617cb1118   "chaincode -peer.add…"   4 minutes ago       Up 4 minutes                                                                                                                                                       dev-peer1.org2.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74
f64206d31394   dev-peer0.org2.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74-a33f291a53adba2a837608c189daf9702ec2075f2962e6d716fd92e3cdae0ce9   "chaincode -peer.add…"   11 minutes ago      Up 11 minutes                                                                                                                                                      dev-peer0.org2.fmd.com-familicare_1.0-8b9674d06bdaa241d24cbec38b03d5d67582e6e31830237be0bc63707b2acf74
a54021147d34   hyperledger/fabric-tools:latest                                                                                                                                           "/bin/bash"              About an hour ago   Up About an hour                                                                                                                                                   cli
f9ebadacd9ad   hyperledger/fabric-peer:latest                                                                                                                                            "peer node start"        About an hour ago   Up About an hour   0.0.0.0:9051->9051/tcp, :::9051->9051/tcp, 7051/tcp, 0.0.0.0:9445->9445/tcp, :::9445->9445/tcp                                                  peer0.org2.fmd.com
257da62e8744   hyperledger/fabric-peer:latest                                                                                                                                            "peer node start"        About an hour ago   Up About an hour   0.0.0.0:10051->10051/tcp, :::10051->10051/tcp, 7051/tcp, 0.0.0.0:10445->10445/tcp, :::10445->10445/tcp                                          peer1.org2.fmd.com
a2edca3f18eb   hyperledger/fabric-orderer:latest                                                                                                                                         "orderer"                About an hour ago   Up About an hour   0.0.0.0:9050->9050/tcp, :::9050->9050/tcp, 0.0.0.0:9053->9053/tcp, :::9053->9053/tcp, 7050/tcp, 0.0.0.0:11443->11443/tcp, :::11443->11443/tcp   orderer3.fmd.com

rest-api-go

실행위치

ls /home/hyperledger/fabric-samples/asset-transfer-basic/rest-api-go

-rw-r--r--. 1 root root 1292 May 17  2023 README.md
-rw-r--r--. 1 root root  519 May 18  2023 go.mod
-rw-r--r--. 1 root root 2710 May 18  2023 go.sum
-rwxr-xr-x. 1 root root  174 May 18  2023 hlfgw.sh
-rw-r--r--. 1 root root  708 May 18  2023 main.go
-rw-r--r--. 1 root root 3472 Mar 22 01:50 out.log
drwxr-xr-x. 2 root root   74 May 18  2023 web

# 위 파일들 중 hlfwq.sh를 실행시켜야 한다.
# 하지만 현재 kopo-network 프로젝트에서는 kopo-network.sh파일에 저걸 실행시키는 코드가 삽입되어 있다.
# 아래는 kopo-network.sh 파일의 일부이다.
171 function networkUp() {
172   checkPrereqs
173
174   COMPOSE_FILES="-f compose/${COMPOSE_FILE_BASE} -f compose/${CONTAINER_CLI}/${CONTAINER_CLI}-${COMPOSE_FILE_BASE}"
175
176   if [ "${DATABASE}" == "couchdb" ]; then
177     COMPOSE_FILES="${COMPOSE_FILES} -f compose/${COMPOSE_FILE_COUCH} -f compose/${CONTAINER_CLI}/${CONTAINER_CLI}-${COMPOSE_FILE_COUCH}"
178   fi
179
180   DOCKER_SOCK="${DOCKER_SOCK}" ${CONTAINER_CLI_COMPOSE} ${COMPOSE_FILES} up -d 2>&1
181
182   $CONTAINER_CLI ps -a
183   if [ $? -ne 0 ]; then
184     fatalln "Unable to start network"
185   fi
186
187   sh ../asset-transfer-basic/rest-api-go/hlfgw.sh &
188 }

# 위의 187라인
sh ../asset-transfer-basic/rest-api-go/hlfgw.sh &

실행확인

netstat -antp | grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      23435/main

PROXY SERVER 설정

nginx는 slave2에서만 설치해서 loadbalancer 역할을 수행함

nginx 설치

vi /etc/yum.repos.d/nginx.repo

# 아래 내용추가
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

yum install -y nginx

nginx 설정파일 수정

vi /etc/nginx/conf.d/default.conf

# 아래 내용대로 수정
upstream hlfgw {
   server 192.168.0.241:3000;
   server 192.168.0.242:3000;
}
server {
    # listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    listen 8070;
    listen [::]:8070;
    location /invoke {
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_connect_timeout 300;
                proxy_send_timeout 300;
                proxy_read_timeout 300;
                send_timeout 3000;
                proxy_pass http://hlfgw/invoke;
    }
    location /query {
                proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_connect_timeout 300;
                proxy_send_timeout 300;
                proxy_read_timeout 300;
                send_timeout 3000;
                proxy_pass http://hlfgw/query;
    }
}

설정파일 오류 확인

nginx -t

# 정상결과
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx 사용 포트 및 권한 부여

semanage port -a -t http_port_t -p tcp 8070
setsebool httpd_can_network_connect on -P

nginx 재시작

systemctl restart nginx

nginx logfile

access log : tail -f /var/log/nginx/access.log
error log : tail -f /var/log/nginx/error.log

profile
끊임없이 노력하는 개발자

0개의 댓글