部署前提是你的服务器已经按照了Docker环境,没有安装docker环境的可以参考这篇文章:
https://blog.csdn.net/BThinker/article/details/123358697
一、拉取官方镜像
执行命令$:docker pull webfunny/webfunny_monitor:3.2.21
查看镜像$: docker images
二、创建配置文件
1. 下载配置文件模板:模板
https://github.com/yuyuleilei/newConfigTemplate.git
把newConfigTemplate项目克隆下来,将里面的app整个文件夹copy放到本地或者服务器对应目录下
2. 外部配置文件目录挂载容器里面的路径,如下:
配置文件:/app/webfunny.config/, 则映射目录为:/app/webfunny.config/
3. 配置文件的参数说明文档在最下方 ↓↓↓。
三、填写基础配置
1. 进入映射目录,找到配置文件进行修改:/app/webfunny.config/index.js
2. 填写授权码,如果没有,可以去官网:申请试用版
/**
* 授权码设置
* monitor:前端监控
* event: 埋点系统
* 配置更改后,需重启
*/
const licenseConfig = {
"monitor": {
"purchaseCode": "", // 监控系统授权码
"secretCode": "" // 解码(没有可不填)
},
"event": {
"purchaseCode": "", // 埋点系统授权码
"secretCode": "" // 解码(没有可不填)
}
}
3. 填写数据库配置
/**
* mysql数据库设置
* center: 应用中心数据库
* monitor:前端监控数据库
* event: 埋点系统数据库
* 三个可以共用一台数据库
* 配置更改后,需重启
*/
const mysqlConfig = {
// 应用中心
"center": {
"write": {
"ip": "xx.xx.xx.xx",
"port": "3306",
"dataBaseName": "webfunny_db",
"userName": "webfunny",
"password": "12345678"
},
"read": []
},
// 监控
"monitor": {
"write": {
"ip": "xx.xx.xx.xx",
"port": "3306",
"dataBaseName": "webfunny_db",
"userName": "webfunny",
"password": "12345678"
},
"read": []
},
// 埋点
"event": {
"write": {
"ip": "xx.xx.xx.xx",
"port": "3306",
"dataBaseName": "webfunny_db",
"userName": "webfunny",
"password": "12345678"
},
"read": []
}
}
4. 配置域名和端口号,如何配置?请参考文档的第四步:服务器部署
进入/app/webfunny.config/index.js
/**
* 域名端口设置
* 配置更改后,需重启
*/
const domainConfig = {
"host": {
"fe": "localhost:8010", // 前端访问域名
"be": "localhost:8011" // 后端接口域名
},
"port": {
"fe": "8010", // 前端启动端口号
"be": "8011" // 后端启动端口号
},
"uploadDomain": {
"monitor": "", // 指定监控系统上报域名
"event": "" // 指定埋点系统上报域名
},
}
5. 其他相关配置
/**
* 其他相关设置
* 配置更改后,需重启
*/
const otherConfig = {
"email": {
"useCusEmailSys": false, // 是否使用用户自己公司的邮箱系统
"emailUser": "", // 邮箱
"emailPassword": "" // 密码
},
"protocol": "", // 内部通讯协议(一般用不上)
"messageQueue": false, // 是否开启消息队列
"openMonitor": true, // 是否开启可视化页面的监控
"uploadServerErrorToWebfunny": true, // 是否上报后端错误日志至Webfunny服务(推荐开启,便于排查问题)
"logSaveDays": 8, // 日志存储周期
"isOpenTodayStatistic": true, //
"business": {
"batchInsert": {
"limitQueueLength": 1000 // 一次批量插入最大数量
},
"userStayTimeScope": { // 记录停留时间范围(即将废弃)
"min": 100,
"max": 100000
}
},
"registerEntry": true, // 是否允许注册
"resetPwdEntry": true, // 是否允许重置密码
"ssoCheckUrl": "", // SSO校验URL
"activationRequired": false, // 注册用户是否需要管理员激活
"emailNeeded": {
"need": true, // 注册时,是否需要邮箱
"requireVerify": true // 注册时,是否需要验证邮箱的有效性
},
"phoneNeeded": {
"need": true, // 注册时,是否需要手机号
"requireVerify": false // 注册时,是否需要验证手机号的有效性
},
"uploadServerErrorToWebfunny": true, // 是否上报后端错误至Webfunny服务(推荐开启,便于排查问题)
"extraCors": { // 额外的cors配置
"headers": ""
},
}
6. 配置生产环境,搭配nginx配置域名,代理配置可以参考文档:nginx代理配置
四、启动容器
1. 执行启动命令之前,需要替换一下映射目录和版本号,按照文档的示例,对应值如下:
映射目录 -> /app/webfunny.config/
版本号 -> 3.2.21
2. 三种方式启动$:
第一种:多行命令
docker run -it --rm -d --name webfunny \
-p 8010:8010 \
-p 8011:8011 \
-v 映射目录:/app/webfunny.config/ \
webfunny/webfunny_monitor:版本号
第二种:单行命令
docker run -it --rm -d --name webfunny -p 8010:8010 -p 8011:8011 -v 映射目录:/app/webfunny.config/ webfunny/webfunny_monitor:版本号
第三种:docker-compose方式启动,yml文件配置:
# 将此yml文件上传服务器,执行启动命令 docker-compose -f ./docker-compose.yml up
version: '2'
services:
webfunny_monitor:
image: webfunny/webfunny_monitor:版本号
restart: always
container_name: webfunny_monitor
volumes:
- 映射目录:/app/webfunny.config/
ports:
- 8010:8010
- 8011:8011
启动slave命令:
docker run -it --rm -d --name webfunny \
-p 8010:8010 \
-p 8011:8011 \
-v 映射目录:/app/webfunny.config/ \
webfunny/webfunny_monitor:版本号 \
npm run monitor_slave
3. 查看容器情况$:docker container ls ; 进入启动的容器$:docker exec -it 容器id /bin/bash
4. 访问页面:
此时,可以直接访问应用中心首页了
应用中心首页: http://localhost:8010/webfunny_center/main.html
五、容器的其他常用操作指令
拉取镜像:docker pull webfunny/webfunny_monitor:版本号
查看镜像:docker images
删除镜像:docker rmi -f 镜像id
查看容器:docker container ls , docker container ls —all
删除容器:docker container kill 容器id
启动容器:docker start 容器id
停止容器:docker stop 容器id
重启容器:docker restart 容器id
进入容器:docker exec -it 容器id /bin/bash
参数说明:
/**
* 授权码设置
* monitor:前端监控
* event: 埋点系统
* 配置更改后,需重启
*/
const licenseConfig = {
"monitor": {
"purchaseCode": "", // 监控系统授权码
"secretCode": "" // 解码(没有可不填)
},
"event": {
"purchaseCode": "", // 埋点系统授权码
"secretCode": "" // 解码(没有可不填)
}
}
/**
* 域名端口设置
* 配置更改后,需重启
*/
const domainConfig = {
"host": {
"fe": "localhost:8010", // 前端访问域名
"be": "localhost:8011" // 后端接口域名
},
"port": {
"fe": "8010", // 前端启动端口号
"be": "8011" // 后端启动端口号
},
"uploadDomain": {
"monitor": "", // 指定监控系统上报域名
"event": "" // 指定埋点系统上报域名
},
}
/**
* mysql数据库设置
* center: 应用中心数据库
* monitor:前端监控数据库
* event: 埋点系统数据库
* 三个可以共用一台数据库
* 配置更改后,需重启
*/
const mysqlConfig = {
// 应用中心
"center": {
"write": {
"ip": "xx.xx.xx.xx",
"port": "3306",
"dataBaseName": "webfunny_db",
"userName": "webfunny",
"password": "12345678"
},
"read": []
},
// 监控
"monitor": {
"write": {
"ip": "xx.xx.xx.xx",
"port": "3306",
"dataBaseName": "webfunny_db",
"userName": "webfunny",
"password": "12345678"
},
"read": []
},
// 埋点
"event": {
"write": {
"ip": "xx.xx.xx.xx",
"port": "3306",
"dataBaseName": "webfunny_db",
"userName": "webfunny",
"password": "12345678"
},
"read": []
}
}
/**
* 其他相关设置
* 配置更改后,需重启
*/
const otherConfig = {
"email": {
"useCusEmailSys": false, // 是否使用用户自己公司的邮箱系统
"emailUser": "", // 邮箱
"emailPassword": "" // 密码
},
"protocol": "", // 内部通讯协议(一般用不上)
"segmentUrl": "", // segment 上报地址,对接skyWalking
"messageQueue": false, // 是否开启消息队列
"openMonitor": true, // 是否开启可视化页面的监控
"uploadServerErrorToWebfunny": true, // 是否上报后端错误日志至Webfunny服务(推荐开启,便于排查问题)
"logSaveDays": 8, // 日志存储周期
"isOpenTodayStatistic": true, //
"business": {
"batchInsert": {
"limitQueueLength": 1000 // 一次批量插入最大数量
},
"userStayTimeScope": { // 记录停留时间范围(即将废弃)
"min": 100,
"max": 100000
}
},
"registerEntry": true, // 是否允许注册
"resetPwdEntry": true, // 是否允许重置密码
"ssoCheckUrl": "", // SSO校验URL
"activationRequired": false, // 注册用户是否需要管理员激活
"emailNeeded": {
"need": true, // 注册时,是否需要邮箱
"requireVerify": true // 注册时,是否需要验证邮箱的有效性
},
"phoneNeeded": {
"need": true, // 注册时,是否需要手机号
"requireVerify": false // 注册时,是否需要验证手机号的有效性
},
"uploadServerErrorToWebfunny": true, // 是否上报后端错误至Webfunny服务(推荐开启,便于排查问题)
"extraCors": { // 额外的cors配置
"headers": ""
},
}
module.exports = {
licenseConfig, domainConfig, mysqlConfig, otherConfig
}