Windows环境下,Hyperf启动太慢的解决姿势参考

简述

由于我大多数情况下都是在 windows 机器上利用 docker 进行日常开发, 主要项目均为 hyperf ,由于 hyperf 本身的扫描机制,在代码层级较多、代码文件较多的情况下,启动超过 1 分钟,甚至超过 2 分钟是常态,这相当难以忍受,这个问题在 linux 或 mac 下并不会出现,是由于 windows 下的 Docker Desktop 文件共享机制和功能不是那么完美,而且还有很多奇奇怪怪的问题,比如长时间启动(几小时,比如下班忘了关服务)必然出现断开连接的问题,并且只能通过重启整个docker软件甚至重启电脑来恢复正常,无论用的 wsl1 还是 wsl2 都一样有此问题,在最近不是那么忙的时候,尝试解决此问题,也给各位提供参考。

前置准备:

  • windows 中应已经安装好了 Docker Desktop 最新版本
  • 知道 linux 基本指令操作
  • 知道 windows 下如何安装 wsl,如何升级 wsl1 到 wsl2

方案讨论

基本思路其实主要是通过 windows 下,启用/安装 wsl 之后,进入市场去搜索 ubuntu 并自行选择一个版本进行安装,我这里习惯18.04,之后的操作,有如下可以选择:

  • ubuntu 中自行通过 apt install xxxx ,自行安装或编译你需要的环境
  • 通过 Docker Desktop 最新版的功能,同步已经安装好的镜像至 ubt 内部,直接可以通过Docker Desktop 工具在 windows 下进行同步的管理

这里我选择的是第二种,因为我跑着 easyswoole 和 hyperf, 他们跑在不同版本的swoole上

为了更优雅的在windows下开发,需要做的操作:

  • sourcetree
    • 为了方便 sourcetree 找到子系统中的文件夹,对ubuntu整个文件右键映射网络驱动盘(默认Z盘),方便 sourcetree 进行识别文件
    • 为了避免 sourcetree 因为 git版本>2.34 会报权限方面的错误,因为高版本的 git 会检测是否属于当前用户,一劳永逸的解决办法就是直接降级 git 到 2.34.1 版本:github.com/git-for-windows/git/rel...
      • 当前你也可以跟随提示,设置 git config –global –add safe.directory Z:\nbo-project\api,但我觉得没必要了,直接降级一劳永逸,更何况2.34并不老,21年发版的
  • ubuntu的文件换行符与windows下不匹配,CRLF与LF
    • 设置项目级别的 git 参数:
      • 在初次clone项目在ubt之后,打开项目本身的.git 文件,设置 core.safecrlf = true,core.autocrlf = input,参数具体意义下面详细解释,这里单说目的,是为了在windows的phpstorm中打开项目不因为换行符而git提示文件修改,并且完美和使用mac电脑的同事适配
    • 当然你也可以直接设置全局 git config –global core.autocrlf input,但我不建议这样,可能影响别的项目

实操

wsl和ubuntu

参考:learn.microsoft.com/zh-cn/windows/...

  • 进入 windows 市场,
    • 搜索 ubuntu,我这里习惯了 18.04 版本的 ubuntu
    • 安装

image.png

image.png

image.png

  • 安装好了以后,点击
    image.png

  • 第一次点击启动之后,会让你输入用户名和密码,自行输入并成功启动即可

    • 这里的账号密码记住即可,后面基本不用,因为一般设置默认 root 启动
  • 成功安装之后,设置默认 root 启动

    • ubuntu1804.exe config –default-user root

image.png

  • 设置完成点开,可以看到启动时已是 root 用户

image.png

  • ubt 文件在此处,代码编辑器中也可以识别

image.png

  • 你随便新开一个文件夹去放你想放的项目文件
    • 这里你可以选择为你的子系统生成 ssh
    • 但我就偷懒懒得弄了,直接从我的电脑进去ubuntu的文件 右键换出 git bash 即可

docker 设置 wsl2 模式

在安装或升级好 wsl2 以后才可以配置

image.png

  • 升级好了以后,会出现此按钮,点击即可同步原先镜像至ubt中

image.png

日常写代码姿势

在进行上述操作后,我们得到了一个 ubuntu 子系统,并且子系统中的docker与外层windows中的docker其实是共用的东西,无非就是文件地址不一样而已,这给我们开发带来了很多的便利,而不是像以前那样去套娃,wsl中再次安装docker。

但其中一个需要处理的git,因为git的sshkey其实是在windows下的,日常代码git操作,其实可以直接这样,而不必在ubuntu里再次生成git秘钥公钥,再上传至代码云端管理工具处。

你需要在 linux 也就是你的子系统 ubuntu 中启动你的docker,我一般是在子系统直接 docker-compose up -d,然后日常基本上都在windows的docker桌面应用中进行点击操作,进入容器启动项目

image.png

即如图所示,git代码管理可以在windows上直接从我的电脑处进入至ubuntu的文件系统中进行操作,sourcetree phpstorm也可以直接识别这个目录

image.png

经过实测,我这边速度从至少1分钟降低到10S以内,偶尔也可以实现秒启动,开发状态下的热更新问题也少了很多,至此,纵享丝滑,再也不用忍受漫长的扫描时间了

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 16

事实上,ubt里的docker和外层的docker其实是一个东西,是共用的

1年前 评论

还是很慢啊

1年前 评论
Polaris2018 (楼主) 1年前
风中的白鸽 (作者) 1年前
Polaris2018 (楼主) 1年前
风中的白鸽 (作者) 1年前
Polaris2018 (楼主) 1年前
Polaris2018 (楼主) 1年前
Polaris2018 (楼主) 1年前

哈?使用wsl了 干嘛还需要docker去启动,建议直接搭建环境 可以参考 https://learnku.com/articles/77653。启动速度直接提升到2秒内

1年前 评论
Polaris2018 (楼主) 1年前
Polaris2018 (楼主) 1年前

我用的phpstorm的远程上传,没进行挂载

1年前 评论
Polaris2018 (楼主) 1年前

Windows 下,volume 忽略 vender 目录,速度能提升不是一点点

1年前 评论
Polaris2018 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!