1. 背景介绍
OpenV2X 官方安装文档 建议在 CentOS 对应版本上安装。在 Windows + WSL + Desktop 上安装会产生一定问题。
主要原因是由于 Windows + WSL + Docker Desktop 在 docker daemon 机制上和 CentOS 上的一些差异 (更多参考参见 Docker 官方 issue),会导致官方的 OpenV2X Docker Compose 对于在 Windows + WSL + Desktop 环境中,对于 network_mode: ‘host’ 模式安装完成后,无法访问的问题。
本文章通过一定配置修改,实现了 OpenV2X 在 Windows 上 All -in-one 模式的安装。但是只是作为体验目的,不建议作为正式开发环境使用。
2. 安装机器配置
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
3. 安装 WSL 和 Docker Desktop
3.1 在Microsoft 应用商店中安装 Ubuntu 20.04.4 LTS, 注意记住你的 sudo 密码,后面安装都需要用到 。
3.2 安装最新版本 Docker Desktop ,并配置 WSL 2 为后端(更多相关 de Docker Desktop 配置请参考官网)
3.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
3.4 打开Docker Destop
4. 下载 OpenV2X 并解压安装包
4.1 进入 WSL Ubuntu 控制台
4.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
……
4.3 确认下载成功
$ ls
albany.zip
4.4 安装 unzip 工具,并解压 albany.zip 文件,解压文件夹为 docs-albany
$ sudo apt install unzip
……
$ ls
albany.zip docs-albany
5. 修改安装配置
5.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 安装。
5.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 ,在安装文件完成后,还需要对其配置文件进行修改。
5.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'
6. 开始安装
6.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
inet 172.26.138.21/20 brd 172.26.143.255 scope global eth0
在 Windows 中运行命令行窗口,确保可以 ping 通以上地址.
6.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 OPENV2X_EXTERNAL_IP=172.26.138.21
export OPENV2X_REDIS_ROOT=password
export OPENV2X_MARIADB_ROOT=password
export OPENV2X_MARIADB_DANDELION=password
export OPENV2X_EMQX_ROOT=password
.....
整个安装过程大概需要大概需要 60~120 分钟,期间脚本会从 github 上下载 penV2X 镜像,并在 Docker Desktop 上自动根据 docker-compose 脚本进行安装。
注意:如果遇到网络问题 pull 镜像可能失败,特别是 cerebrum 包含 pytorch AI模块的镜像包比较大(下载包 1.79G,包自动解压后镜像 3.59G),下载和解压需要一定等待时间,中途如果有停顿请耐心等待。如果失败,可以重新运行脚本,已经下载完成的包将会跳过,只下载安装失败的包。
6.3 安装过程中,可以打开 Docker Desktop 查看镜像下载和安装的进展。 镜像下载进展:
安装完成后,进入 Docker Desktop ,点击 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
7. 安装后配置
7.1 安装完成后,在 Windows 中打开浏览器,输入 localhost:80(或者 <你的 WSL IP>:80)能够访问 Edgeview 界面
输入 localhost:8080 (或者 <你的WSL IP>:8080) 能够访问 Centerview.
但是在两个界面中,输入默认用户名: admin 密码: dandelion 都无法登录。原因是这两个前端依赖后端 Dandelion(设备管理模块) API,需要进行手动设置。
7.2 获得 Dandelion(设备管理模块)的容器地址。
从 Docker Desktop 中进入 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
inet 192.168.65.3 netmask 255.255.255.0 broadcast 192.168.65.255
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
…..
7.3 进入 Edgeview 容器终端。
测试 Dandelion 的 Docs 的 Endpoint 地址进行验证,如果能返回一系列 html 信息,说明 Edgeview 的地址能够对接 Dandelion 的 API。
7.4 进入 Edgeview 中修改后端 Dandelion的配置
进入 Edgeview 容器终端控制台。
运行VI,修改配置。
# vi /etc/nginx/conf.d/default.conf
修改 default.conf 这个文件中,将 localhost 改为上述第 2 步中 Dandelion(设备管理模块)的容器地址。保存并退出。
如在我们的安装中,第 2 步中 Dandelion 的容器地址为 192.168.65.3,端口 28300 保持不变。
7.5 重启 Edgeview 服务
再次访问 Edgeview , 输入用户名: admin 密码: dandelion。可以登录成功。
7.6 用同样方法修改 Centerview,并重启 Centerview 容器。输入用户名: admin 密码: dandelion,可以登录成功,并看到 Centerview 界面。
更多操作
关于 OpenV2X 的快速使用方式,可以参考 OpenV2X 快速使用手册。打开RSE 模拟器(在 Windows 浏览器中输入 localhost:6688),可以模拟 RSU 的创建、路侧场景模拟等操作。
已知问题
在 Win + WSL + Docker Desktop 模式下,Windows 重启之后,WSL 的地址会改变,但是不影响通过 Windows 浏览器以 localhost 方式访问。