Docker容器化线上部署

一只会飞的鱼儿 1年前 ⋅ 1710 阅读
ad
大家好,我们已经正式发布了webfunny的官方镜像:https://hub.docker.com/repository/docker/webfunny/webfunny_monitor

部署前提是你的服务器已经按照了Docker环境,没有安装docker环境的可以参考这篇文章:

https://blog.csdn.net/BThinker/article/details/123358697

配置要求、压力测试

最低配置要求:Linux服务器:1台,CentOs系统,2核4G;Mysql数据库:1台,2核4G。

压力测试:2核CPU(3.8GH), 4G内存,单点部署,最高峰支持2.8万/分钟的日志并发量。超过3万/分钟后,会出现日志丢失的情况(此压力值测试供参考)

一、拉取官方镜像

执行命令$:docker pull webfunny/webfunny_monitor:3.2.11-beta

查看镜像$:  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.11-beta

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://xxxxxxxx:8008/webfunny_center/main.html

五、配置代理、域名

如大家所见,虽然执行了一条命令(npm run prd),其实是启动了2个端口号(8011,8010),记得提醒运维同学,将所这2个端口的对外授权打开哦。

生产环境中,我们不推荐使用 IP + 端口的形式; 端口复杂,且不方便支持https,所以推荐使用代理,代理配置请参考文档:nginx代理

使用代理后,就可以将所有的IP+端口 替换成域名了,配置如下:

进入/app/webfunny.config/index.js

/**
* 域名端口设置
* 配置更改后,需重启
*/
const domainConfig = {
  "host": {
    "fe": "www.xxx.com", // 前端访问域名
    "be": "www.xxx.com"  // 后端接口域名
  },
  "port": {
    "fe": "8010",  // 前端启动端口号
    "be": "8011"   // 后端启动端口号
  },
  "uploadDomain": {
    "monitor": "www.xxx.com", // 指定监控系统上报域名
    "event": "www.xxx.com"    // 指定埋点系统上报域名
  },
}

 

六、容器的其他常用操作指令

拉取镜像:docker pull webfunny/webfunny_monitor:3.2.11-beta

查看镜像: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

参数说明:

/**
* 授权码设置
* 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": "",            // 内部通讯协议(一般用不上)
  "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
}

关于Webfunny

Webfunny专注于前端监控系统,前端埋点系统的研发。 致力于帮助开发者快速定位问题,帮助企业用数据驱动业务,实现业务数据的快速增长。支持H5/Web/PC前端、微信小程序、支付宝小程序、UniApp和Taro等跨平台框架。实时监控前端网页、前端数据分析、错误统计分析监控和BUG预警,第一时间报警,快速修复BUG!支持私有化部署,Docker容器化部署,可支持千万级PV的日活量!

  点赞 0   收藏 0
  • 一只会飞的鱼儿
    共发布53篇文章 获得8个收藏
全部评论: 0