关于使用WSL2作为开发环境的测试及感受


前言

我是做PHP开发的, 一直以来使用的都是wamp这种环境来做开发, 后来一些经手的项目, 有些使用swoole的 , 不用linux真的是不行, 最初是直接在测试服务器上在线编辑调试, 但是这有多痛苦只有在线编辑过的人才能深有体会.

后来, 为了线下开发调试, 我使用了WSL, 安装使用都是很OK的, 既然linux有了, 那上个宝塔岂不是更方便? 所以我也直接把宝塔装在了wsl上, 一切都没有什么异常, 而且可以直接选择win盘里的文件夹作为项目根目录,这些都正常, 但当我搭建完, 要开始访问的时候, 突然发现, 卡, 巨卡, 十分卡!
这时候才了解到, wsl的IO是有问题的. 在其内部可能感受不到, 但在两系统 交互时, 非常的卡, 基本处于残废的状态 , 想作为开发环境日常使用根本不可能!

再之后, 我学习了docker, 安装上docker之后, 除了比较吃内存, 其实都挺好, 本身docker里也有开发者提供了打包好的baota镜像, 真的是开箱即用, 但是关于docker的一些基础命令和操作还是有必要学习一下的, 不然初上手大概率也会跟我一样,一脸懵

直到有一天 , 我发现我硬盘不是很充足了, 想到docker绑定的数据券, 之前在家里电脑上试过, 没启动一个容器, 都会新生成一个数据卷, 这个数据卷, 很大, 几个G, 刚开始配置的时候老是失败, 所以来来回回多了好多无用的数据卷, 占用了极大空间, 当时就百度到如何删除这些无用卷, 也尝试了, 成功了.

然后, 我直接就在工作设备上执行了此操作, 悲剧 也在这一刻定格! . 我本地十几个项目.瞬间崩溃! ! ! , 赶紧一查询, 竟然删了我两个卷, 也就是说, 一个正在正常使用的卷也被删掉了!!! 庆幸的是, 代码是在win本地的磁盘中, 丢的是数据库, 大部分还有些早期的数据库脚本备份, 但是这也足以耽误我一到两天的功夫了, 在此告知各位, 删数据卷之前多考虑, 多查证, 最后查清楚在用的卷是哪个, 然后再手动去删除

其实说了这么多, docker使用是方便, 但是不知道是不是在win下的原因, 经常会出现不能启动的问题, 这些问题也很难解决, 通常我只能重启电脑 , 最让人郁闷的就是, 重启它还就真的恢复正常了! 也不是不能用, 就是这种自己无法掌控的东西, 总给我一种不靠谱的感觉

正文

所以, win下的docker , 我大概率是要开始放弃了, 我开始寻求其它方式 , 这时候就发现了WSL2 , 没错, 现在加入win10预览通道, 升级完之后就可以安装WSL2了, 相比一代, 极大的提升了过去糟糕的IO性能, 亲自试了一下, 感知很明显, 就这样我激动的难以言表, 开发者的福音就要到了吗?

安装Ubuntu

安装这块没什么好说的, win10 商店可直接下载, 大家应该用的都是ubuntu1804 , 只不过装完之后启动默认还是wsl1 , wsl2的启动要求, 需要开启hyper-v, 另外, 还需要敲些命令, 指定这个ubuntu以2的方式启动

安装BT

一样, 在官方找到Ubuntu的安装命令, 一键安装
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
不知道是不是幻觉, 在执行宝塔安装的时候我竟然都已经明显感觉的速度已经很快了, wsl1的时候我记得安装了有快十分钟了.
安装完之后, 把登录信息复制出来, 那个IP自然是不用看的, 换成wsl2的IP
IP查看: ifconfig

漫漫填坑路
  1. WSL2 的IP 是动态分配的, 或者说, 每次启动,都会虚拟出一块儿网卡, 所以, 想要固定IP ,难
  2. 如上
  3. 如上

总体来说优点是大于缺点的, 比如更高的IO性能, 另外有一点要说的是, 这次的WSL是类似于虚拟机一样的东西, 你可以理解为, 它的开启就是内网中多了一个你可以访问的linux服务器!
这个方式网上的评价褒贬不一, 但是我个人觉得是很好的 , 因为测试中发现, 端口是不会和你本机冲突的, 这样的好处自然就是可以把的win系统很好的隔绝开来, 一台机子当两台用, 如果, 如果微软把ip的问题解决了. 那我敢断言, 它wsl2 真的就是最好的Linux发行版 ,没有之一.

好了, 入正题, 别的毛病没有, 就是IP这个怎么解决?
我win上的hosts文件 , 添加一个虚拟域名, 并指向了该WSL的IP , 但是每次重启后, IP都会变动, 我只能被动的每次开机手动调整为当前的IP , 很烦, 真的很烦,

后来在某篇文章中看到, 利用python脚本来实现自动更新hosts文件, 完全可行啊, 本来计划新建一个文本, 用来存储我的虚拟域名列表,然后py读取这个文本, 再动态写入hosts,但是奈何py没学过, 要改这个对我优点难度…(其实实现了,但不知道为啥, 它不稳定,就是删除之前的数据有时成功,有时失败,最后就会多出来很多之前的数据没有被清理掉)

最后, 还是使用了文章中的做法, 只更新指向WSL的就好了, 例如我这样配置:
172.25.11.11 ubuntu
那其它的虚拟域名直接指向ubuntu就可以:
ubuntu mytest.com
经测试完全可行

其实到这里已经可以使用了, 本地开发调试没问题
但是, 代码呢? 放在windows上再使用linux下的宝塔指向它, 效率很低. 解决办法就是在linux下新建,千古难题又来了, wsl万一崩了, 代码怎么办?
所以后来我想到了samba, 在win上映射linux的wwwroot目录, 实测可行, 访问速度也是可以的, 而且IDE也可以直接打开映射的目录进行编辑 , 本身WSL有一直微软内置的路径别名\\wsl$ 资源管理器中输入就可以直接打开linux的文件夹, 但是在做网络磁盘映射的时候, 试了很多次, 起初以为linux上的samba配置有问题 , 后来发现, 在配置磁盘映射的时候, 不能使用wsl$这个变量, 只能用实际IP , 否则一直连不上的.提示找不到该服务器等等…

当然使用vscode的远程开发应该也是没有问题的. 但是代码放在这个虚拟机中, 总归是心里不安,

最后

还是老实使用wamp开发吧, 如果遇到必须使用linux的项目, 可以临时使用wsl2来解决一时之需, 想要长久使用wsl2作为开发环境, 还是需要等微软尽早解决这个问题了, 当然, 如果您有更好的解决方案, 也请不吝赐教!