在 Windows + WSL + Docker Desktop 下安装 OpenV2X

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 方式访问。