个人博客地址:RAP2-阿里妈妈开源API管理工具容器化部署实践
微信公众号:Code技术资讯,每日为你带来各种开发/运维干货。
RAP2是阿里妈妈前端团队开发的API管理平台,和我们常见的如swagger之类的接口管理不同的是,它无需侵入业务代码,并可对API实现灵活、简单的可视化管理,目前已在阿里巴巴内部和许多大企业得到广泛应用。由于博主所在团队的需要,我在公司内部搭建了一套基于docker的rap2平台,现记录搭建过程,供大家参考。
一、RAP2简介
如需进一步了解RAP2这个平台,可以参考以下链接:
二、部署说明
先来一段官方的介绍:RAP2的平台包含两个组件(对应两个Github Repository)
环境要求:
- 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数据库,发现数据库中已初始化相关表信息。
四、前端部署
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。