前言
技术团队,文档管理是一项至关重要的工作,不管是对于开发人员,还是对于测试人员,还是对于新同事,一个好的文档能让整个团队的效率大大的提升;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
- 说明:
- -v
pwd
/mysql:/var/lib/mysql
将当前目录下的mysql文件夹挂载到容器的/var/lib/mysql目录下;目的是为了持久化mysql的数据,防止后台服务容器重新运行或者迁移导致数据丢失;这个必须加 - MYSQL_ROOT_PASSWORD=123456
数据库的密码 - 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
- 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的方式,因此安装的过程中会遇到各种问题,如果遇到可以随时留言交流!!!
使用说明
待续!!!