Step-by-Step: Hyperledger Fabric mit Docker bereitstellen
Um sich einen Überblick zu Blockchains in Unternehmen zu machen, und eine eigene Blockchain zu erstellen, ist natürlich Praxiswissen notwendig.
Um in Unternehmen Smart Contracts zur Verfügung zu stellen, gehören Blockchains auf Basis von Hyperledger Fabric zu den wichtigsten Möglichkeiten.
Die Installation der Software kann auf verschiedenen Betriebssystemen erfolgen. Wir zeigen in diesem Beitrag, wie Hyperledger Fabric mit einer Test-Blockchain auf Basis von Linux zur Verfügung gestellt werden kann.
Der Betrieb ist auch auf virtuellen Computern möglich. Sinnvoll ist die Verwendung von Computern, die mindestens über 8 GB Arbeitsspeicher verfügen.
Natürlich ist es auch möglich, auf kleineren Rechnern Hyperledger Fabric für Test- und Entwicklungszwecke in Betrieb zu nehmen.
Die Entwickler von Hyperledger Fabric stellen die jeweils aktuelle Version von Fabric 2.x und 1.x auch als Container-Image zur Verfügung.
Auch ältere Versionen sind über diesen Weg installierbar. Wir gehen in diesem Beitrag von der Installation der Version 2.3.2 von Hyperledger Fabric aus.
Der Betrieb einer eigenen Blockchain ist ohnehin ideal in Microservices-Umgebungen, da beim Betrieb mehrerer Knoten die Verwendung von Containern der effektivste Weg sind. Es gibt mehrere Möglichkeiten Hyperledger Fabric auf einem Computer in Betrieb zu nehmen.
Für Entwicklungsumgebungen geht das auch ohne Server, wer natürlich eine eigene Blockchain im Unternehmen betreiben will, benötigt entsprechende Hardware.
Wir gehen in diesem Beitrag von der Installation von Hyperledger unter Docker auf Linux-Computern mit Ubuntu 21.04 aus. Es ist aber auch problemlos möglich, Hyperledger mit Docker auf Windows und macOS zu installieren.
Wichtig ist, dass auf den Computern Docker zur Verfügung steht. Docker ist die Basis für den Betrieb von Hyperledger Fabric und der eigenen Blockchain mit Hyperledger Fabric.
Einstieg in die Installation von Hyperledger Fabric
Die einzelnen Komponenten von Hyperledger Fabric stehen nach der Installation und ersten Inbetriebnahme als einzelne Docker-Container zur Verfügung. Docker steht als Open Source zunächst kostenlos zur Verfügung. Die Container für Hyperledger Fabric nutzen Docker zur Bereitstellung.
Dazu bieten die Entwickler von Hyperledger Fabric Images für die verschiedenen Container, die Hyperledger benötigt.
Der Download erfolgt direkt über Docker auf der Seite von Hyperledger Fabric. Hyperledger Fabric kann als Version 2.x und als 1.x über Docker-Container in Betrieb genommen werden.
Die Installation kann auf Ubuntu erfolgen, grundsätzlich ab Version 16.x. Wir installieren in diesem Beitrag Docker und Hyperledger Fabric auf Ubuntu 21.04. Vor der Installation sollte die Linux-Distribution zunächst auf dem aktuellen Stand sein. Das geht mit:
sudo apt-get update
sudo apt-get upgrade
Da Hyperledger Fabric einige Anpassungen auf dem System benötigt, kann es sinnvoll sein, ein eigenes Benutzerkonto für den Betrieb der eigenen Blockchain anzulegen.
Das ist keine zwingende Voraussetzung, stellt aber sicher, dass alle Dateien und Einstellungen unter einem bestimmten Benutzerkonto zur Verfügung stehen und die Benutzerrechte auch korrekt gesetzt sind.
In den folgenden Schritten legen wir einen neuen Benutzer „fabric“ an, den wir für die Installation und den Betrieb von Hyperledger Fabric und der ersten Blockchain nutzen wollen.
Nach dem Anlegen ist es möglich, im laufenden Betrieb zu dem erstellten Konto zu wechseln. Es ist also keine Neuanmeldung an Ubuntu notwendig, der Wechsel erfolgt im Terminal:
sudo adduser fabric
sudo usermod -aG sudo fabric
su – fabric
Die weiteren Schritte erfolgen anschließend über das neu erstellte Benutzerkonto „fabric“. Im Terminal ist es möglich jederzeit mit „exit“ den Benutzer abzumelden und mit „su – fabric“ zu dem Benutzer zu wechseln. Das Kennwort für die Anmeldung wird beim Anlegen festgelegt.
Docker für den Betrieb von Hyperledger installieren
Für den Betrieb von Hyperledger Fabric ist Docker auf dem Computer nötig. Die Installation kann auf verschiedenen Wegen erfolgen. Grundsätzlich geht das auch über die Paketverwaltung.
Zusammen mit Docker ist es auch sinnvoll, die anderen Voraussetzungen für den Betrieb von Hyperledger Fabric mit Docker zu installieren. Im Terminal von Linux steht dazu das neu erstellte Benutzerkonto zur Verfügung:
sudo apt-get install curl git docker.io docker-compose nodejs npm python
Alle Pakete sollten auf dem Computer zur Verfügung stehen, Fehlermeldungen sollten keine erscheinen. Nach der Installation der Systemvoraussetzungen ist es ratsam, den Paketmanager „npm“ auf den aktuellsten Stand zu bringen.
Die aktuelle Version ist nach dem Aufrufen von „npm“ zu sehen. Der Befehl zeigt gleich auch noch den ausführlichen Befehl zur Aktualisierung an, zum Beispiel:
sudo npm install -g [email protected]
Der nächste Schritt besteht darin, Docker einzurichten:
sudo usermod -a -G docker $USER
sudo systemctl start docker
sudo systemctl enable docker
Dadurch ist sichergestellt, dass der erstellte Benutzer in der Docker-Gruppe auf dem Linux-Computer Mitglied ist und mit Docker arbeiten kann.
Ohne die Aufnahme in diese Gruppe muss ständig mit „sudo“ gearbeitet werden, was die Konfiguration von Hyperledger Fabric unnötig verkompliziert und zu Fehlern führt. Nach der Eingabe der Befehle darf der Benutzer „fabric“ mit Docker arbeiten, um eine eigene Blockchain mit Hyperledger Fabric zu erstellen.
Außerdem starten die Befehle den Docker-Daemon und stellen sicher, dass Docker automatisch mit dem Computer startet. Mit dem folgenden Befehl kann überprüft werden, ob die Docker-Installation geklappt hat und welche Version auf dem Computer installiert ist:
docker –version
Es darf keine Fehlermeldung erscheinen. Danach ist sichergestellt, dass die Basis für den Betrieb einer eigenen Blockchain mit Hyperledger Fabric zur Verfügung steht.
Die Verwaltung der Docker-Container, also auch der Container für Hyperledger Fabric erfolgt mit dem Befehl „docker“. Mit „docker ps -a“ zeigt der Befehl die laufenden Container an. Für die Befehle ist „sudo“ nötig, wenn der Benutzer nicht alle Rechte zur Verwaltung von Docker erhalten hat.
Um die Shell gleich auf die jeweiligen Rechte zu ändern, ist es möglich, mit „sudo -i“ in die Sudo-Shell zu wechseln. Allerdings ist es nicht empfohlen, auf einem produktiven System dauerhaft mit Root-Rechten zu arbeiten.
Auf einem Testcomputer ist das grundsätzlich möglich, aber ebenfalls nicht zu empfehlen. Besser ist die beschriebene Verwendung eines eigenen Benutzers, wie in diesem Beitrag beschrieben.
Das Erstellen von Containern erfolgt auf Basis von Images. Dazu müssen Images auf dem Server zur Verfügung stehen, die auf dem Docker installiert sind. Images lassen sich aus dem Internet herunterladen und direkt in Docker integrieren, das gilt auch für die Container von Hyperledger Fabric.
Die vorhandenen und bereits installierten Images zeigt Docker mit „docker images“ im Terminal an. Nach der Installation von Docker gibt es natürlich noch keine Container.
Damit Hyperledger Fabric über Docker bereitgestellt werden kann, ist es daher notwendig zunächst die jeweiligen Container-Images bei Hyperledger herunterzuladen.
Zunächst sind auf dem Computer aber weitere Vorbereitungen notwendig, damit die Container später auch funktionieren.
Vorbereitungen für den Betrieb von Hyperledger Fabric mit Docker
Bevor Hyperledger Fabric über Docker zur Verfügung gestellt werden kann, sind noch Anpassungen in Linux notwendig. Zunächst ist die aktuelle Installation der Programmiersprache Go notwendig. Die aktuelle Version ist direkt über die Webseite von Go zu finden. Die Installation erfolgt zum Beispiel mit:
wget https://golang.org/dl/go1.16.5.linux-amd64.tar.gz
tar -xzvf go1.16.5.linux-amd64.tar.gz
sudo mv go/ /usr/local
Nach dem Download von Go sind in .bashrc noch Anpassungen notwendig, zum Beispiel über:
pico ~/.bashrc
Am Ende der Datei müssen die beiden folgenden Zeilen integriert werden. Beim Beenden der Bearbeitung muss die Datei natürlich gespeichert werden:
export GOPATH=/usr/local/go
export PATH=$PATH:$GOPATH/bin
Bei der Verwendung von pico erfolgt das Speichern mit STRG+O. Mit STRG+X wird der Editor geschlossen. Um ein Terminal zu beenden, steht der Befehl „exit“ zur Verfügung.
Um in einem Terminal zu dem Benutzerkonto „fabric“ zu wechseln, kann der Befehl „su – fabric“ genutzt werden. Dieser Wechsel ist im laufenden Betrieb häufiger notwendig.
Hyperledger-Images herunterladen
Die Hyperledger-Images stehen direkt auf der Webseite der Entwickler von Hyperledger Fabric zur Verfügung. Für einen schnellen Download stehen bereits gekürzte Links bereit. In diesem Beispiel installieren wir die Version 2.3.2 von Hyperledger Fabric:
curl -sSL https://bit.ly/2ysbOFE | bash -s 2.3.2
Bei der richtigen Eingabe des Befehls lädt der Computer anschließend die Images für Hyperledger Fabric herunter. Im Fenster sollten keine Fehler erscheinen, insbesondere keine Meldungen von Docker.
Nach dem Abschluss des Downloads, der durchaus einige Zeit dauern kann, zeigt das Terminal die einzelnen Images von Hyperledger Fabric an. Die Images lassen sich mit Docker auch über den bereits erwähnten Befehl „docker images“ anzeigen.
Sind die Container-Images verfügbar, stellt der Rest der Installation von Hyperledger Fabric kein Problem dar.
Welche Version von Hyperledger Fabric Linux auf den Computer herunterladen soll, bestimmt der Befehl „bash -s 2.3.2“. Neben dieser Version stehen hier auch die verschiedenen anderen Versionen von Hyperledger Fabric zur Verfügung.
Erstes Hyperledger Fabric-Netzwerk aufbauen
Basis der Konfiguration und Verwendung von Docker ist das Skript „./network.sh“. Dieses bietet zahlreiche Optionen zur Verwendung von Hyperledger Fabric.
Das Skript befindet sich, wie die anderen Skripte zur Verwendung von Hyperledger Fabric, im Verzeichnis „fabric-samples/test-network“. Eine Hilfe für alle Optionen des Skriptes sind mit „./network.sh -h“ zu sehen.
Nach dem erfolgreichen Download der Images kann ein erstes Netzwerk gestartet werden. Dazu stehen bereits vorgefertigte Befehle zur Verfügung:
cd fabric-samples/test-network
./network.sh up
Der Befehl startet automatisch die notwendigen Container auf Basis der heruntergeladenen Images. Dabei startet Hyperledger Fabric ein Testnetzwerk mit zwei Peer-Knoten und einem Ordering-Knoten. Die Container zeigt der Befehl anschließend im Terminal an.
Die laufenden Container sind im Terminal über „docker ps -a“ zu sehen. Auch dieser Befehl löst das Erstellen von Containern aus. Nach dem Bereitstellen des Codes sollten Peer- und Orderer-Container zur Verfügung stehen und gestartet sein.
Das Testnetzwerk enthält zwei Peer-Organisationen, Org1 und Org2. Dazu kommt eine Besteller-Organisation, die den Bestellservice des Netzwerks verwaltet.
Die Namen der Knoten sind mit „docker ps -a“ zu sehen. Der Befehl ist immer mal wieder sinnvoll, um zu überprüfen, ob die Container für das Netzwerk gestartet sind und funktionieren.
Peers sind die grundlegenden Komponenten im Fabric-Netzwerk. Sie speichern das Blockchain-Ledger und validieren Transaktionen, bevor sie in das Ledger übertragen werden. Peers führen auch die Smart Contracts aus.
Im Testnetzwerk betreibt jede Organisation einen Peer mit den Bezeichnungen peer0.org1.example.com und peer0.org2.example.com. Der Bestellknoten auf dem Computer hat die Bezeichnung orderer.example.com.
Während das Testnetzwerk nur einen Bestellservice mit einem Knoten verwendet, würde ein Produktionsnetzwerk über mehrere Bestellknoten verfügen, die wiederum von einer oder mehreren Besteller-Organisationen betrieben werden.
Wer das Netzwerk nicht mehr benötigt, kann es mit dem folgenden Befehl im gleichen Verzeichnis beenden:
cd fabric-samples/test-network
./network.sh down
Um ein produktives Netzwerk aufzubauen, steht in der Dokumentation von Hyperledger Fabric die Seite „Deploying a production network“ ansehen.
Mit Hyperledger Fabric arbeiten
Sobald das Netzwerk von Hyperledger Fabric gestartet ist, steht die Blockchain-Infrastruktur zur Verfügung, und Entwickler können mit ihrer Arbeit beginnen. Mit dem Channel können Transaktionen zwischen Org1 und Org2 erstellt werden.
Channels sind eine private Ebene der Kommunikation zwischen Netzwerkmitgliedern. Die Channels stehen nur Organisationen zur Verfügung, die Betreiber der Blockchain in den Channel eingeladen haben. Für andere Mitglieder des Netzwerks sind Channels unsichtbar.
Jeder Kanal hat ein eigenes Blockchain-Ledger. Mitglieds-Organisationen verbinden ihre Peers mit dem Channel, um das Channel-Ledger zu speichern und die Transaktionen im Kanal zu validieren. Um etwa einen Test-Channel im Testnetzwerk zu erstellen, ist der folgende Befehl notwendig:
./network.sh createChannel
Es ist auch möglich, einen Channel mit eigenem Namen zu erstellen, zum Beispiel mit:
./network.sh createChannel -c channel1
Natürlich können auch mehrere Channels in Betrieb sein, die wiederum mit unterschiedlichen Organisationen verbunden sind. Sobald der Kanal zur Verfügung steht, lassen sich Smart Contracts erstellen, die wiederum mit dem Channel-Ledger interagieren.
Anwendungen auf den Computern im Blockchain-Netzwerk können Smart Contracts aufrufen, um Assets auf dem Ledger zu erstellen sowie diese Assets zu ändern und zu übertragen. Auch das Abfragen von Smart Contracts ist möglich, um Daten im Ledger zu lesen.
Mehrfache Signaturen von unterschiedlichen Organisationen sind ein wichtiger Bestandteil des Vertrauensmodells von Hyperledger Fabric. Dadurch ist sichergestellt, dass eine Organisation in einem Channel den Ledger ihres Peers nicht manipulieren kann. Um eine Transaktion zu signieren, muss jede Organisation den Smart Contract auf ihrem Peer aufrufen und ausführen.
Fabric stellt Smart Contracts in Paketen zur Verfügung, die als Chaincode bezeichnet werden. Ein Chaincode ist auf den Peers einer Organisation installiert und wird in einem Kanal bereitgestellt.
Nachdem mit „network.sh“ einen Channel erstellt wurde, ist es möglich Chaincode zu erstellen. Im Channel ist es jetzt ebenfalls möglich, Code zu programmieren und Smart Contracts in der eigenen Blockchain bereitzustellen. Um Chaincode bereitzustellen, wird unter anderem der folgende Befehl verwendet:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go