使用Docker搭建RAP2(技术文档管理私服)

前言

技术团队,文档管理是一项至关重要的工作,不管是对于开发人员,还是对于测试人员,还是对于新同事,一个好的文档能让整个团队的效率大大的提升;rap是阿里妈妈前端团队维护并开源的一套文档管理系统,很好用;官方入口,没有使用过的可以在这里体验一下;源代码github托管地址
但是对于企业来说,技术文档相当于商业机密(对外的文档除外),为了保证信息安全,既然又是开源的项目,自然把服务器搭建在企业内部也是没有任何问题的。
下面就以Docker的方式来搭建一个RAP2的服务;同时实现SSL证书认证,最终完成之后的效果如下:

准备工作
  • 安装说明
    官方提供了nodejs的安装方式,并没有提供以Docker的安装方式,官方项目中提供了一个后端的docker-compose.yml,但是在实际的使用过程中,还是会存在一些的问题;所以,下面我选择的是逐个去安装,同时把在安装过程中遇到的所有问题就列举出来。
  • 项目说明
    RAP2是一个前后端分离的项目
    后端:rap2-delos
    前端:rap2-dolores
    数据库:mysql或者mariadb (mariadb是mysql的一个分支,本质上是互相兼容的,所以用那个都行)
    缓存:redis
  • 证书申请
    备用!证书的添加是一个可要可不要的过程,这里列举出来,以备不时之需;可以到腾讯云或者阿里云去申请一个免费的ssl证书,具体参考: 免费SSL证书实现https请求
安装
mariadb及redis安装
  • 创建目录
    mkdir -p /usr/local/docker/rap2
    cd /usr/local/docker/rap2
    #后端项目的文件夹
    mkdir rap2-delos
    #前端项目的文件夹
    mkdir rap2-dolores
    
  • 安装mariadb
    docker run -d --restart=always --name rap2-mariadb  -v `pwd`/mysql:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 -p 33306:3306 mariadb:latest
    
    • 说明:
    1. -v pwd/mysql:/var/lib/mysql
      将当前目录下的mysql文件夹挂载到容器的/var/lib/mysql目录下;目的是为了持久化mysql的数据,防止后台服务容器重新运行或者迁移导致数据丢失;这个必须加
    2. MYSQL_ROOT_PASSWORD=123456
      数据库的密码
    3. 33306:3306
      宿主机端口33306映射到3306端口 (后续可以不映射,第一次安装的时候先隐射,便于创建库跟表)
    • 创建库
      创建一个名称为RAP2_DELOS_APP的数据库
      docker exec rap2-mariadb mysql -uroot -p123456 -e 'CREATE DATABASE IF NOT EXISTS RAP2_DELOS_APP DEFAULT CHARSET utf8 COLLATE utf8_general_ci'
      
  • 安装redis
    docker run -d --restart=always --name rap2-redis redis:latest
    
