Skip to content

Instantly share code, notes, and snippets.

@maxgfr
Last active January 2, 2022 22:39
Show Gist options
  • Save maxgfr/f71f51e2aa5b86c6e7d97309bda16b87 to your computer and use it in GitHub Desktop.
Save maxgfr/f71f51e2aa5b86c6e7d97309bda16b87 to your computer and use it in GitHub Desktop.
Hyperledger X Ubuntu : Single Organization

Hyperledger X Ubuntu : Single Organization

AFTER A REBOOT

sudo reboot
ssh -i ....
nvm use 8
sudo systemctl restart docker
sudo ~/fabric-dev-servers/./startFabric.sh 
cd ~/blockchain-container/dist/
#composer network reset -c PeerAdmin@magma-network -v 1.0.0
composer network install -c PeerAdmin@magma-network -a magma.bna
composer network start --networkName magma-network --networkVersion 1.0.0 -A admin -S adminpw -c PeerAdmin@magma-network

GLOBAL DEPENDENCIES

#On ubuntu 16.04 server
sudo apt-get update
sudo apt-get updgrade
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install g++
sudo apt-get install python
sudo apt-get install golang-go
sudo apt-get -y upgrade
ssh-keygen

NVM

#sudo su
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
#nvm install node
#nvm use node stable
nvm install 8.11.2
nvm use node 8.11.2

DOCKER INSTALL

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
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-COMPOSE INSTALL

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

HYPERLEDGER

npm install -g composer-cli 
npm install -g composer-rest-server 
npm install -g yo
npm install -g generator-hyperledger-composer 
mkdir ~/fabric-dev-servers && cd ~/fabric-dev-servers

curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz
tar -xvf fabric-dev-servers.tar.gz
cd ~/fabric-dev-servers
sudo ./stopFabric.sh
sudo ./teardownFabric.sh
sudo ./downloadFabric.sh
sudo ./startFabric.sh

IF YOU HAVE A PROBLEM

npm uninstall -g composer-cli
npm uninstall -g composer-rest-server
npm uninstall -g yo
npm uninstall -g generator-hyperledger-composer
cd ~/fabric-dev-servers
sudo ./stopFabric.sh
sudo ./teardownFabric.sh

node 8.XX ; npm 5.XX ; composer 0.19.6

# https://github.com/hyperledger/composer/releases
nvm install 8
nvm use 8
# npm install -g composer-cli 

COMPOSER-CLI

1) Create a connection.json and modify your package.json with the good name and version

2) Clone github repo

cat ~/.ssh/id_rsa.pub

git clone git@github.com:maxgfr/blockchain-container

3) Run :

composer card create -p connection.json -u PeerAdmin -c ~/fabric-dev-servers/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem -k ~/fabric-dev-servers/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk -r PeerAdmin -r ChannelAdmin

composer card import -f PeerAdmin@magma-network.card

cd blockchain-container/dist/

composer network install -c PeerAdmin@magma-network -a magma.bna

composer network start --networkName magma-network --networkVersion 1.0.0 -A admin -S adminpw -c PeerAdmin@magma-network

composer card import -f admin@magma-network.card

composer network ping -c admin@magma-network

REST SERVER

To run in background :

export COMPOSER_CARD=admin@magma-network
export COMPOSER_NAMESPACES=always
export COMPOSER_AUTHENTICATION=false
export COMPOSER_MULTIUSER=false
screen
composer-rest-server

To run in docker container :

#composer-rest-server --card admin@magma-network

npm install -g loopback-connector-mongodb

Run a mongodb image

sudo docker run -d --name mongo --network composer_default -p 27017:27017 mongo

Create a dockerfile as below and run

mkdir toto && cd toto
sudo docker build -t myorg/my-composer-rest-server .

Create a envvars.txt and run

source envvars.txt

Run the composer-rest-server container :

sudo docker run \
    -d \
    -e COMPOSER_CARD=${COMPOSER_CARD} \
    -e COMPOSER_NAMESPACES=${COMPOSER_NAMESPACES} \
    -e COMPOSER_AUTHENTICATION=${COMPOSER_AUTHENTICATION} \
    -e COMPOSER_MULTIUSER=${COMPOSER_MULTIUSER} \
    -e COMPOSER_PROVIDERS="${COMPOSER_PROVIDERS}" \
    -e COMPOSER_DATASOURCES="${COMPOSER_DATASOURCES}" \
    -v ~/.composer:/home/composer/.composer \
    --name rest \
    --network composer_default \
    -p 3000:3000 \
    myorg/my-composer-rest-server

To check logs :

sudo docker logs -f rest

If source envvars.txt doesn't work or JSON error :

#sudo -H vi /etc/environment
chmod -R 777 ~/.composer

Create a datasources.json

export COMPOSER_CARD=admin@magma-network
export COMPOSER_NAMESPACES=always
export COMPOSER_AUTHENTICATION=false
export COMPOSER_MULTIUSER=false
export COMPOSER_DATASOURCES=$(<datasources.json)

