统一监控编译&部署

# 1. 工程结构

# 1.1 服务端工程结构

服务端工程由Maven构建管理,根据业务职责将服务端能力按模块划分,并基于Maven聚合能力实现模块聚合。

├───config                 编译配置目录
├───package                编译产出物
├───src                    源码目录
├───Dockerfile             Docker 配置文件
1
2
3
4

# 1.2 客户端工程结构

基于Vue-Cli初始化工程结构,并根据业务需要自行扩展。


├─api
├─assets 静态资源
├─components 自定义组件相关
│  ├─amap 高德地图
│  ├─dropdown 下拉框
│  ├─form 表单
│  ├─menu 菜单
│  ├─progressbar 进度条
│  └─tree ZTree
├─directives 自定义指令
├─mock 测试数据
├─router 路由
├─store 存储
├─utils 工具包
└─views 视图部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2. 客户端编译

客户端工程依赖node环境,通过node指令实现编译打包。

  • 安装依赖

    npm install 或 cnpm install

  • 构建

    npm run build

    编译完成后会在工程根目录下生成dist目录,即编译产物。

    或执行ci-build.sh脚本, 该脚本会将编译产物打包为dist.tar.gz

# 3. 服务端编译

# 3.1 Docker化

# 3.1.1 编译源码

mvn clean install -DskipTests

# 3.1.2 构建Docker镜像

进入 bm-system-service 工程根目录(Dockerfile 存放目录)。

docker build -t bm-system-service .

# 3.1.3 创建Tag

docker tag 镜像Name或ID 202.96.122.219:1180/blocks/monitor/bm-system-service:1.0.6

如:

docker tag bm-system-service 202.96.122.219:1180/blocks/monitor/bm-system-service:1.0.6

# 3.1.4 登录Docker Server

docker login 202.96.122.219:1180

输入用户名&密码

# 3.1.5 推送镜像

此过程用于将目标镜像推送至镜像仓库。

docker push 202.96.122.219:1180/blocks/monitor/bm-system-service:1.0.6

# 3.1.6 验证

镜像推送成功后,可登录镜像库查看或通过Docker命令查看镜像是否成功推送。

# 3.2 非Docker化

因服务端模块较多,且模块之间存在依赖关系。 同时为了更好的实现部署,这里通过脚本(python)实现统一编译打包。

# 3.2.1 修改编译配置文件;

在bm-system-service/config目录下存在名为modules.json的文件,该文件描述了待编译的目标模块信息。

