2019-12-16 利用docker快速在自己服务器搭建部署RAP2智能API文档管理系统

前言

关于RAP我有介绍过:https://www.jianshu.com/p/fc1c97eb109c
rap2来为团队提供接口管理服务,从而提高开发团队效率。部署过程中遇到很多问题,在此做一总结,一为总结自己在部署过程中的收获,二为需要部署rap2的同行提供一点参考。
此前尝试过手动部署阿里的RAP2,虽然部署成功了,但是部署过程一路曲折,填了很多坑,并且官网也说了,利用docker可以很让前后端轻易的跟随主项目升级(实际亲测手动部署在升级项目体验上效果不佳,特别是升级更新代码后,后端数据库表的改动让人无可奈何,手动部署也就意味着很多东西在原有的基础上需要自己手动更新,很不方便。。),既然是为了方便而方便,那我们肯定更需要的是快速部署,快速使用它。使用docker就是一条捷径。

想手动部署可以参考项目文档:

前端部署:https://github.com/thx/rap2-dolores
后端部署:https://github.com/thx/rap2-delos

docker 快速部署(内部已集成前后端代码一键部署):

什么是docker ?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1.首先,需要安装 Docker 和 Docker Compose(这里只演示在linux上安装)

国内用户可参考 https://get.daocloud.io/ 安装 Docker 以及 Docker Compose (Linux 用户需要单独安装),建议按照链接指引配置 Docker Hub 的国内镜像提高加载速度。
【安装Docker 】

curl -sSL https://get.daocloud.io/docker | sh

【安装Docker Compose】

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.创建项目文件目录进入文件目录(这里只是举个栗子,想放哪里放哪里,例如下面这样)
mkdir /root/rap2
cd /root/rap2
3.复制rap2-dolores仓库中的 docker-compose.yml的文件代码(这个是本项目的docker镜像配置文件)到 rap2 目录中

我这里复制一份出来(最好到仓库里面去复制,以最新的配置文件为准)

# mail@dongguochao.com
# llitfkitfk@gmail.com
# chibing.fy@alibaba-inc.com

version: "3"

services:
  # frontend
  dolores:
    image: rapteam/rap2-dolores:latest
    ports:
      #冒号前可以自定义前端端口号,冒号后不要动
      - 3000:38081

  # backend
  delos:
    image: rapteam/rap2-delos:latest
    ports:
      # 这里的配置不要改哦
      - 38080:38080
    environment:
      - SERVE_PORT=38080
      # if you have your own mysql, config it here, and disable the 'mysql' config blow
      - MYSQL_URL=mysql # links will maintain /etc/hosts, just use 'container_name'
      - MYSQL_PORT=3306
      - MYSQL_USERNAME=root
      - MYSQL_PASSWD=
      - MYSQL_SCHEMA=rap2

      # redis config
      - REDIS_URL=redis
      - REDIS_PORT=6379

      # production / development
      - NODE_ENV=production
    ###### 'sleep 30 && node scripts/init' will drop the tables
    ###### RUN ONLY ONCE THEN REMOVE 'sleep 30 && node scripts/init'
    command: /bin/sh -c 'node dispatch.js'
    # init the databases
    # command: sleep 30 && node scripts/init && node dispatch.js
    # without init
    # command: node dispatch.js
    depends_on:
      - redis
      - mysql

  redis:
    image: redis:4

  # disable this if you have your own mysql
  mysql:
    image: mysql:5.7
    # 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: ""

项目是前后端分离的,这里可以配置一下前端访问的端口号,端口号默认3000,可以自己改

 ports:
      #冒号前可以自定义前端端口号,冒号后不要动
      - 3000:38081

如果需要开启远程访问数据库,这里需要把注释去掉,数据库端口号默认33306,可以自己改

    # expose 33306 to client (navicat)
    ports:
       - 33306:3306 //映射镜像3306端口到本地服务器33306端口

