更新文档
This commit is contained in:
parent
0ef2235a66
commit
66f3ce92d6
@ -24,16 +24,16 @@
|
||||
|
||||
1. 获取项目代码
|
||||
|
||||
```bash
|
||||
git clone [项目仓库地址]
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
```bash
|
||||
git clone [项目仓库地址]
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
2. 执行部署脚本
|
||||
|
||||
```bash
|
||||
sudo ./scripts/deploy.sh
|
||||
```
|
||||
```bash
|
||||
sudo ./scripts/deploy.sh
|
||||
```
|
||||
|
||||
## 离线部署
|
||||
|
||||
@ -43,16 +43,16 @@ sudo ./scripts/deploy.sh
|
||||
|
||||
1. 在有网络的 CentOS 环境中,获取项目代码
|
||||
|
||||
```bash
|
||||
git clone [项目仓库地址]
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
```bash
|
||||
git clone [项目仓库地址]
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
2. 执行离线包准备脚本
|
||||
|
||||
```bash
|
||||
./scripts/prepare_offline_packages.sh
|
||||
```
|
||||
```bash
|
||||
./scripts/prepare_offline_packages.sh
|
||||
```
|
||||
|
||||
脚本会自动完成:
|
||||
|
||||
@ -64,28 +64,28 @@ cd CollisionAvoidance
|
||||
|
||||
1. 将生成的归档文件传输到目标服务器
|
||||
|
||||
```bash
|
||||
scp ../CollisionAvoidance.tar.gz root@target-server:/tmp/
|
||||
```
|
||||
```bash
|
||||
scp ../CollisionAvoidance.tar.gz root@target-server:/tmp/
|
||||
```
|
||||
|
||||
2. 在目标服务器上解压
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
tar xzf CollisionAvoidance.tar.gz
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
```bash
|
||||
cd /tmp
|
||||
tar xzf CollisionAvoidance.tar.gz
|
||||
cd CollisionAvoidance
|
||||
```
|
||||
|
||||
3. 删除 32 位依赖包
|
||||
|
||||
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位(i686)的依赖包,以避免安装冲突。这些包是在准备离线包时自动下载的,但在 64 位系统上不需要。
|
||||
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位(i686)的依赖包,以避免安装冲突。这些包是在准备离线包时自动下载的,但在 64 位系统上不需要。
|
||||
|
||||
```bash
|
||||
# 删除所有 i686 架构的包
|
||||
cd packages
|
||||
rm -f *i686.rpm
|
||||
cd ..
|
||||
```
|
||||
```bash
|
||||
# 删除所有 i686 架构的包
|
||||
cd packages
|
||||
rm -f *i686.rpm
|
||||
cd ..
|
||||
```
|
||||
|
||||
4. 执行部署脚本
|
||||
|
||||
|
||||
@ -615,7 +615,7 @@ while (total_read < content_length) {
|
||||
- 验证位置历史记录
|
||||
|
||||
3. 数据有效性测试
|
||||
- 测试航空器数据
|
||||
- 测试航<EFBFBD><EFBFBD>器数据
|
||||
- 测试车辆数据
|
||||
- 验证速度和位置限制
|
||||
|
||||
@ -662,7 +662,7 @@ while (total_read < content_length) {
|
||||
|
||||
1. 航空器数据
|
||||
- 基于青岛胶东机场坐标
|
||||
- 模拟<EFBFBD><EFBFBD>面滑行场景
|
||||
- 模拟地面滑行场景
|
||||
- 生成连续位置点
|
||||
|
||||
2. 车辆数据
|
||||
@ -840,3 +840,37 @@ void sendCommand(const ControlCommand& command, const std::string& ip, int port)
|
||||
```
|
||||
|
||||
使用 HTTP 客户端库,向可控车辆发送 POST 请求。请求路径为 `/command`,请求体为控制指令的 JSON 表示。根据响应状态码判断指令是否发送成功。
|
||||
|
||||
## 遗留问题
|
||||
|
||||
### 1. Python 包依赖问题
|
||||
|
||||
- 当前部署脚本在 Python 3.6 环境下存在依赖问题
|
||||
- 需要添加 importlib-metadata 和 zipp 包
|
||||
- 需要调整包版本以兼容 Python 3.6
|
||||
- 考虑使用系统自带的 Python 包替代 pip 安装
|
||||
|
||||
### 2. 部署脚本改进
|
||||
|
||||
- prepare_deploy.sh 中下载 Python 包时需要包含所有依赖
|
||||
- deploy.sh 中需要按正确顺序安装 Python 包
|
||||
- 考虑使用 requirements.txt 管理 Python 依赖
|
||||
- 需要优化部署脚本的错误处理和日志输出
|
||||
|
||||
### 3. 生产环境适配
|
||||
|
||||
- 需要适配离线环境的部署需求
|
||||
- 需要完善 SELinux 相关的配置
|
||||
- 需要优化日志文件的管理
|
||||
- 需要完善服务启动失败的故障排查机制
|
||||
|
||||
### 4. 后续优化建议
|
||||
|
||||
- 简化部署步骤,减少人工干预
|
||||
- 添加部署回滚机制
|
||||
- 添加部署验证步骤
|
||||
- 完善部署文档
|
||||
- 简化部署步骤,减少人工干预
|
||||
- 添加部署回滚机制
|
||||
- 添加部署验证步骤
|
||||
- 完善部署文档
|
||||
|
||||
232
docs/docker_deployment_design.md
Normal file
232
docs/docker_deployment_design.md
Normal file
@ -0,0 +1,232 @@
|
||||
# Docker 部署设计文档
|
||||
|
||||
本文档详细说明碰撞避免系统的 Docker 部署方案,包括测试环境和生产环境的部署流程。
|
||||
|
||||
## 环境说明
|
||||
|
||||
### 测试环境
|
||||
|
||||
- CentOS 7
|
||||
- 可以访问互联网
|
||||
- 可以安装软件包
|
||||
- 内存 >= 4GB
|
||||
- 磁盘空间 >= 20GB
|
||||
|
||||
### 生产环境
|
||||
|
||||
- CentOS 7
|
||||
- 不能访问互联网
|
||||
- 不能在线安装软件包
|
||||
- 内存 >= 8GB
|
||||
- 磁盘空间 >= 50GB
|
||||
|
||||
## 测试环境工作
|
||||
|
||||
### 1. 环境准备
|
||||
|
||||
```bash
|
||||
# 安装 Docker
|
||||
curl -fsSL https://get.docker.com | sh
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
|
||||
# 安装 Docker Compose
|
||||
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
### 2. 镜像构建与测试
|
||||
|
||||
1. 构建基础镜像
|
||||
2. 运行自动化测试
|
||||
3. 验证功能完整性
|
||||
4. 检查资源使用情况
|
||||
5. 验证日志收集
|
||||
6. 测试健康检查机制
|
||||
|
||||
### 3. 准备生产部署包
|
||||
|
||||
1. 导出 Docker 镜像
|
||||
|
||||
```bash
|
||||
# 保存基础镜像
|
||||
docker save centos:7 > centos7-base.tar
|
||||
|
||||
# 保存应用镜像
|
||||
docker save collision-avoidance:latest > collision-avoidance.tar
|
||||
```
|
||||
|
||||
2. 准备离线安装包
|
||||
|
||||
```bash
|
||||
# 创建部署包目录
|
||||
mkdir -p offline-package
|
||||
cd offline-package
|
||||
|
||||
# 下载 Docker 离线安装包
|
||||
yum install -y yum-utils
|
||||
yumdownloader --resolve docker-ce docker-ce-cli containerd.io
|
||||
|
||||
# 下载 Docker Compose 二进制文件
|
||||
wget https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
|
||||
```
|
||||
|
||||
3. 创建部署脚本
|
||||
|
||||
```bash
|
||||
# 打包所有文件
|
||||
tar czf docker-deploy-package.tar.gz \
|
||||
centos7-base.tar \
|
||||
collision-avoidance.tar \
|
||||
*.rpm \
|
||||
docker-compose-Linux-x86_64 \
|
||||
scripts/
|
||||
```
|
||||
|
||||
## 生产环境工作
|
||||
|
||||
### 1. 离线安装 Docker
|
||||
|
||||
```bash
|
||||
# 解压部署包
|
||||
tar xzf docker-deploy-package.tar.gz
|
||||
|
||||
# 安装 Docker RPM 包
|
||||
rpm -ivh *.rpm
|
||||
|
||||
# 安装 Docker Compose
|
||||
cp docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
|
||||
# 启动 Docker 服务
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
```
|
||||
|
||||
### 2. 加载 Docker 镜像
|
||||
|
||||
```bash
|
||||
# 加载基础镜像
|
||||
docker load < centos7-base.tar
|
||||
|
||||
# 加载应用镜像
|
||||
docker load < collision-avoidance.tar
|
||||
```
|
||||
|
||||
### 3. 部署配置
|
||||
|
||||
1. 创建数据目录
|
||||
|
||||
```bash
|
||||
mkdir -p /data/collision-avoidance/{config,logs}
|
||||
```
|
||||
|
||||
2. 配置文件准备
|
||||
|
||||
```bash
|
||||
cp config/* /data/collision-avoidance/config/
|
||||
```
|
||||
|
||||
### 4. 启动<E590AF><E58AA8><EFBFBD>务
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 部署后验证
|
||||
|
||||
### 1. 基础检查
|
||||
|
||||
- 容器状态
|
||||
- 端口可用性
|
||||
- 日志输出
|
||||
- 资源使用情况
|
||||
|
||||
### 2. 功能验证
|
||||
|
||||
- WebSocket 连接测试
|
||||
- Mock Server 功能测试
|
||||
- 碰撞检测功能测试
|
||||
- 数据持久化验证
|
||||
|
||||
### 3. 监控检查
|
||||
|
||||
- 健康检查状态
|
||||
- 资源监控指标
|
||||
- 日志收集状态
|
||||
|
||||
## 回滚方案
|
||||
|
||||
### 1. 准备回滚镜像
|
||||
|
||||
- 在测试环境保留上一个稳定版本镜像
|
||||
- 将回滚镜像包含在部署包中
|
||||
|
||||
### 2. 回滚步骤
|
||||
|
||||
```bash
|
||||
# 停止当前服务
|
||||
docker-compose down
|
||||
|
||||
# 加载回滚镜像
|
||||
docker load < collision-avoidance-rollback.tar
|
||||
|
||||
# 修改镜像标签
|
||||
docker tag collision-avoidance-rollback:latest collision-avoidance:latest
|
||||
|
||||
# 重启服务
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
### 1. 安全考虑
|
||||
|
||||
- 使用非 root 用户运行容器
|
||||
- 配置文件权限控制
|
||||
- 网络访问限制
|
||||
- 资源限制设置
|
||||
|
||||
### 2. 性能优化
|
||||
|
||||
- 容器资源限制配置
|
||||
- 日志轮转策略
|
||||
- 数据持久化方案
|
||||
|
||||
### 3. 运维建议
|
||||
|
||||
- 定期备份配置文件
|
||||
- 监控告警配置
|
||||
- 日志管理策略
|
||||
- 定期检查磁盘使用情况
|
||||
|
||||
## 故障处理
|
||||
|
||||
### 1. 常见问题
|
||||
|
||||
- 容器启动失败
|
||||
- 端口冲突
|
||||
- 资源不足
|
||||
- 日志异常
|
||||
|
||||
### 2. 处理方法
|
||||
|
||||
- 检查容器日志
|
||||
- 验证配置文件
|
||||
- 检查<E6A380><E69FA5>源使用
|
||||
- 查看系统日志
|
||||
|
||||
## 维护计划
|
||||
|
||||
### 1. 日常维护
|
||||
|
||||
- 日志清理
|
||||
- 磁盘空间检查
|
||||
- 性能监控
|
||||
- 配置备份
|
||||
|
||||
### 2. 定期更新
|
||||
|
||||
- 安全补丁更新
|
||||
- 基础镜像更新
|
||||
- 应用版本更新
|
||||
@ -16,7 +16,10 @@ Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提
|
||||
"flightNo": "AC001", # 航班号
|
||||
"latitude": 36.362647780875804, # 纬度
|
||||
"longitude": 120.088303, # 经度
|
||||
"direction": 1, # 1表示向北
|
||||
"direction": { # 使用方向向量
|
||||
"lat": initial_target_lat,
|
||||
"lon": initial_target_lon
|
||||
},
|
||||
"speed": 50.0 # 滑行速度 50km/h
|
||||
}
|
||||
```
|
||||
@ -33,6 +36,21 @@ Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 关键坐标点
|
||||
|
||||
- T1 (120.0868853, 36.35496367): 无人车1起点
|
||||
- T2 (120.08502054, 36.35448347): 冲突点1,西路口
|
||||
- T3 (120.08341044, 36.35406879): 特勤车终点
|
||||
- T4 (120.08558121, 36.35305878): 无人车1终点/无人车2起点/特勤车起点
|
||||
- T5 (120.08400957, 36.35265197)
|
||||
- T6 (120.08649105, 36.35074527): 冲突点2,东路口
|
||||
- T7 (120.08562915, 36.35052372): 航空器1终点
|
||||
- T8 (120.08676664, 36.35004529): 无人车2终点
|
||||
- T9 (120.08520616, 36.34964473)
|
||||
- T10 (120.08710569, 36.34917893)
|
||||
- T11 (120.0873865, 36.3509885): 航空器1终点
|
||||
- T12 (120.08603613, 36.35190217): QN002新起点(距T6路口150米)
|
||||
|
||||
## 3. 运动模式
|
||||
|
||||
### 3.1 航空器运动
|
||||
@ -43,46 +61,111 @@ Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提
|
||||
|
||||
### 3.2 无人车运动
|
||||
|
||||
- QN001:在西路口东西向往返,范围 50 米
|
||||
- QN002:在东路口东西方向往返,范围 100-150 米
|
||||
- TQ001:先东西移动,到达指定位置后转向南北移动,然后返回
|
||||
- QN001:
|
||||
1. T1 -> T2(西路口)
|
||||
2. T2 -> T4
|
||||
3. 到达T4后返回T1
|
||||
|
||||
- QN002:
|
||||
1. T12 -> T8
|
||||
2. 到达T8后返回T12
|
||||
|
||||
- TQ001(特勤车):
|
||||
1. T4 -> T2(西路口)
|
||||
2. T2 -> T3
|
||||
3. 到达T3后返回T4
|
||||
|
||||
### 3.3 配置参数
|
||||
|
||||
- 距离阈值:
|
||||
- 300米:DIST_300M
|
||||
- 200米:DIST_200M
|
||||
- 150米:DIST_150M
|
||||
- 100米:DIST_100M
|
||||
- 50米:DIST_50M
|
||||
|
||||
- 时间配置:
|
||||
- 返回等待时间:10秒
|
||||
- 位置更新间隔:1秒
|
||||
- 红绿灯切换间隔:10秒
|
||||
|
||||
- 速度配置:
|
||||
- 默认车辆速度:18.0 km/h
|
||||
- 紧急制动减速度:80%/更新
|
||||
- 正常制动减速度:20%/更新
|
||||
|
||||
## 4. HTTP API 接口
|
||||
|
||||
### 4.1 位置查询接口
|
||||
### 4.1 航空器位置查询接口
|
||||
|
||||
```http
|
||||
GET /api/position
|
||||
GET /api/getCurrentFlightPositions
|
||||
```
|
||||
|
||||
返回所有移动物体的当前位置信息:
|
||||
|
||||
```json
|
||||
{
|
||||
"aircraft": [
|
||||
{
|
||||
"flightNo": "AC001",
|
||||
"latitude": 36.362647780875804,
|
||||
"longitude": 120.088303,
|
||||
"heading": 0.0,
|
||||
"speed": 13.89,
|
||||
"timestamp": 1733741411167
|
||||
}
|
||||
],
|
||||
"vehicles": [
|
||||
{
|
||||
"vehicleNo": "QN001",
|
||||
"latitude": 36.362448155990975,
|
||||
"longitude": 120.08844920958369,
|
||||
"heading": 90.0,
|
||||
"speed": 10.0,
|
||||
"timestamp": 1733741411168
|
||||
}
|
||||
]
|
||||
}
|
||||
[
|
||||
{
|
||||
"flightNo": "AC001",
|
||||
"latitude": 36.362647780875804,
|
||||
"longitude": 120.088303,
|
||||
"direction": {
|
||||
"lat": 0.707,
|
||||
"lon": 0.707
|
||||
},
|
||||
"speed": 36.0,
|
||||
"time": 1733741411167
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### 4.2 车辆控制接口
|
||||
### 4.2 车辆位置查询接口
|
||||
|
||||
```http
|
||||
GET /api/getCurrentVehiclePositions
|
||||
```
|
||||
|
||||
返回所有车辆的当前位置信息:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"vehicleNo": "QN001",
|
||||
"latitude": 36.362448155990975,
|
||||
"longitude": 120.08844920958369,
|
||||
"direction": -1,
|
||||
"speed": 18.0,
|
||||
"time": 1733741411168,
|
||||
"phase": 0
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### 4.3 红绿灯状态查询接口
|
||||
|
||||
```http
|
||||
GET /api/getTrafficLightSignals
|
||||
```
|
||||
|
||||
返回所有红绿灯的当前状态:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"id": "TL001",
|
||||
"state": 1,
|
||||
"timestamp": 1733741411167,
|
||||
"intersection": "INT001",
|
||||
"position": {
|
||||
"latitude": 36.35448347,
|
||||
"longitude": 120.08502054
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### 4.4 车辆控制接口
|
||||
|
||||
```http
|
||||
POST /api/vehicle/command
|
||||
@ -150,7 +233,7 @@ Content-Type: application/json
|
||||
1. 高优先级指令可以覆盖低优先级指令
|
||||
2. 相同优先级的新指令可以覆盖旧指令
|
||||
3. 低优先级指令不能覆盖高优先级指令
|
||||
4. 恢复行驶需要满足两个条件:
|
||||
4. 恢复行驶需要满足个条件:
|
||||
- 收到 RESUME 指令
|
||||
- 没有任何更高优先级的指令
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user