百度区块链引擎BBE

    Dapp部署

    Dapp部署是指将我们开发完成的Dapp应用层进行部署。因为Dapp应用层只是一个前端React App,理论上我们只是寻找一个Dapp js的托管服务器。当用户访问Dapp的线上地址时,浏览器获得HTML+CSS+JS,之后所有的交互响应都不再与托管服务器有关。

    这里我们依托百度云CCE容器服务来部署我们的托管服务器。

    什么是CCE容器服务

    CCE容器服务是基于Kubernetes构建的轻量级分布式容器编排引擎。事实上,百度云BBE服务提供的区块链节点也是托管在CCE集群上的。Kubernetes能够帮助用户快速部署定义好的应用服务,并且能够完全自动化地对应用实例进行健康检查、故障重启自恢复。另外还有应用实例自动水平扩缩容、持续集成构建流、配置管理、服务发现等高级功能。Kubernetes是业界服务托管的趋势。

    使用CCE做应用托管,首先需要将应用打包成Docker镜像。因为Kubernetes对应用实例(Pod)的所有定义都是围绕容器实例(Container)来完成的。

    Dapp镜像化

    Docker是一种有助于加速开发和部署过程的技术,Docker可以很轻松地将小型独立服务运行环境封装起来。 它还有助于消除特定于环境的错误,因为我们可以在本地复制生产环境。

    Docker环境安装

    Docker安装请参考官方文档,一般的,可以使用系统包管理器一键安装。这里不再赘述。本文使用的Docker版本为18.09.02,请读者确保Docker版本至少大于1.9.1。

    Dockerfile定义

    我们在项目根目录下创建一个Dockerfile文件,内容为

    FROM node:10.16.0
    RUN mkdir /usr/src/appdock
    WORKDIR /usr/src/app
    ENV PATH /usr/src/app/node_modules/.bin:$PATH
    COPY package.json /usr/src/app/package.json
    RUN npm install --silent
    COPY . /usr/src/app
    ARG BLOCKCHAIN_TYPE
    ENV BLOCKCHAIN_TYPE='fabric'
    ARG FABRIC_NETWORK_CONFIG_PATH
    ENV FABRIC_NETWORK_CONFIG_PATH='artifacts/test-config.yaml'
    ARG FABRIC_CHANNEL_NAME
    ENV FABRIC_CHANNEL_NAME='nml-channel'
    ARG FABRIC_CHAINCODE_NAME
    ENV FABRIC_CHAINCODE_NAME='map'
    RUN npm run build
    RUN apt-get update && apt-get install -y nginx
    RUN cp -a /usr/src/app/dist/* /var/www/html/
    RUN echo "daemon off;">>/etc/nginx/nginx.conf
    RUN chmod a+x ./entrypoint.sh
    RUN sed -i '53i location ^~ /api/ { proxy_pass http://127.0.0.1:4000; }' /etc/nginx/sites-enabled/default
    EXPOSE 80
    ENTRYPOINT ["./entrypoint.sh"]
    
    //enrtypoint.sh
    #!/bin/bash
    nohup npm run server &
    nginx 

    再创建一个.dockerignore文件,过滤掉不需要载入到镜像内的文件,内容为

    node_modules
    .git
    .gitignore
    README.md

    Docker镜像制作

    运行docker build命令即可

    $ docker build -t notewall-dapp:latest .

    构建好本地镜像后,我们可以直接在本地运行这个Docker镜像,确认镜像没有问题。

    $ docker run -p 8080:80 -d notewall-dapp:latest

    用浏览器访问本地的8080,就能够看到我们的便签板应用啦。

    Docker镜像上传

    接下来我们将构建好的Dapp镜像上传推送到百度云镜像仓库,用来在百度云CCE服务上直接部署Dapp。 上传前我们需要开通镜像,请参考百度云镜像仓库使用说明 配合本文档,我们提供了一个已经上传好的镜像地址 hub.baidubce.com/jpaas-public/notewall-dapp:latest

    如何用百度CCE服务发布Dapp

    在上传完镜像后,我们开始试用CCE服务。

    1. 首先我们需要按照使用说明创建集群。
    2. 我们打开创建好的CCE集群控制台,进入集群列表页,点击集群右侧的“控制台”
      devf_fabric_22.png
    3. 在新打开的控制台中,我们点击右上角“+创建”按钮,在“从文本输入框创建”标签页中,我们输入如下yaml内容
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: notewall
      labels:
        app: notewall
    spec:
      type: LoadBalancer 
      ports:
      - port: 80
      selector:
        app: notewall
    ---
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: notewall
    spec:
      selector:
        matchLabels:
          app: notewall
      replicas: 3
      template:
        metadata:
          labels:
            app: notewall
        spec:
          containers:
          - name: notewall-dapp
            image: hub.baidubce.com/jpaas-public/notewall-dapp:latest
            ports:
            - containerPort: 80

    如图所示

    devf_fabric_23.png
    点击上传后,就会按照上述yaml描述的资源规范在CCE集群创建一个外网可以访问的服务。

    1. 稍等片刻,我们可打开左侧“服务发现与负载均衡”,“服务”列表内找到notewall服务,点击外部端点提供的IP:Port形式的URL就能访问到便签板Dapp

    到此我们的便签板Dapp部署完成,外网已经能够访问。

    一篇
    Dapp应用层开发
    一篇
    API参考