Dapp部署
所有文档

          超级链BaaS平台

          Dapp部署

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

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

          什么是CCE容器服务

          CCE容器服务是基于Kubernetes构建的轻量级分布式容器编排引擎。事实上,超级链BaaS平台服务提供的区块链节点也是托管在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参考