# 1. 工程结构
# 1.1 服务端工程结构
服务端工程由Maven构建管理,根据业务职责将服务端能力按模块划分,并基于Maven聚合能力实现模块聚合。
├───config 编译配置目录
├───package 编译产出物
├───uav-activity 流程处理器
├───uav-api API
├───uav-entities 实体
├───uav-obos OBOS核心包
│ ├───obos-api OBOS业务API
│ ├───obos-auxposition 星历服务
│ ├───obos-base OBOS基础业务模块
│ ├───obos-cmd 终端指令业务模块
│ ├───obos-ota 终端升级业务模块
│ ├───obos-provider OBOS服务入口
│ ├───obos-record 终端数据查询模块
│ └───obos-store 终端任务状态存储模块
├───uav-script 数据库初始化模块
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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. 工程编译
# 2.1 服务端编译
因服务端模块较多,且模块之间存在依赖关系。 同时为了更好的实现部署,这里通过脚本(python)实现统一编译打包。
# 2.1.1 修改编译配置文件;
在obos-admin/config目录下存在名为modules.json的文件,该文件描述了待编译的目标模块信息。
{
"projectName": "obos",
"projectDescription": "鸿升OBOS",
"modules": [
{
"name": "obos-provider",
"version": "1.0.0",
"parent": "uav-obos",
"description": "基础服务",
"ms": "-Xms1024m",
"mx": "-Xmx1024m",
"maxNewSize": "512m",
"startupSequence": "syslog.target network.target remote-fs.target nss-lookup.target ms-register.service"
},
{
"name": "obos-store",
"version": "1.0.0",
"parent": "uav-obos",
"description": "入库服务",
"ms": "-Xms1024m",
"mx": "-Xmx1024m",
"maxNewSize": "512m",
"startupSequence": "syslog.target network.target remote-fs.target nss-lookup.target ms-register.service"
},
{
"name": "obos-api",
"version": "1.0.0",
"parent": "uav-obos",
"description": "API服务",
"ms": "-Xms1024m",
"mx": "-Xmx1024m",
"maxNewSize": "512m",
"startupSequence": "syslog.target network.target remote-fs.target nss-lookup.target ms-register.service"
}
]
}
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
编译前根据需要,调整json 文件中的modules信息,一般情况下仅需修改version(对应模块pom.xml中的version值)信息。
# 2.1.2 执行编译脚本
进入obos-admin根目录,执行目录下的ci-build-win.py脚本(目标机器需要安装Python 3环境)。
python ci-build-win.py

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

目录结构如下:
├───bin 存放各模块安装脚本
├───obos-api 模块程序包,包含了可执行jar及程序入口配置文件
├───obos-provider 模块程序包,包含了可执行jar及程序入口配置文件
├───obos-store 模块程序包,包含了可执行jar及程序入口配置文件
├───service Linux系统服务配置文件,用于将目标服务安装为系统服务
├───install-all.sh 服务批量安装脚本,执行了bin目录下的所有脚本, 最终将各服务安装为系统服务
└───uninstall-all 服务批量卸载脚本,将已安装的应用从系统服务列表删除
2
3
4
5
6
7
# 2.2 客户端编译
客户端工程依赖node环境,通过node指令实现编译打包。
安装依赖
npm install 或 cnpm install
构建
npm run build
编译完成后会在工程根目录下生成dist目录,即编译产物。
或执行ci-build.sh脚本, 该脚本会将编译产物打包为dist.tar.gz
# 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. 服务端部署
为了降低维护的复杂度,OBOS目标程序均安装在/opt/obos目录下,目录结构如下:
.
├─base 基础微服务安装目录
├─ext 扩展微服务安装目录(可选)
├─biz 业务服务安装目录
└─html 客户端程序目录
2
3
4
5
6
html 客户端程序目录
base 基础微服务安装目录
- ms-register 微服务注册中心
- ms-api-gateway 微服务网关(zuul实现)
- ms-config 微服务配置中心
ext 扩展微服务安装目录(可选)
- ms-message 消息服务
- ms-job 异步调度服务
- others ...
biz 业务服务安装目录
- obos-store obos存储服务,包含终端上报数据入库及升级数据上报处理逻辑
- obos-api obos api服务,为第三方提供Restful API
- obos-provider obos业务服务入口
# 5.1 部署 ms-register 服务
该服务基于Spring Cloud Eureka实现了服务治理能力,含服务注册、服务发现功能。
# 5.1.1 编译
进入ms-register根目录,执行ci-build-win.py脚本
python ci-build-win.py
进入 ms-register/package目录获取编译产物
上传并解压安装包
- 将编译产物ms-register.zip上传至目标服务器/opt/obos/base目录下
解压ms-register.zip
cd /opt/obos/base
unzip ms-register.zip
安装系统服务
进入目标服务目录/opt/obos/base/ms-register,执行安装脚本
cd /opt/obos/base/ms-register
修改脚本执行权限
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-register会自动启动。
可通过命令systemctl status查看服务状态。
systemctl status ms-register
其他指令
启动ms-register服务
systemctl start ms-register
重启ms-register服务
systemctl restart ms-register
关闭ms-register服务
systemctl stop ms-register
查看ms-register服务状态
systemctl status ms-register
# 5.2 部署 ms-api-gateway 服务
ms-api-gateway 是一套基于SpringCloud Zuul实现的API网关服务。
ms-api-gateway 服务编译、打包、安装过程与 ms-register 服务一致,请参考部署ms-register章节内容。
# 5.2.1 修改application.yml配置
application.yml配置文件中包含了注册中心地址的配置项,根据实际注册中心服务(ms-regisger)IP进行配置即可。
cd /opt/obos/base/ms-api-gateway/jars
vi /opt/obos/base/ms-api-gateway/jars/application.yml
# 根据实际地址配置
eureka-server: http://localhost:8000
2
# 5.2.1 修改application-prod.yml配置
根据Redis服务IP,配置Redis信息即可.
cd /opt/obos/base/ms-api-gateway/jars
vi /opt/obos/base/ms-api-gateway/jars/application-prod.yml
spring:
#Redis配置
redis:
host: localhost
port: 6379
password:
2
3
4
5
6
# 5.2.2 重启服务
当ms-api-gateway服务安装成功后,默认启动过程可能出现异常(注册中心或Redis配置错误)。在调整完上述配置后,需要重启服务使配置生效。
systemctl restart ms-api-gateway
# 5.2.3 其他指令
启动ms-register服务
systemctl start ms-register
重启ms-register服务
systemctl restart ms-register
关闭ms-register服务
systemctl stop ms-register
查看ms-register服务状态
systemctl status ms-register
# 5.3 部署 ms-config 服务
ms-config服务是基于SpringCloud Config实现的配置管理服务,实现微服务配置集中化管理。
ms-config 服务编译、打包、安装过程与 ms-register 服务一致,请参考部署ms-register章节内容。
# 5.3.1 修改配置
如上所属,ms-config服务是一个集中式配置管理服务,管理着N个微服务的配置信息。为了对不同服务进行区分,所有的配置文件均在native下通过业务目录隔离存储。