背景介绍

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密码,后面安装都需要用到。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_docker

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 控制台。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_windows_02

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安装。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_windows_03

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 ,在安装文件完成后,还需要对其配置文件进行修改。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_docker_04

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通以上地址

docker desktop dev 一直转圈 docker desktop wsl distro stopped_docker_05

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  查看镜像下载和安装的进展。

镜像下载进展:

docker desktop dev 一直转圈 docker desktop wsl distro stopped_容器_06

安装完成后,进入DockerDesktop ,点击containers可以看到如下运行的服务。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_nginx_07

包含以下镜像:

$ 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界面。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_windows_08

输入localhost:8080(或者<你的WSL IP>:8080) 能够访问Centerview

docker desktop dev 一直转圈 docker desktop wsl distro stopped_nginx_09

但是在两个界面中,输入默认用户名: admin 密码:dandelion都无法登录。原因是这两个前端依赖后端Dandelion(设备管理模块) API,需要进行手动设置。

2)获得Dandelion(设备管理模块)的容器地址。

从DockerDesktop中进入Dandelion容器终端控制台

docker desktop dev 一直转圈 docker desktop wsl distro stopped_docker_10

因为容器镜像中没有安装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容器终端。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_docker_11

测试Dandelion的Docs的Endpoint地址进行验证,如果能返回一系列html信息,说明edgeview的地址能够对接Dandelion 的API。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_容器_12

4)进入Edgeview中修改后端 Dandelion的配置。

进入edgeview容器终端控制台

运行VI,修改配置

# vi  /etc/nginx/conf.d/default.conf

修改default.conf这个文件中,将localhost改为上述第2步中Dandelion(设备管理模块)的容器地址。保存并退出。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_容器_13

如在我们的安装中,第2步中Dandelion的容器地址为192.168.65.3,端口28300保持不变。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_windows_14

5)重启Edgeview服务。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_Windows_15

再次访问edgeview , 输入用户名: admin 密码:dandelion。可以登录成功

docker desktop dev 一直转圈 docker desktop wsl distro stopped_Windows_16

6)用同样方法修改centerview,并重启centerview容器。输入用户名: admin 密码:dandelion,可以登录成功,并看到Centerview界面。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_windows_17

更多操作

关于OpenV2X的快速使用方式,可以参考《OpenV2X快速使用手册》https://gitee.com/open-v2x/docs/blob/albany/src/v2x-quick-start.md。打开RSE  模拟器( 在Windows浏览器中输入localhost:6688),可以模拟RSU的创建、路侧场景模拟等操作。

docker desktop dev 一直转圈 docker desktop wsl distro stopped_容器_18

已知问题

在Win+WSL+DockerDesktop模式下,Windows重启之后,WSL的地址会改变,但是不影响通过Windows浏览器以localhost方式访问。