rap2-delos安装
  • 创建一个环境配置文件
    由于rap2-delos是支持本地环境、测试环境、正式环境配置的;测试环境是包含了很多测试数据的,为了不影响安装之后的正常使用,这里使用正式环境的方式去运行,因此需要做以下配置;

    • 进入工作目录
      cd /usr/local/docker/rap2/rap2-delos
      
    • 添加配置文件
      vi pm2.config.js
      添加一下配置:
      module.exports = {
        apps: [{
          name: 'rap-server-delos',
          script: 'dist/dispatch.js',
          ignore_watch: [ // 不用监听的文件
            'node_modules',
            'logs'
          ],
          env: {
            'NODE_ENV': 'production',//正式环境配置
            'REDIS_URL': 'rap2-redis',//redis docker容器运行的别名,根据具体情况编辑
            'REDIS_PORT': '6379',//redis默认端口 可以不设置
            'MYSQL_URL': 'rap2-mariadb',//数据库 docker容器运行的别名,根据具体情况编辑
            'MYSQL_PORT': '3306',//mariadb默认数据库端口
            'MYSQL_SCHEMA': 'RAP2_DELOS_APP',//数据库名称,代码中默认使用的是rap2的数据库,这里更改为和测试环境相同名称的数据库
            'MYSQL_PASSWD': '123456',//数据库的密码
            'TEST_MODE': 'true'//这里按道理应该是false 但是实际测试发现代码中出现了一个bug,不设置这个选项会导致操作一直报need login的错误,通过这个方式规避
          },
          env_dev: {//测试环境的配置
            'NODE_ENV': 'development'
          },
          error_file: './logs/app-err.log',
          out_file: './logs/app-out.log'
        }]
      }
      
  • 创建Dockerfile
    vi Dockerfile-delos
    添加以下配置文件

    FROM node:alpine
    
    RUN echo -e "http://mirrors.aliyun.com/alpine/latest-stable/main\n\ http://mirrors.aliyun.com/alpine/latest-stable/community" > /etc/apk/repositories
    
    #设置时区
    RUN apk update && apk add tzdata && \
        ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
        echo "Asia/Shanghai" > /etc/timezone && \
        rm -rf /root/.cache
    
    #安装 pm2
    RUN npm install -g pm2
    
    #安装cnpm
    RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && \
        apk update && apk add curl git
    
    #github下载rap2-delos并通过cnpm编译
    RUN mkdir /app && cd /app && \
        git clone https://github.com/thx/rap2-delos.git && cd /app/rap2-delos && \
        cnpm install && \
        cnpm run build
    
    #将前面添加的配置文件拷贝到镜像中
    ADD pm2.config.js /app/rap2-delos/pm2.config.js
    
    WORKDIR /app/rap2-delos
    
    #使用pm2运行配置 实现环境变量的配置  
    #记得务必要添加--no-daemon 否则运行镜像运行会失败
    ENTRYPOINT ["pm2","start","/app/rap2-delos/pm2.config.js","--no-daemon"]
    
  • 构建镜像

    docker build -f ./Dockerfile-delos -t rap2-delos:node-alpine .
    

    这个过程会比较的漫长,要在github上面下载源代码,还得安装pm2 cnpm,同时还需要build项目,build之前还得下载各种依赖库,镜像构建成功之后会看到下面的镜像:

  • 运行镜像

    docker run -d --restart=always  --name rap2-delos --link rap2-mariadb  --link rap2-redis -p 38080:8080 rap2-delos:node-alpine
    

    • link
      由于上面配置的时候使用的是容器的别名连接数据库和redis,所以这里一定要使用link去关联数据库和redis两个容器;如果上面的配置使用的是ip端口访问,这里可以不用link
  • 添加数据库表
    这种方式失败的可能性比较的大,因此,这里建议使用下面的sql脚本直接到库里面去执行创建表更合适

    docker exec rap2-delos cnpm run create-db
    

    脚本地址
    执行成功之后如下图:

    执行以下指令修改admin的密码,默认admin的密码是不可用的,这里将其改为123456,rap2用户密码的加密规则为MD5(MD5(密码)),你可以根据自己的习惯更换合适的密码;

    UPDATE Users SET `password` = '14e1b600b1fd579f47433b88e8d85291' where id = 100000000
    
  • 后端服务测试
    http://你服务运行的ip:38080,出现以下显示说明后台启动成功

