背景介绍
OpenV2X 官方安装文档 (https://github.com/open-v2x/docs/blob/albany/src/v2x-quick-install.md)建议在CentOS对应版本上安装。在Windows + WSL + Desktop上安装会产生一定问题。
主要原因是由于Windows + WSL + DockerDesktop在docker daemon 机制上和CentOS上的一些差异 (更多参考参见Docker官方 issue:https://github.com/docker/for-win/issues/6736),会导致官方的OpenV2X Docker Compose 在 对于在Windows + WSL + Desktop环境中,对于 network_mode: 'host' 模式安装完成后,无法访问的问题。
本文章通过一定配置修改,实现了OpenV2X在Windows 上 All -in-one 模式的安装。但是只是作为体验目的,不建议作为正式开发环境使用。
安装机器配置
PS C:\WINDOWS\system32> systeminfo
主机名: | DESKTOP-SIRI3G0 |
OS 名称: | Microsoft Windows 10 专业版 |
OS 版本: | 10.0.19043 暂缺Build 19043 |
OS 制造商: | Microsoft Corporation |
系统型号: | Surface Pro 3 |
系统类型: | x64-based PC |
处理器: | 安装了 1 个处理器 |
[01]: Intel64 Family 6 Model 69 Stepping 1 GenuineIntel ~2501 Mhz | |
BIOS 版本: | American Megatrends Inc. 3.11.2650, 2019/4/30 |
物理内存总量: | 8GB |
安装WSL和Docker Desktop
1)在Microsoft 应用商店中安装Ubuntu 20.04.4 LTS,注意记住你的sudo密码,后面安装都需要用到。
2)安装最新版本Docker Desktop ,并配置WSL 2为后端 (更多相关de Docker Desktop配置请参考官网 https://docs.docker.com/desktop/windows/wsl/)。
3)进入PowerShell ,确认安装成功。
PS C:\WINDOWS\system32> wsl -l -v NAME STATE VERSION * Ubuntu-20.04 Running 2 docker-desktop-data Running 2 docker-desktop Running 2 |
4)打开Docker Destop。
下载OpenV2X并解压安装包
1)进入WSL Ubuntu 控制台。
2)在Ubuntu 控制台中下载OpenV2X Albany 版本。
$ wget https://gitee.com/open-v2x/docs/repository/archive/albany.zip --2022-08-29 15:00:50-- https://gitee.com/open-v2x/docs/repository/archive/albany.zip …… |
3)确认下载成功。
$ ls albany.zip |
4)安装unzip工具,并解压albany.zip文件,解压文件夹为docs-albany。
$ sudo apt install unzip …… $ ls albany.zip docs-albany |
修改安装配置
1)解压后的文件docs-albany目录树如下图所示,其中install.sh是主安装文件,前文介绍过,在Windows + WSL + Desktop在docker daemon 机制上和CentOS上的一些差异 ,如果按照CentOS的脚本,对于 network_mode: 'host'模式安装完成后,会导致无法访问页面的问题。因此要对docs-albany/src/deploy/docker-compose-service.yaml进行修改后,再运行 install.sh安装。
2)修改docs-albany/src/deploy目录下的docker-compose-service.yaml。
vi docs-albany/src/deploy/docker-compose-service.yaml |
主要修改以下两处内容实现端口映射,这样安装成功后,可以通过localhost:80访问edgeview可以暴露在80端口,可以通过localhost:8080访问centerview。不过由于默认安装脚本中后端API的配置文件还是默认访问local host ,在安装文件完成后,还需要对其配置文件进行修改。
3)确认配置修改成功。
$ cat docs-albany/src/deploy/docker-compose-service.yaml version: '3.1' services: dandelion: container_name: 'dandelion' image: 'openv2x/dandelion:albany' restart: 'always' network_mode: 'host' volumes: - '/etc/localtime:/etc/localtime' - '/etc/dandelion/dandelion.conf:/etc/dandelion/dandelion.conf' - '/var/log/dandelion:/var/log/dandelion' cerebrum: container_name: 'cerebrum' image: 'openv2x/cerebrum:albany' restart: 'always' network_mode: 'host' environment: redis_host: '127.0.0.1' mqtt_host: '127.0.0.1' mysql_host: '127.0.0.1' cloud_url: 'http://127.0.0.1:28300/api/v1' mysql_user: 'root' mysql_password: mysql@1234 emqx_password: abc@1234 redis_password: redis12345 volumes: - '/etc/localtime:/etc/localtime' edgeview: container_name: 'edgeview' image: 'openv2x/edgeview:albany' restart: 'always' ports: - 80:80 environment: API_SERVER: 'http://external_ip/api' MAP_KEY: 'a7a90e05a37d3f6bf76d4a9032fc9129' volumes: - '/etc/localtime:/etc/localtime' - '/etc/edgeview/nginx.conf:/etc/nginx/nginx.conf' - '/etc/edgeview/edgeview.conf:/etc/nginx/conf.d/default.conf' - '/data/public/uploadData:/var/www/edgeview/uploadData' centerview: container_name: 'centerview' image: 'openv2x/centerview:albany' restart: 'always' ports: - 8080:8080 environment: API_SERVER: 'http://external_ip/api' MAP_KEY: 'a7a90e05a37d3f6bf76d4a9032fc9129' MQTT_URL: 'mqtt://external_ip:15675' MQTT_PATH: '/mqtt' MQTT_USERNAME: 'root' MQTT_PASSWORD: abc@1234 volumes: - '/etc/localtime:/etc/localtime' - '/etc/centerview/nginx.conf:/etc/nginx/nginx.conf' - '/etc/centerview/centerview.conf:/etc/nginx/conf.d/default.conf' - '/data/public/uploadData:/var/www/centerview/uploadData' rse-simulator: container_name: 'rse-simulator' image: 'openv2x/roadmocker:albany' restart: 'always' ports: - '6688:80' volumes: - '/etc/localtime:/etc/localtime' |
开始安装
1)在Ubuntu控制台中查询Ubuntu 的地址的eth0的地址,这个地址将在安装过程中作为 external IP使用(注意这个地址不是固定的,请使用你自己运行查看到的地址,如下面运行结果中,172.26.138.21即为Ubuntu本机地址)。
$ ip addr | grep eth0 4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 172.26.138.21/20 brd 172.26.143.255 scope global eth0 |
在windows中运行命令行窗口,确保可以ping通以上地址
2)进入docs-albany/src/目录(注意一定要在这个目录下运行脚本),运行安装脚本,其中external ip输入以上第一步中查询到的地址
$ cd docs-albany/src/ $ sudo bash ./install.sh Enter your openv2x external ip: 172.26.138.21 Enter your redis root password: password Enter your mariadb root password: password Enter your mariadb dandelion password: password Enter your emqx root password: password export external_ip=172.26.138.21 export redis_root=password export mariadb_root=password export mariadb_dandelion=password export emqx_root=password ..... |
整个安装过程大概需要大概需要60~120分钟,期间脚本会从 github上下载OpenV2X镜像,并在Docker Desktop上自动根据docker-compose 脚本进行安装。
注意:如果遇到网络问题pull镜像可能失败,特别是cerebrum 包含 pytorch AI模块的镜像包比较大(下载包1.79G,包自动解压后镜像3.59G),下载和解压需要一定等待时间,中途如果有停顿请耐心等待。如果失败,可以重新运行脚本,已经下载完成的包将会跳过,只下载安装失败的包。
3)安装过程中,可以打开docker desktop 查看镜像下载和安装的进展。
镜像下载进展:
安装完成后,进入DockerDesktop ,点击containers可以看到如下运行的服务。
包含以下镜像:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE openv2x/edgeview albany 249993010951 3 days ago 27.8MB openv2x/centerview albany e9f78c7aa133 3 days ago 29.1MB openv2x/dandelion albany bbfdd4178d38 3 days ago 836MB openv2x/cerebrum albany c2e0ecdb59da 3 days ago 3.59GB openv2x/roadmocker albany a27eaa6442b3 3 weeks ago 272MB redis 6.2.4-alpine 500703a12fa4 13 months ago 32.3MB emqx/emqx 4.3.0 015f3111384c 15 months ago 153MB mariadb 10.5.5 41fa9265d4df 23 months ago 406MB |
安装后配置
1)安装完成后,在Windows中打开浏览器,输入 localhost:80 (或者<你的WSL IP>:80)能够访问Edgeview界面。
输入localhost:8080(或者<你的WSL IP>:8080) 能够访问Centerview
但是在两个界面中,输入默认用户名: admin 密码:dandelion都无法登录。原因是这两个前端依赖后端Dandelion(设备管理模块) API,需要进行手动设置。
2)获得Dandelion(设备管理模块)的容器地址。
从DockerDesktop中进入Dandelion容器终端控制台
因为容器镜像中没有安装net-tools,需要手工进行安装。
# apt-get update …….. Reading package lists... Done # apt install net-tools Reading package lists... Done Building dependency tree Reading state information... Done ….. |
安装net-tools后,通过ifconfig获得容器所在IP地址,取eth0所在的地址(这一地址也是docker deamon的地址,因为部署dandelion的YAML脚本中采用的是network_mode:’host’的模式,因此这一地址即为dandelion服务所在的IP地址,dandelion的默认端口为28300)。
# ifconfig …… eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 192.168.65.3 inet6 fe80::50:ff:fe00:1 prefixlen 64 scopeid 0x20<link> ether 02:50:00:00:00:01 txqueuelen 1000 (Ethernet) RX packets 1135 bytes 1227511 (1.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1042 bytes 84973 (82.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ….. |
3)进入Edgeview容器终端。
测试Dandelion的Docs的Endpoint地址进行验证,如果能返回一系列html信息,说明edgeview的地址能够对接Dandelion 的API。
4)进入Edgeview中修改后端 Dandelion的配置。
进入edgeview容器终端控制台
运行VI,修改配置
# vi /etc/nginx/conf.d/default.conf |
修改default.conf这个文件中,将localhost改为上述第2步中Dandelion(设备管理模块)的容器地址。保存并退出。
如在我们的安装中,第2步中Dandelion的容器地址为192.168.65.3,端口28300保持不变。
5)重启Edgeview服务。
再次访问edgeview , 输入用户名: admin 密码:dandelion。可以登录成功
6)用同样方法修改centerview,并重启centerview容器。输入用户名: admin 密码:dandelion,可以登录成功,并看到Centerview界面。
更多操作
关于OpenV2X的快速使用方式,可以参考《OpenV2X快速使用手册》https://gitee.com/open-v2x/docs/blob/albany/src/v2x-quick-start.md。打开RSE 模拟器( 在Windows浏览器中输入localhost:6688),可以模拟RSU的创建、路侧场景模拟等操作。
已知问题
在Win+WSL+DockerDesktop模式下,Windows重启之后,WSL的地址会改变,但是不影响通过Windows浏览器以localhost方式访问。