{
  "projectName": "bm-system-service",
  "projectDescription": "基础服务",
  "modules": [
    {
      "name": "bm-system-service",
      "version": "1.0.4",
      "parent": "",
      "description": "基础服务-消息服务",
      "ms": "-Xms512m",
      "mx": "-Xmx512m",
      "maxNewSize": "512m",
      "startupSequence": "syslog.target network.target remote-fs.target nss-lookup.target ms-api-gateway.service"
    }
  ]
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

编译前根据需要,调整json 文件中的modules信息,一般情况下仅需修改version(对应模块pom.xml中的version值)信息。

# 3.2.2 执行编译脚本

进入bm-system-service根目录,执行目录下的ci-build-win.py脚本(目标机器需要安装Python 3环境)。

python ci-build-win.py

当编译完成后,会在bm-system-service/package目录下生成bm-system-service.zip文件,其中包含了modules.json中描述的目标模块。

# 3. 依赖软件安装

# 3.1 JDK安装

建议选择JDK1.8。JDK 安装请参考 here

# 3.2 数据库安装

数据库选用PostgreSQL,版本>=10.0。PostgreSQL 安装请参考 here

基于源码安装PostgreSQL过程略显复杂,因此当目标服务器网络环境支持访问外网时,也可选择基于安装包方式进行安装(上述PostgreSQL安装文档也有描述)。

# 3.3 Redis安装

Redis版本>=5.0。Redis 安装请参考 here

可根据目标接入量及服务器资源情况,按需选择单机集群安装模式。

# 3.4 Kafka安装

# 3.5 808网关安装

808网关 安装请参考 here

# 3.6 Nginx安装

OBOS采用Nginx作为客户端应用服务器。Nginx 安装请参考 here

# 4. 客户端部署

# 4.1 上传应用

将2.2章节编译的产出物上传至目标服务器/opt目录,并解压重命名。

cd /opt

tar -xvf dist.tar.gz

mv dist html

# 4.2 配置Nginx

Nginx安装完成后,需要根据客户端应用路径及服务端API地址信息修改Nginx配置文件(nginx.conf)。

  • upstream providers 负载均衡,配置服务端API网关地址;

  • server 配置客户端程序路径及api代理地址;

    这里我们配置了两个server节点,一个用于提供客户端程序访问入口(端口8888),另一个用于提供图片服务(端口9003)。

    端口信息可根据企业网络要求调整。

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;
    client_max_body_size 1000m;

    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    gzip  on;

    #vhost_traffic_status_zone;
    #vhost_traffic_status_filter_by_host on;

    proxy_headers_hash_max_size 51200;
    proxy_headers_hash_bucket_size 6400;

    # 负载均衡
    upstream providers {
    	server localhost:8002;
    }

    server {
        listen       8888;
        server_name  localhost;
        location / {
            try_files $uri $uri/ @router;
            index  index.html;
            root /opt/obos/html/;
        }

        location /api/ {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-For $http_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Nginx-Proxy true;
            proxy_set_header Connection "";
            proxy_pass   http://providers/;
        }

        location @router {
            rewrite ^.*$ /index.html last;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    autoindex on;# 显示目录
    autoindex_exact_size on;# 显示文件大小
    autoindex_localtime on;# 显示文件时间

    # 文件服务
    server {
        listen 9003;
        charset UTF-8;
        server_name localhost;
        location /images {
            alias /opt/uav/upload/images;
            autoindex on;
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

配置更新后需要重启Nginx使配置生效。

systemctl restart nginx

# 5. 服务端部署

# 5.1 部署 Nacos 服务

统一监控中心采用Nacos作为服务注册中心及配置管理,因此需要优先部署Nacos服务。

Nacos服务部署请参考here

# 5.2 部署 ms-api-gateway 服务

ms-api-gateway 是一套基于SpringCloud Zuul实现的API网关服务。

# 5.2.1 编译

  • 进入ms-api-gateway根目录,执行ci-build-win.py脚本

    python ci-build-win.py

  • 进入 ms-api-gateway/package目录获取编译产物

  • 上传并解压安装包

    • 将编译产物ms-api-gateway.zip上传至目标服务器/opt/obos/base目录下
    • 解压ms-api-gateway.zip

      cd /opt/obos/base

      unzip ms-api-gateway.zip

  • 安装系统服务

    • 进入目标服务目录/opt/obos/base/ms-api-gateway,执行安装脚本

      cd /opt/obos/base/ms-api-gateway

    • 修改脚本执行权限

      chmod 777 ./bin/*.sh

      chmod 777 *.sh

    • 执行安装

      ./install.sh

      若安装过程出现-bash: ./install.sh: /bin/bash^M: bad interpreter: No such file or directory错误(Windows平台引起的编码问题),可执行下面命令修复:

      sed -i 's/\r$//' bin/*.sh

      sed -i 's/\r$//' *.sh

    • 服务验证

      服务安装成功后,微服务ms-api-gateway会自动启动。

      可通过命令systemctl status查看服务状态。

      systemctl status ms-api-gateway

  • 其他指令

    • 启动ms-api-gateway服务

      systemctl start ms-api-gateway

    • 重启ms-api-gateway服务

      systemctl restart ms-api-gateway

    • 关闭ms-api-gateway服务

      systemctl stop ms-api-gateway

    • 查看ms-api-gateway服务状态

      systemctl status ms-api-gateway

# 5.2.2 修改配置

  1. 以Eureka实现的注册中心

    application.yml配置文件中包含了注册中心地址的配置项,根据实际注册中心服务(ms-regisger)IP进行配置即可。

    cd /opt/monitor/base/ms-api-gateway/jars

    vi /opt/monitor/base/ms-api-gateway/jars/application.yml

    # 根据实际地址配置
    eureka-server: http://localhost:8000
    
    1
    2

    修改application-prod.yml配置,根据Redis服务IP,配置Redis信息即可.

    cd /opt/monitor/base/ms-api-gateway/jars

    vi /opt/monitor/base/ms-api-gateway/jars/application-prod.yml

    spring:
      #Redis配置
      redis:
      host: localhost
      port: 6379
      password:
    
    1
    2
    3
    4
    5
    6

# 5.2.2 重启服务

ms-api-gateway服务安装成功后,默认启动过程可能出现异常(注册中心或Redis配置错误)。在调整完上述配置后,需要重启服务使配置生效。

systemctl restart ms-api-gateway

# 5.2.3 其他指令

  • 启动ms-api-gateway服务

    systemctl start ms-api-gateway

  • 重启ms-api-gateway服务

    systemctl restart ms-api-gateway

  • 关闭ms-api-gateway服务

    systemctl stop ms-api-gateway

  • 查看ms-api-gateway服务状态

    systemctl status ms-api-gateway

# 5.3.1 修改配置

如上所属,ms-config服务是一个集中式配置管理服务,管理着N个微服务的配置信息。为了对不同服务进行区分,所有的配置文件均在native下通过业务目录隔离存储。

# 5.3 部署 bm-system-service 服务(Docker)

  1. 登录服务器

  2. 创建配置映射目录

mkdir -p /opt/monitor/bm-system-service/config

  1. 添加入口配置文件

cd /opt/monitor/bm-system-service/config

vi bootstrap.yml

# 修改Nacos配置
spring:
  cloud:
    nacos:
      config:
        # 配置地址
        server-addr: 172.18.1.47:8848
        # 分组
        group: prd
        # Data Id
        name: bm-system-service
        # 配置格式
        file-extension: yaml
        # 命名空间
        namespace: 4ca152ea-6969-4c49-b61e-ae6b1556ea16
      discovery:
        namespace: 4ca152ea-6969-4c49-b61e-ae6b1556ea16
        group: prd
        server-addr: 172.18.1.47:8848
        enabled: true
        name: bm-system-service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  1. 配置Nacos

登录Nacos配置数据库、Redis等关键信息。

datasource:
  master:
    url: jdbc:postgresql://host:24359/monitor?currentSchema=monitor
    username: 用户名
    password: 密码

spring:
  redis:
    host: localhost
    port: 6379
    password: 123456

1
2
3
4
5
6
7
8
9
10
11
12
  1. 登录Docker仓库

docker login 202.96.122.219:1180

输入账密

  1. 下载镜像

docker push docker pull 202.96.122.219/blocks/monitor/bm-system-service:1.0.6

  1. 运行容器

sudo docker run --restart=on-failure:3 --name bm-system-service-1.0.6 --log-opt max-size=10m --log-opt max-file=3 --net=host -p 10010:10010
-v /opt/monitor/bm-system-service/config:/opt/monitor/bm-system-service/config
-v /opt/monitor/bm-system-service/logs:/opt/monitor/bm-system-service/logs
-v /etc/localtime:/etc/localtime:ro
-v /etc/timezone:/etc/timezone:ro
-e JAVA_OPTS='-Xmx256M -Xms256M'
-d 202.96.122.219/blocks/monitor/bm-system-service:1.0.6

可通过/opt/monitor/bm-system-service/logs查看服务运行日志。