sudo docker run \
    -d \
    -e COMPOSER_CARD=${COMPOSER_CARD} \
    -e COMPOSER_NAMESPACES=${COMPOSER_NAMESPACES} \
    -e COMPOSER_AUTHENTICATION=${COMPOSER_AUTHENTICATION} \
    -e COMPOSER_MULTIUSER=${COMPOSER_MULTIUSER} \
    -e COMPOSER_DATASOURCES="${COMPOSER_DATASOURCES}"\
    -e NODE_APP_INSTANCE=""\
    -v ~/.composer:/home/composer/.composer \
    --name rest \
    --network composer_default \
    -p 3000:3000 \
    myorg/my-composer-rest-server

Hyperledger Composer - Deployment

Install Composer command

npm install -g composer-cli
npm install -g composer-rest-server
npm install -g generator-hyperledger-composer
npm install -g yo
npm install -g composer-playground
./downloadFabric.sh
./startFabric.sh
./createPeerAdminCard.sh

If you have a problem, please run :

npm uninstall -g composer-cli
npm uninstall -g composer-rest-server
npm uninstall -g generator-hyperledger-composer
npm uninstall -g yo
npm uninstall -g composer-playground
cd ~/fabric-dev-servers
./stopFabric.sh
./teardownFabric.sh
composer card delete -c peeradmin@hlfv1
composer card delete -c admin@XXX
docker kill $(docker ps -q)
docker rm $(docker ps -aq)
docker rmi $(docker images dev-* -q)

After writing your network run :

composer archive create --sourceType dir --sourceName . -a ./dist/XXX.bna && cd dist

composer network install --card PeerAdmin@hlfv1 --archiveFile XXX.bna

composer network start --networkName XXX --networkVersion 0.0.X --card PeerAdmin@hlfv1 --networkAdmin admin --networkAdminEnrollSecret adminpw

composer card import --file admin@XXX.card

composer network ping --card admin@XXX

composer-rest-server --card admin@XXX

If you want to upgrade your network :

#You have to update the package.json in 0.0.X

composer archive create -t dir -n . && mv XXX@0.0.X.bna dist && cd dist

composer network install --archiveFile XXX@0.0.X.bna  --card PeerAdmin@hlfv1

composer network upgrade -c PeerAdmin@hlfv1 -n XXX -V 0.0.X
{
"name": "magma-network",
"x-type": "hlfv1",
"version": "1.0.0",
"peers": {
"peer0.org1.example.com": {
"url": "grpc://0.0.0.0:7051",
"eventUrl": "grpc://0.0.0.0:7053"
}
},
"certificateAuthorities": {
"ca.org1.example.com": {
"url": "http://0.0.0.0:7054",
"caName": "ca.org1.example.com"
}
},
"orderers": {
"orderer.example.com": {
"url": "grpc://0.0.0.0:7050"
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com"
],
"certificateAuthorities": [
"ca.org1.example.com"
]
}
},
"channels": {
"composerchannel": {
"orderers": [
"orderer.example.com"
],
"peers": {
"peer0.org1.example.com": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
}
}
}
},
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300",
"eventHub": "300",
"eventReg": "300"
},
"orderer": "300"
}
}
}
}
{
"db": {
"name": "db",
"connector": "mongodb",
"host": "mongo"
}
}
FROM hyperledger/composer-rest-server
RUN npm install --production loopback-connector-mongodb passport-github && \
npm cache clean --force && \
ln -s node_modules .node_modules
COMPOSER_CARD=admin@magma-network
COMPOSER_NAMESPACES=never
COMPOSER_AUTHENTICATION=false
COMPOSER_MULTIUSER=false
COMPOSER_PROVIDERS='{
"github": {
"provider": "github",
"module": "passport-github",
"clientID": "REPLACE_WITH_CLIENT_ID",
"clientSecret": "REPLACE_WITH_CLIENT_SECRET",
"authPath": "/auth/github",
"callbackURL": "/auth/github/callback",
"successRedirect": "/",
"failureRedirect": "/"
}
}'
COMPOSER_DATASOURCES='{
"db": {
"name": "db",
"connector": "mongodb",
"host": "mongo"
}
}'
composer archive create -t dir -n . && mv example@0.0.1.bna dist && cd dist
composer network install --card PeerAdmin@hlfv1 --archiveFile example@0.0.1.bna
composer network start --networkName example --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file example.card
composer card import --file example.card
composer network ping --card admin@example
composer-rest-server --card admin@example
{
"engines": {
"composer": "^0.19.4"
},
"name": "magma-network",
"version": "1.0.0",
"description": "IOT network",
"scripts": {
"prepublish": "mkdirp ./dist && composer archive create --sourceType dir --sourceName . -a ./dist/magma.bna",
"pretest": "npm run lint",
"lint": "eslint .",
"test": "nyc mocha -t 0 test/*.js && cucumber-js"
},
"keywords": [
"composer",
"composer-network"
],
"author": "Maxime",
"email": "maxgolfier@gmail.com",
"license": "Apache-2.0",
"devDependencies": {
"composer-admin": "^0.19.4",
"composer-cli": "^0.19.4",
"composer-client": "^0.19.4",
"composer-common": "^0.19.4",
"composer-connector-embedded": "^0.19.4",
"composer-cucumber-steps": "^0.19.4",
"chai": "latest",
"chai-as-promised": "latest",
"cucumber": "^2.2.0",
"eslint": "latest",
"nyc": "latest",
"mkdirp": "latest",
"mocha": "latest"
},
"dependencies": {
"npm": "^6.0.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment