Scénario : Exécuter le code de chaîne en tant que service

L'exemple suivant illustre l'exécution du code de chaîne FabCar en tant que service externe (un pod dans la grappe Kubernetes) que vous pouvez ensuite déployer dans Oracle Blockchain Platform.

Avant d'effectuer les étapes suivantes, déployez le code de chaîne en tant que paquetage externe dans Oracle Blockchain Platform.

  1. Clonez le répertoire GitHub dans le référentiel hyperledger/fabric-samples qui contient fabcar/external. Le répertoire contient la version externe du code de chaîne FabCar dans Go, fabcar.go et un fichier Dockerfile. Ignorez les fichiers metadata.json et chaincode.env.example.
  2. Modifiez le fichier Dockerfile comme indiqué dans l'exemple suivant :
    # Use the Go image from Docker Hub with specified versions for Go and Alpine Linux
    FROM golang:1.13.8-alpine3.10
    
    # Create a directory named "chaincode" in the image
    RUN mkdir /chaincode
    
    # Set "/chaincode" as the working directory within the image
    WORKDIR /chaincode
    
    # Copy the contents of the local directory into "/chaincode" in the image
    COPY . .
    
    # Fetch and install Go dependencies for the project
    RUN go get -d -v ./...
    
    # Install Go dependencies
    RUN go install -v ./...
    
    # Compile the Go code in the current directory, creating an executable binary named "fabcar"
    RUN go build -o fabcar .
    
    # Expose port 9999, indicating that the application within the container will listen on this port
    EXPOSE 9999
    
    # Set the default command to run the "fabcar" executable when the container starts
    CMD ["/chaincode/fabcar"]

    Cette séquence de commandes définit l'image de base pour la création de la nouvelle image sur l'image Go avec des versions spécifiques pour Go et Alpine Linux, crée un répertoire, définit ce répertoire comme le répertoire de travail, copie le contenu local dans l'image, extrait et installe les dépendances Go, compile le code Go, configure le conteneur pour qu'il écoute sur le port 9999 et définit la commande par défaut pour exécuter l'exécutable fabcar.

  3. Exécutez la commande suivante pour créer l'image Docker, qui crée une image Docker nommée fabcar-sample, qui peut ensuite être poussée vers un référentiel.
    docker build -t fabcar-sample .
  4. Créez un fichier YAML de déploiement Kubernetes pour exécuter l'image Docker qui contient le code de chaîne. L'exemple suivant présente un fichier deployment.yaml. Le référentiel à partir duquel l'image Docker est extraite est repository.example.org. Le nom de clé secrète Kubernetes utilisé pour extraire des images est ocirsecret. La valeur CHAINCODE_SERVER_ADDRESS est 0.0.0.0 :9999, ce qui indique que le serveur est configuré pour accepter les connexions entrantes sur le port 9999 à partir de toute adresse IP associée à l'ordinateur. Obtenez la valeur CHAINCODE_ID à partir de l'ID ensemble de code de chaîne affiché lors du déploiement sur le noeud pair dans Oracle Blockchain Platform en sélectionnant le type de code de chaîne externe et en chargeant un fichier .zip. Dans l'interface utilisateur d'Oracle Blockchain Platform, l'ID code de chaîne est affiché sous la forme chaincode_name :package_ID. Pour le code de chaîne Java, la variable d'ID chaîne est appelée CORE_CHAINCODE_ID_NAME.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: external-fabcar-node
    namespace: chaincode
    labels:
    chaincode-type: external
    chaincode-name: external-fabcar-node
    spec:
    replicas: 1
    selector:
    matchLabels:
    chaincode-type: external
    chaincode-name: external-fabcar-node
    template:
    metadata:
    labels:
    chaincode-type: external
    chaincode-name: external-fabcar-node
    spec:
    imagePullSecrets:
    - name: ocirsecret
    containers:
    - env:
    - name: CHAINCODE_SERVER_ADDRESS
    value: "0.0.0.0:9999"
    - name: CHAINCODE_ID
    value: "ext-fabcar-node:7f953544f26124914c29467d5079f601ddefa53375fffec830ecd70c13547877"
    image: repository.example.org/blockchain/fabcar-sample:latest
    imagePullPolicy: Always
    name: assettransfer
    ports:
    - containerPort: 9999
    name: grpc
    protocol: TCP
    
    
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
    labels:
    chaincode-name: external-fabcar-node
    chaincode-type: external
    name: external-fabcar-node
    namespace: chaincode
    spec:
    ports:
    - name: grpc
    port: 9999
    protocol: TCP
    targetPort: 9999
    selector:
    chaincode-name: external-fabcar-node
    chaincode-type: external
    type: ClusterIP
  5. Exécutez la commande suivante pour générer une clé secrète Kubernetes dans l'espace de noms chaincode. Pour name_of_secret, spécifiez la clé secrète à partir du fichier deployment.yaml. Dans cet exemple, le nom de la clé secrète est ocirsecret.
    kubectl create secret docker-registry name_of_secret -n chaincode --docker-server='repository.example.org/blockchain' --docker-username='your_username' --docker-password='auth_token'
  6. Exécutez la commande suivante pour déployer le module de réseautage et le service Kubernetes.
    kubectl apply -f deployment.yaml

Vous pouvez maintenant exécuter des transactions qui utilisent le code de chaîne externe à partir d'Oracle Blockchain Platform.