最近在上手 neovim,尝试使用 wsl 作为我的开发环境。本文就以 ruoyi-vue-pro 为例,整理一下在命令行中启动 SpringBoot 项目的完整过程,最终效果是可以在 windows 中的浏览器中访问 wsl 中启动的项目。
操作系统版本:Windows 11 专业版 23H2 22631.3880 wsl 版本:Ubuntu 22.04 LTS java 版本:OpenJDK 17.0.1 maven 版本:3.9.1 项目版本:ruoyi-vue-pro,master-jdk17 分支
安装必要开发工具
如果是在 Ubuntu 中开发,默认已安装了 git。
安装 JDK 17
首先 java -version
确保自己的 jdk 版本正确。
如果不对,需要安装指定的版本:
|
|
ubuntu 中可以使用 sudo update-alternatives --config java
命令切换 jdk 的版本。
安装 Maven
可以直接使用 sudo apt install maven -y
安装 ubuntu 库中的 maven。如果觉得版本较旧,也可以按照下面的步骤手动安装较新的版本(需先卸载原有的 maven。以 3.8.7 版本为例)。
- 从 maven 官网 下载指定版本的压缩包。
|
|
- 解压下载的 maven 压缩包到 /opt 目录(或任何你想安装的目录):
|
|
- 编辑环境变量
|
|
让环境变量生效:
|
|
- 验证
|
|
配置 Maven
打开 maven 的配置文件 setting.xml
- 如果是 apt 安装的则使用下面这条命令:
|
|
- 如果是手动安装的则使用下面这条命令:
|
|
-E
参数表示继承当前的环境变量,否则使用的是默认的 vim 配置。
在 <mirrors>
标签内填写下列镜像:
|
|
(可选)在 proxies
标签中加入如下代码,用于设置 maven 使用的代理。使用镜像的时候可以不设置。
|
|
如果设置的代理,<host>
那一栏需要设置为 windows 的正在使用的网卡的默认网关或者 ip 地址,比如下面的这个 ip 地址(powershell 中 执行 ipconfig):
下载 Ruoyi-Vue-Pro 并安装依赖
假设将项目下载到 ~
目录。
|
|
git clone -b master-jdk17 https://github.com/YunaiV/ruoyi-vue-pro.git
下载 ruoyi-vue-pro 的 master-jdk17 分支。
cd ruoyi-vue-pro
切换到项目根目录。
mvn clean install -Dmaven.test.skip=true
安装所需的依赖。-Dmaven.test.skip=true
用于跳过测试关的依赖安装,否则可能出现一些错误。
如果出现一些依赖安装失败,则可能需要删除依赖之后重新安装。例如我的 mq 相关依赖安装失败:
|
|
则删除 rocketmq-rocksdb
。
|
|
之后重新下载依赖
|
|
初始化 Mysql
执行以下命令:
|
|
注:如果 wsl 中没有 systemd(即 systemctl 命令),则需要在 wsl.conf
文件中开启。
在 wsl 的 /etc/wsl.conf
文件中加入如下代码后重启以开启 systemd:
|
|
创建并初始化 ruoyi-vue-pro 的数据库:
|
|
ubuntu 默认安装的 mysql 是没有密码的。ubuntu 中 mysql 如果没有密码的话,项目启动的时候可能会出现一些权限相关的错误导致无法访问,所以我们需要修改 mysql 的密码,可以按照以下步骤执行:
- 关闭 mysql 服务和进程:
|
|
- 打开 mysql 的安全模式,可以不用密码打开 mysql:
|
|
- 开启另一个终端连接到 mysql:
|
|
- 刷新权限并重置密码:
|
|
- 退出 MySQL 命令行:
|
|
- 停止并重新启动 MySQL: 在原始窗口中按 Ctrl+C 停止 MySQL 安全模式,然后启动 MySQL 正常模式:
|
|
接着我们可以开启 mysql 的远程连接。打开 mysql 的配置文件:
|
|
找到其中 [mysqld]
下的 bind-adrress = 127.0.0.1
,将其改为 ``bind-adrress = 0.0.0.0`。
初始化 Redis
执行下列命令:
|
|
然后同样打开其配置文件开启远程访问。sudo vim /etc/redis/redis.conf
打开配置文件,在其中找到并打开 bind
变量,将其值从 127.0.0.1 ::1
修改为 0.0.0.0
|
|
由于 redis 不修改密码也没有出现什么问题,这里我就不修改了,有需要的小伙伴可以自行上网查阅。
修改 SpringBoot 的配置文件
做完上面的步骤,接下来我们就可以修改 ruoyi-vue-pro 的配置文件了。
打开 ~/ruoyi-vue-pro/yudao-server/src/main/resources/application-local.yaml
文件,找到 datasource 属性,修改 mysql 的相关参数:
下方的 redis 没什么改动就不用改了。
打开防火墙
接着我们需要在 wsl 中打开需要的防火墙。这一步非常坑,虽然简单,但我在这里卡了很久。
|
|
启动项目
所有东西都配置完成之后,我们就可以启动项目了。
首先切换到启动类所在的目录,即 yudao-server 目录。注意要在 yudao-server 目录下执行而不是在项目的根目录下执行。
|
|
然后执行 mvn:spring-boot:run
命令,不出意外的话,应该可以正常启动。
接着我们使用 curl localhost:48080
命令,如果看到下面的内容,就说明项目启动成功。
|
|
如果 windows 防火墙没有拦截 wsl 的网络请求,在 windows 中的浏览器中访问 localhost:48080
也能看到同样的内容。
至此,整个项目的启动就到此结束。
注意事项
开启局域网访问
以上操作完成之后,可以在 wsl 和 windows 中使用 localhost:端口
访问本地的项目。但如果在 windows 或者其它局域网的设备中使用 ip地址:端口
的形式则不行。
要想开启 wsl 的局域网访问,新版的 wsl 中可以通过 wsl 的配置文件直接开启。其位置在 %USERPROFILE%/.wslconfig
。
首先先贴上我的配置文件以供参考。
|
|
注意到 [experimental]
标签下有一个 hostAddressLoopback
标签,将其设置为 true
就可以使用 wsl 的局域网地址进行访问。
wsl 的局域网地址可以在 wsl 中通过命令 ip addr
进行查看。
像 eth0
,eth3
这种以太网接口中的 inet
后面的就是这个接口的 ip 地址。
以下命令可以直接获取 eth0
接口的 IP 地址:
|
|
这里需要注意的是,网上的很多教程都说使用 eth0
接口的 ip 地址,但不知是不是我开了代理的缘故,使用 eth0
始终无法访问 wsl 中的服务,即便我放开了放火墙之类的也不行。还是偶然更换为另一个有 ip 地址的 eth3
才发现可以正常访问。
(注意)另外我也尝试了一下一些帖子中说的开启 windows 的端口代理,对我来说好像没啥作用,但这里也给出相关的代码万一有人需要。开启 windows 端口代理相关的代码如下所示:
首先以管理员方式打开 powershell,然后在其中执行如下命令用于设置端口代理:
|
|
还有一点,如果 .wslconfig
文件中设置的是 networkingMode=mirrored
模式,则你不会在 windows 的网络接口查询中看到 vEthernet (WSL)
接口,因为这是一个虚拟网卡,使用镜像就不需要使用虚拟网卡了。因此类似于 New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
之类的命令也会错误。
Windows 添加防火墙的方法
有两种方法可以为 windows 添加(端口)防火墙:
- 命令行添加防火墙。以下命令增加一个 8080 端口的出站(out)规则:
|
|
- windows 搜索防火墙,新建入站、出站规则,指定端口即可,其它都无需更改。
其它
新 wsl 可能没有 ifconfig
或者 ip
工具,需要手动下载:
|
|
参考链接
juejin.cn/post/7037893084998270990 Accessing network applications with WSL | Microsoft Learn