RAP2-阿里媽媽開(kāi)源API管理工具容器化部署實(shí)踐

個(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),可以參考以下鏈接:

RAP官方簡(jiǎn)介
RAP2官方在線平臺(tái)

二、部署說(shuō)明

先來(lái)一段官方的介紹:RAP2的平臺(tái)包含兩個(gè)組件(對(duì)應(yīng)兩個(gè)Github Repository)

  • rap2-delos: 后端數(shù)據(jù)API服務(wù)器,基于Koa + MySQLlink
  • rap2-dolores: 前端靜態(tài)資源,基于React link

環(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)表信息。

rap2數(shù)據(jù)庫(kù)表

四、前端部署

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。

登錄頁(yè).jpg
主面板.jpg
接口詳情.jpg
Dashboard.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容