# 1. 工程结构
# 1.1 服务端工程结构
服务端工程由Maven构建管理,根据业务职责将服务端能力按模块划分,并基于Maven聚合能力实现模块聚合。
├───config 编译配置目录
├───package 编译产出物
├───src 源码目录
├───Dockerfile Docker 配置文件
2
3
4
# 1.2 客户端工程结构
基于Vue-Cli初始化工程结构,并根据业务需要自行扩展。
├─api
├─assets 静态资源
├─components 自定义组件相关
│ ├─amap 高德地图
│ ├─dropdown 下拉框
│ ├─form 表单
│ ├─menu 菜单
│ ├─progressbar 进度条
│ └─tree ZTree
├─directives 自定义指令
├─mock 测试数据
├─router 路由
├─store 存储
├─utils 工具包
└─views 视图部分
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"
}
]
}
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;
}
}
}
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 修改配置
以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)
登录服务器
创建配置映射目录
mkdir -p /opt/monitor/bm-system-service/config
- 添加入口配置文件
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- 配置Nacos
登录Nacos配置数据库、Redis等关键信息。
datasource:
master:
url: jdbc:postgresql://host:24359/monitor?currentSchema=monitor
username: 用户名
password: 密码
spring:
redis:
host: localhost
port: 6379
password: 123456
2
3
4
5
6
7
8
9
10
11
12
- 登录Docker仓库
docker login 202.96.122.219:1180
输入账密
- 下载镜像
docker push docker pull 202.96.122.219/blocks/monitor/bm-system-service:1.0.6
- 运行容器
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查看服务运行日志。