rap2-dolores 安装
  • 进入工作目录
    /usr/local/docker/rap2/rap2-dolores
    
  • 创建Dockerfile
    vi Dockerfile-dolores
    添加以下配置
    FROM node:alpine
    
    RUN echo -e "http://mirrors.aliyun.com/alpine/latest-stable/main\n\ http://mirrors.aliyun.com/alpine/latest-stable/community" > /etc/apk/repositories
    
    #设置时区
    RUN apk update && apk add tzdata && \
        ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
        echo "Asia/Shanghai" > /etc/timezone && \
        rm -rf /root/.cache
    
    #安装cnpm
    RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && \
        apk update && apk add curl git python make g++
    
    //下载源码  更换后台服务的地址  build项目
    RUN mkdir /app && cd /app && \
        git clone https://github.com/thx/rap2-dolores && cd /app/rap2-dolores && \
        sed -i "s/http\:\/\/rap2api\.taobao\.org/https\:\/\/rap\.你的域名\.com\.cn\/rap/g"  src/config/config.prod.ts  && \
        cnpm install && cnpm rebuild node-sass && cnpm run build && \
        cnpm install -g serve
    
    WORKDIR /app/rap2-dolores
    #运行服务
    ENTRYPOINT ["serve","-s","build"]
    
    • 配置修改说明
      上面有一出是需要根据自己的情况修改问rap2-delos(后台服务)的路径,特殊符号务必添加转义符
      如果你不使用域名,直接使用内网ip端口访问,将以上对应的配置按如下方式修改:
      sed -i "s/http\:\/\/rap2api\.taobao\.org/http\:\/\/192\.168\.1\.xxx\:38080/g"  src/config/config.prod.ts
      
      如果你希望使用域名访问的话,请按一下方式配置,具体是http还是https请根据是否配置ssl证书决定
      务必域名后面rap不要删除了,这个在后面的nginx配置解决跨域问题会用到,这里暂时不做解释,后面你一看就明白了
      sed -i "s/http\:\/\/rap2api\.taobao\.org/https\:\/\/rap\.你的域名\.com\.cn\/rap/g"  src/config/config.prod.ts
      
  • 构建镜像
    docker build -f ./Dockerfile-dolores -t rap2-dolores:node-alpine .
    
  • 运行镜像
    docker run -d --restart=always --name rap2-dolores -p 38081:5000 rap2-dolores:node-alpine
    
  • 测试前端
    如果你使用的是IP加端口的形式访问的话,这里就已经可以通过http://ip:38081的方式去访问服务
    如果你使用的是域名的方式,请看下一章节,当前前端还无法正常的访问到后端,所以需要按以下教程配置nginx之后才可以正常访问
nginx配置ssl正式及解决跨域问题

这里主要是针对通过配置域名访问方式所加的,如果不使用域名,可以不看这一节
由于rap2项目是前后端分离的,如果不处理好,很容易出现跨域问题;

  • nginx正式及相关配置
    在nginx的http节点下添加一个server,具体配置如下
    server {
        listen 443 ssl;
        #填写绑定证书的域名
        server_name rap.你的域名.com.cn;
        #ssl on;
        #正式即为上面你通过腾讯云申请的ssl正式,选用压缩包中nginx文件夹下的两个证书文件
        ssl_certificate /证书路径/1_rap.你的域名.com.cn_bundle.crt;
        ssl_certificate_key /证书路径/2_rap..你的域名.com.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
    
        charset utf-8;
    
        resolver 223.5.5.5 223.6.6.6 1.2.4.8 114.114.114.114 valid=3600s;
    
        #这里通过rap关键字,将请求转发到后台接口服务
        #这也就是在rap-dolores修改后端地址的时候为什么要添加一个rap路径的原因
        location /rap/ {
        	#内网下后端服务rap-delos的请求地址
            proxy_pass http://192.168.1.xxx:38080/;
        }
    
    	#除了rap关键字之外的所有请求都认为是前端的请求
        location / {
        	#内网下前端服务rap-dolores的请求地址
            proxy_pass http://192.168.1.xxx:38081;
        }
    }
    
    请按配置里面的说明将配置文件中的5处需要按自己实际情况修改的地方做一下修改。
安装确认

到此,整个rap2的安装即完成,安装完之后是会存在4个docker容器,请核实!

admin账户信息:
用户名:admin@rap2.com
密码: 123456

由于官方没有提供Docker的方式,因此安装的过程中会遇到各种问题,如果遇到可以随时留言交流!!!

使用说明

待续!!!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一行Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值