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

个人博客地址: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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容