安全性:(特别注意)
若开启远程访问数据库,请注意默认镜像配置的数据库访问无需密码即可进入,导致了隐患。
这里需要在docker-compose.ymlmysql下配置MYSQL_PASSWORD配置完毕后会在下面步骤初始化生成该项目镜像的时候自动创建该项目的数据库密码

  # disable this if you have your own mysql(有自己的数据库账号密码的可以省略,我建议初始化重新创建不要省略,毕竟是作为一个单独项目数据库安全性更高,这个项目存储的数据价值不大,只是用来模拟接口,即使被脱裤也影响不到其他项目。。)
  mysql:
   ......省略一些配置
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "true" //是否允许空密码,这里建议改成false
      MYSQL_DATABASE: "rap2"  //初始化数据库名
      MYSQL_USER: "root" //初始化数据库用户名
      MYSQL_PASSWORD: ""  //这里配置你要初始化的数据库的密码,不要放空

配置mysql配置后还需要告诉后端项目用的哪个账户登录数据库:

# backend
  delos:
   ......省略一些配置
      # if you have your own mysql, config it here, and disable the 'mysql' config blow
      - MYSQL_URL=mysql # links will maintain /etc/hosts, just use 'container_name'
      - MYSQL_PORT=3306 //镜像中mysql使用的端口号
      - MYSQL_USERNAME=root //镜像中mysql使用的用户名
      - MYSQL_PASSWD= //镜像中mysql使用的用户密码,不要放空
      - MYSQL_SCHEMA=rap2 //镜像中mysql使用的数据库名称

以上配置都不要放空,改成与刚刚mysql配置对应的信息,一定要正确对应否则项目启动后后端服务无法正常访问数据库。
配置文件修改完毕后,我们拷贝放入之前创建的文件夹里

cd /root/rap2
vi docker-compose.yml //创建文件
vim docker-compose.yml //编辑它,按i箭开启编辑状态,将改过的配置文件代码复制进去
按esc关闭编辑状态
:wq //强制保存文件并退出
4.拉取镜像并启动(第一次会根据上面配置的文件下载镜像到该目录下,比较慢,耐心等待。。。)
docker-compose up -d
5.启动后,第一次运行需要手动初始化mysql数据库(项目会导入表结构和一些虚拟数据进行自动化测试以确保数据库能正常使用)
# ⚠️注意: 只有第一次该这样做(若项目已有用户数据的情况千万不要执行,数据库会被清空覆盖)
docker-compose exec delos node scripts/init
6.部署成功后 愉快的访问:

http://localhost:3000 # 前端(你刚配置的前端端口号)

image.png

能访问到说明前端访问正常,
再注册一个账号试试看,若能注册成功代表后端服务正常,并且数据库已经可以正常愉快的使用了。
image.png

7.访问不了的情况

可能是数据库没有链接上,关闭 rap 服务

docker-compose down

再重新运行

docker-compose up -d
8.报错排查
如果 Sequelize 报错可能是数据库表发生了变化,运行下面命令同步
docker-compose exec delos node scripts/updateSchema
如果 port is already allocated 提示端口已存在

https://www.cnblogs.com/typttxs/p/10764640.html

9.镜像升级

Rap 经常会进行 bugfix 和功能升级,用 Docker 可以很方便地跟随主项目升级

拉取一下最新的镜像
docker-compose pull
暂停当前应用
docker-compose down
重新构建并启动
docker-compose up -d --build
有时表结构会发生变化,执行下面命令同步
docker-compose exec delos node scripts/updateSchema
清空不被使用的虚悬镜像
docker image prune -f
10.补充
使用docker images可以查看本机的所有镜像
若数据库远程访问端口开启后会从该镜像创建数据库的映射到服务器本地与数据库联通。我们可以通过docker ps 查看镜像容器看到

参考文章:
https://blog.csdn.net/EHOIST/article/details/94628714
https://www.cnblogs.com/typttxs/p/10764640.html
https://blog.csdn.net/weixin_42459563/article/details/80924634
https://www.itsvse.com/thread-5166-1-1.html

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