個(gè)人博客地址:RAP2-阿里媽媽開(kāi)源API管理工具容器化部署實(shí)踐
微信公眾號(hào):Code技術(shù)資訊,每日為你帶來(lái)各種開(kāi)發(fā)/運(yùn)維干貨。
RAP2是阿里媽媽前端團(tuán)隊(duì)開(kāi)發(fā)的API管理平臺(tái),和我們常見(jiàn)的如swagger之類(lèi)的接口管理不同的是,它無(wú)需侵入業(yè)務(wù)代碼,并可對(duì)API實(shí)現(xiàn)靈活、簡(jiǎn)單的可視化管理,目前已在阿里巴巴內(nèi)部和許多大企業(yè)得到廣泛應(yīng)用。由于博主所在團(tuán)隊(duì)的需要,我在公司內(nèi)部搭建了一套基于docker的rap2平臺(tái),現(xiàn)記錄搭建過(guò)程,供大家參考。
一、RAP2簡(jiǎn)介
如需進(jìn)一步了解RAP2這個(gè)平臺(tái),可以參考以下鏈接:
二、部署說(shuō)明
先來(lái)一段官方的介紹:RAP2的平臺(tái)包含兩個(gè)組件(對(duì)應(yīng)兩個(gè)Github Repository)
環(huán)境要求:
- Node.js 8.9.4+
- MySQL 5.7+
- Redis 4.0+
下面分別描述前端和后端的部署過(guò)程。
三、后端部署
rap2-delos后端依賴(lài)Mysql和Redis,這兩個(gè)組件請(qǐng)讀者自行安裝,官方的安裝介紹中有介紹非容器環(huán)境的部署,這里也不做介紹,主要介紹基于docker的容器化部署。
1、clone rap2-delos項(xiàng)目源代碼:
$ git clone https://github.com/thx/rap2-delos.git
2、生成項(xiàng)目鏡像。這里有兩個(gè)方法,第一種是自己參考官方的安裝過(guò)程build一個(gè)docker鏡像使用,第二種是使用docker hub上其他人已經(jīng)做好的鏡像(推薦第二種,省時(shí)省力,何樂(lè)而不為_)。
$ docker pull blackdog1987/rap2-delos:2.6.aa3be03 ##拉去docker hub上的rap2-delos鏡像
3、修改docker-compose啟動(dòng)配置
此時(shí)我們看一看項(xiàng)目的源代碼,會(huì)發(fā)現(xiàn)rap2團(tuán)隊(duì)很貼心的為我們準(zhǔn)備了一份啟動(dòng)容器所需要的docker-compose.yml文件,內(nèi)容如下:
# 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 # 數(shù)據(jù)庫(kù)名稱(chēng)
# 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
讀者只需要關(guān)注delos服務(wù)的相關(guān)配置,將MYSQL和REDIS的變量值修改為自己的配置即可。
修改完成后執(zhí)行
$ docker-compose up -d
后端部署完成,容器暴露了38080端口供外部調(diào)用。啟動(dòng)后查看mysql數(shù)據(jù)庫(kù),發(fā)現(xiàn)數(shù)據(jù)庫(kù)中已初始化相關(guān)表信息。

四、前端部署
1、拉取rap2-dolores項(xiàng)目代碼:
$ docker pull https://github.com/thx/rap2-dolores.git
$ cd rap2-dolores
2、構(gòu)建鏡像并啟動(dòng)
對(duì)于前端項(xiàng)目的部署我們有一個(gè)基本要求,能做到允許后期修改所訪問(wèn)后端的地址(這個(gè)可以通過(guò)node調(diào)取環(huán)境變量的方式來(lái)實(shí)現(xiàn),但因?yàn)椴┲魇侵骱蠖说脑?,所以只能另辟蹊徑)?/p>
由于docker hub上別人做好的鏡像不能很好的滿足上述要求(大部分都沒(méi)啥說(shuō)明),我們只能自己構(gòu)建鏡像,首先我們?cè)陧?xiàng)目根目錄創(chuàng)建Dockerfile文件,內(nèi)容如下:
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可以直接用于項(xiàng)目的最新代碼,無(wú)需任何其他改動(dòng)。
$ docker build -t rap2-dolores . #構(gòu)建鏡像,tag為rap2-dolores:latest
這個(gè)時(shí)候如果直接啟動(dòng)
$ docker run --name rap2-doloes -p 5000:5000 -d rap2-doloes:latest
項(xiàng)目所指向的后端地址就會(huì)是默認(rèn)的地址:http://rap2api.taobao.org, 這是不符合要求的,因此啟動(dòng)指令應(yīng)該這么寫(xiě):
$ 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"
指令說(shuō)明:使用-v將src/config目錄掛載出來(lái)(注意將源代碼中src/config中的文件copy一份到宿主機(jī)的/root/rap2/config目錄中,否則/root/rap2/config目錄是為空的),并修改config.prod.js中的內(nèi)容如下:
module.exports = {
serve: 'http://192.168.1.1:38080', // 此處修改為我們前面部署的后端服務(wù)地址
keys: ['some secret hurr'],
session: {
key: 'koa:sess'
}
}
指令末尾添加 sh -c "npm run build && serve -s ./build" 覆蓋Dockerfile中的CMD指令,重新執(zhí)行npm run build并啟動(dòng)服務(wù),此方式雖會(huì)使啟動(dòng)速度變慢,但是可以達(dá)到方便修改后端ip的要求,熟悉前端的同學(xué)也可以通過(guò)修改源碼,然后啟動(dòng)時(shí)設(shè)置docker環(huán)境變量的形式來(lái)實(shí)現(xiàn)。
啟動(dòng)成功后查看rap2-doloes容器日志會(huì)看到提示:輸入“http://localhost:5000 ”來(lái)訪問(wèn)頁(yè)面。
五、運(yùn)行效果
到此部署就完成了,現(xiàn)在來(lái)看看運(yùn)行效果,訪問(wèn)http://192.168.1.1:5000。



