Laravel Homestead:开启 NFS 解决站点响应缓慢 0 个改进

问题描述

使用 Homestead 在开发 Laravel 应用程序,经常会遇到网页响应速度缓慢,有时甚至十几秒甚至几十秒才返回响应,极大影响了开发体验:

造成此问题的原因,是虚拟机共享文件系统 IO 速度慢所导致的。而一个全新安装的 Laravel 应用响应一个请求时,需要读取 600+ 的文件,瓶颈尤为明显。

解决问题

解决方案是让虚拟机使用 IO 效率更高的 NFS 挂载方式。

第一步、安装 NFS 服务

我们需要在主机的系统里安装 NFS 服务供虚拟机使用。

Mac 用户默认支持 NFS 挂载。

Windows 用户 需要安装 Vagrant WinNFSd ,在你的 Git Shell (或者其他 Windows Shell)里运行以下命令进行安装:

$ vagrant plugin install vagrant-winnfsd

Ubuntu 用户 可以使用以下命令安装 NFS 服务:

$ apt-get install nfs-kernel-server

第二步、修改配置

接下来修改 Homestead.yaml 文件里的 folders 文件挂载信息,指定挂载的 type 为 NFS:

.
.
.
folders:
    - map: ~/code
      to: /home/vagrant/code
      type: "nfs"
.
.
.

第三步、重启并应用虚拟机

因为我们修改了 Homestead.yaml ,需要 --provision 参数来应用虚拟机修改,并使用 reload 来重启虚拟机:

$ vagrant reload --provision

结语

以上配置成功后,一般情况下,你应该可以得到 1s 内的响应速度。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 29

$ vagrant up --provision
C:/Program Files/HashiCorp/Vagrant/embedded/mingw64/lib/ruby/2.3.0/psych.rb:379:
in `parse': (): could not find expected ':' while scanning a simple key
出现这个错误,后来发现是编辑Homestead.yaml文件type那句时,用了tab键,而且type冒号后要空一格

4年前 评论

最后得到 mount.nfs: Connection timed out file 我网上没有搜索到解决方案 ,有知道的麻烦告知一下 ,谢谢

4年前 评论
xiaopi 3年前
zengsipei (作者) 3年前
xiaopi 3年前

file

file

file

file
无法克隆项目,切换到 root 用户即可

4年前 评论

file 这个NFS貌似挂载错了

1年前 评论

开启nfs挂载之后还是很慢,有什么方法能解决么

2年前 评论
user02 1年前

开启nfs 出现权限问题这个怎么解决

file

3年前 评论

新版 vagrant 和 新版的 box 不用开启 NFS 速度也很快, 虚拟机版本是 ubuntu 2004,

开启 NFS 碰到过一次 bug 卡了大半天, 后来关了 NFS 才好.

3年前 评论

file

这个怎么解决

3年前 评论
kakaxi (作者) 3年前

还是很慢呀,平均1~2秒

3年前 评论

教程02做了一半,才开启的nfs就会报错: Target class [App\Http\Middleware\EnsureEmailIsVerified] does not exist. 关闭后又不会有这个报错了.中间件里面是已经存在这个文件的,并且已经实现邮件验证.

3年前 评论

我使用了nfs,依然很慢,甚至更慢,我和同事都是同一个box文件,不知道什么情况

3年前 评论
xugege

使用nfs挂载模式,虚拟机的文件都变为501:dialout 用户和用户组权限的文件了,而且用sudo更改用户权限也不好使,导致laravel没有创建目录的权限,最后不得不去掉nfs,虚拟机用户都变为vagrant了才好使的

4年前 评论

file

file

第一张图是跑在 homestead (win10 装的有固态,已经开启了 nfs )中,第二张是跑在 普通的服务器里。感觉差距很大呀。首页就加载就快 2s 了,更别提其他的页面了。这个能优化么。

4年前 评论

conflicting dependencies rdoc (= 5.0.0) and rdoc (= 5.0.1)
Activated rdoc-5.0.1
which does not match conflicting dependency (= 5.0.0)

Conflicting dependency chains:
rdoc (= 5.0.1), 5.0.1 activated

versus:
rdoc (= 5.0.0)

Gems matching rdoc (= 5.0.0):
rdoc-5.0.0

报这个错误 , 总说依赖包冲突。

4年前 评论
xujun0429 3年前

我的还是很慢, 想问下是不是因为机械硬盘的缘故? 其他电脑用固态硬盘确实有提升.

4年前 评论
miaotiao 4年前

开了nfs后目录所有者变root了.composer 和npm run watch-poll 会报io错误.你们有这情况吗?

4年前 评论
themeth 4年前

的确,使用nfs模式,主机里面的目录根本不会拷贝到虚拟机里。@xugege

4年前 评论
xugege

更改不是共享目录中的文件可以修改文件权限是没问题的,共享的目录修改不报错,但是不生效

4年前 评论
xugege

切到root用权限下,依然不好使,麻烦小伙伴看到的话给解决一下

4年前 评论
xugege

不用挂载的方式,通过chmod -R 777 修改不了文件的权限,我开始怀疑这个最新的homestead包是不是有问题啊,郁闷死了

4年前 评论

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