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,但我不建议这样,可能影响别的项目
- 设置项目级别的 git 参数:
实操
wsl和ubuntu
- 进入 windows 市场,
- 搜索 ubuntu,我这里习惯了 18.04 版本的 ubuntu
- 安装
安装好了以后,点击
第一次点击启动之后,会让你输入用户名和密码,自行输入并成功启动即可
- 这里的账号密码记住即可,后面基本不用,因为一般设置默认 root 启动
成功安装之后,设置默认 root 启动
- ubuntu1804.exe config –default-user root
- 设置完成点开,可以看到启动时已是 root 用户
- ubt 文件在此处,代码编辑器中也可以识别
- 你随便新开一个文件夹去放你想放的项目文件
- 这里你可以选择为你的子系统生成 ssh
- 但我就偷懒懒得弄了,直接从我的电脑进去ubuntu的文件 右键换出 git bash 即可
docker 设置 wsl2 模式
在安装或升级好 wsl2 以后才可以配置
- 升级好了以后,会出现此按钮,点击即可同步原先镜像至ubt中
日常写代码姿势
在进行上述操作后,我们得到了一个 ubuntu 子系统,并且子系统中的docker与外层windows中的docker其实是共用的东西,无非就是文件地址不一样而已,这给我们开发带来了很多的便利,而不是像以前那样去套娃,wsl中再次安装docker。
但其中一个需要处理的git,因为git的sshkey其实是在windows下的,日常代码git操作,其实可以直接这样,而不必在ubuntu里再次生成git秘钥公钥,再上传至代码云端管理工具处。
你需要在 linux 也就是你的子系统 ubuntu 中启动你的docker,我一般是在子系统直接 docker-compose up -d,然后日常基本上都在windows的docker桌面应用中进行点击操作,进入容器启动项目
即如图所示,git代码管理可以在windows上直接从我的电脑处进入至ubuntu的文件系统中进行操作,sourcetree phpstorm也可以直接识别这个目录
经过实测,我这边速度从至少1分钟降低到10S以内,偶尔也可以实现秒启动,开发状态下的热更新问题也少了很多,至此,纵享丝滑,再也不用忍受漫长的扫描时间了
本作品采用《CC 协议》,转载必须注明作者和本文链接
事实上,ubt里的docker和外层的docker其实是一个东西,是共用的
还是很慢啊
哈?使用wsl了 干嘛还需要docker去启动,建议直接搭建环境 可以参考 https://learnku.com/articles/77653。启动速度直接提升到2秒内
我用的phpstorm的远程上传,没进行挂载
Windows 下,volume 忽略 vender 目录,速度能提升不是一点点