美文网首页Java Web架构设计阿里云IT
RAP2-阿里妈妈开源API管理工具容器化部署实践

RAP2-阿里妈妈开源API管理工具容器化部署实践

作者: Code技术资讯 | 来源:发表于2019-03-11 20:42 被阅读6次

    个人博客地址:RAP2-阿里妈妈开源API管理工具容器化部署实践
    微信公众号:Code技术资讯,每日为你带来各种开发/运维干货。


    RAP2是阿里妈妈前端团队开发的API管理平台,和我们常见的如swagger之类的接口管理不同的是,它无需侵入业务代码,并可对API实现灵活、简单的可视化管理,目前已在阿里巴巴内部和许多大企业得到广泛应用。由于博主所在团队的需要,我在公司内部搭建了一套基于docker的rap2平台,现记录搭建过程,供大家参考。

    一、RAP2简介

    如需进一步了解RAP2这个平台,可以参考以下链接:

    RAP官方简介
    RAP2官方在线平台

    二、部署说明

    先来一段官方的介绍:RAP2的平台包含两个组件(对应两个Github Repository)

    • rap2-delos: 后端数据API服务器,基于Koa + MySQLlink
    • rap2-dolores: 前端静态资源,基于React link

    环境要求:

    • Node.js 8.9.4+
    • MySQL 5.7+
    • Redis 4.0+

    下面分别描述前端和后端的部署过程。

    三、后端部署

    rap2-delos后端依赖Mysql和Redis,这两个组件请读者自行安装,官方的安装介绍中有介绍非容器环境的部署,这里也不做介绍,主要介绍基于docker的容器化部署。

    1、clone rap2-delos项目源代码:

    $ git clone https://github.com/thx/rap2-delos.git
    

    2、生成项目镜像。这里有两个方法,第一种是自己参考官方的安装过程build一个docker镜像使用,第二种是使用docker hub上其他人已经做好的镜像(推荐第二种,省时省力,何乐而不为_)。

    $ docker pull blackdog1987/rap2-delos:2.6.aa3be03  ##拉去docker hub上的rap2-delos镜像
    

    3、修改docker-compose启动配置

    此时我们看一看项目的源代码,会发现rap2团队很贴心的为我们准备了一份启动容器所需要的docker-compose.yml文件,内容如下:

    # mail@dongguochao.com
    version: '2.2'
    
    services:
      delos:
        container_name: rap2-delos
        # build from ./Dockerfile
    #    build: .
        # build from images
        image: blackdog1987/rap2-delos:1.0.0
        environment:
          # if you have your own mysql, config it here, and disable the 'mysql' config blow
          - MYSQL_URL=192.168.1.1 # links will maintain /etc/hosts, just use 'container_name'
          - MYSQL_PORT=3306
          - MYSQL_USERNAME=root
          - MYSQL_PASSWD=root
          - MYSQL_SCHEMA=rap2_delos_app # 数据库名称
    
          # redis config
          - REDIS_URL=192.168.1.1
          - REDIS_PORT=6379
    
          # production / development
          - NODE_ENV=production
        working_dir: /app
        privileged: true
        ###### 'sleep 30 && node scripts/init' will drop the tables
        ###### RUN ONLY ONCE THEN REMOVE 'sleep 30 && node scripts/init'
        command: /bin/sh -c 'sleep 30; node scripts/init; node dispatch.js'
        # init the databases
    #    command: sleep 30 && node scripts/init && node dispatch.js
        # without init
    #    command: node dispatch.js
        links:
          - redis
          - mysql
        depends_on:
          - redis
          - mysql
        ports:
          - "38080:8080"  # expose 38080
    
    ###### 若redis与mysql已事先安装完毕,下列配置可以删除 ######
      redis:
        container_name: rap2-redis
        image: redis:4.0.9
    
      # disable this if you have your own mysql
      mysql:
        container_name: rap2-mysql
        image: mysql:5.7.22
        # expose 33306 to client (navicat)
        #ports:
        #   - 33306:3306
        volumes:
          # change './docker/mysql/volume' to your own path
          # WARNING: without this line, your data will be lost.
          - "./docker/mysql/volume:/var/lib/mysql"
        command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES utf8mb4;' --innodb-flush-log-at-trx-commit=0
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: "true"
          MYSQL_DATABASE: "rap2"
          MYSQL_USER: "root"
          MYSQL_PASSWORD
    

    读者只需要关注delos服务的相关配置,将MYSQL和REDIS的变量值修改为自己的配置即可。

    修改完成后执行

    $ docker-compose up -d
    

    后端部署完成,容器暴露了38080端口供外部调用。启动后查看mysql数据库,发现数据库中已初始化相关表信息。

    rap2数据库表

    四、前端部署

    1、拉取rap2-dolores项目代码:

    $ docker pull https://github.com/thx/rap2-dolores.git
    $ cd rap2-dolores
    

    2、构建镜像并启动

    对于前端项目的部署我们有一个基本要求,能做到允许后期修改所访问后端的地址(这个可以通过node调取环境变量的方式来实现,但因为博主是主后端的猿,所以只能另辟蹊径)。

    由于docker hub上别人做好的镜像不能很好的满足上述要求(大部分都没啥说明),我们只能自己构建镜像,首先我们在项目根目录创建Dockerfile文件,内容如下:

    FROM node:10.15.2-alpine
    MAINTAINER zhenzhong.wang
    COPY . /app
    WORKDIR /app
    RUN rm -rf node_modules/ \
        && npm install \
        && npm install -g serve \ 
        && npm run build 
    EXPOSE 5000
    CMD ["serve", "-s", "./build"]
    

    上述Dockerfile可以直接用于项目的最新代码,无需任何其他改动。

    $ docker build -t rap2-dolores . #构建镜像,tag为rap2-dolores:latest
    

    这个时候如果直接启动

    $ docker run --name rap2-doloes -p 5000:5000 -d rap2-doloes:latest
    

    项目所指向的后端地址就会是默认的地址:http://rap2api.taobao.org, 这是不符合要求的,因此启动指令应该这么写:

    $ docker run --name rap2-doloes -v /root/rap2/config:/app/src/config -p 5000:5000 -d rap2-doloes:latest sh -c "npm run build && serve -s ./build"
    

    指令说明:使用-v将src/config目录挂载出来(注意将源代码中src/config中的文件copy一份到宿主机的/root/rap2/config目录中,否则/root/rap2/config目录是为空的),并修改config.prod.js中的内容如下:

    module.exports = {
      serve: 'http://192.168.1.1:38080',  // 此处修改为我们前面部署的后端服务地址
      keys: ['some secret hurr'],
      session: {
        key: 'koa:sess'
      }
    }
    

    指令末尾添加 sh -c "npm run build && serve -s ./build" 覆盖Dockerfile中的CMD指令,重新执行npm run build并启动服务,此方式虽会使启动速度变慢,但是可以达到方便修改后端ip的要求,熟悉前端的同学也可以通过修改源码,然后启动时设置docker环境变量的形式来实现。

    启动成功后查看rap2-doloes容器日志会看到提示:输入“http://localhost:5000 ”来访问页面。

    五、运行效果

    到此部署就完成了,现在来看看运行效果,访问http://192.168.1.1:5000。

    登录页.jpg 主面板.jpg 接口详情.jpg Dashboard.jpg

    相关文章

      网友评论

        本文标题:RAP2-阿里妈妈开源API管理工具容器化部署实践

        本文链接:https://www.haomeiwen.com/subject/cbjipqtx.html