Laravel Homestead 8.x ——1安装
该文章基于 Homestead |《Laravel 6 中文文档 6.x》| Laravel China 社区
由于该文档好多内容对于新手来说很难消化,比如我这个新人,为了让自己以后重装的时候不会再踩到这么多坑,因此我准备写几篇《踩坑记》。这篇文章不仅可以防踩坑,更重要的是,也可以当作新手的入门教程,即使很多技术我可能解释的没那么专业或者有错误,但大多数是为了更容易让新手理解其含义,技术方面我也不会挖的太深入,以防误人子弟。
使用的 windows 系统,mac 的绕道~
该文章使用 laravel 8.x , 学习时不使用稳定版可以积累特殊的经验。
该文章针对的是前后端分离的后端开发,因此前端使用的并不是 laravel, 但文章不会涉及到前端脚本。这也与 Summer 出版的教程书不冲突。
-用 php 做后端
PHP 后端集成有很多方法,比如采用 wampserver、xampp 等工具傻瓜式集成,但这些工具只是集成了 php + web 服务器+数据库,代码方面还得自己手动写个框架(比如 MVC 模式)来接收响应请求。但手动肯定有很多事情要做,还可能因自身技术不大行,很难去更严谨、更有保证的去实现自己需要的功能。
因此可以使用别人已经写好的 laravel 、 thinkphp 等后端框架进行开发。但是这些框架并非像前面的集成工具那样集成那么多必要工具,框架中并不包含 php、web 服务器等,也就是直接使用 laravel 框架需要一些条件,条件就是需要手动集成许多依赖工具,还要手动进行大量的配置,这样的话部署环境就变得格外的繁琐了。所以我们就直接使用官方预封装的 Homestead (Laravel Homestead)来更简单的部署环境。
但发现 Homestead 坑太多了。。。
-什么是虚拟机?
常见的电脑系统有 windows、Linux 等系统。通常在 windows 上装完 linux 后,两个系统在一台电脑上一次只能启动一个系统:启动 windows 就要把 linux 关闭,启动 linux 就要把 windows 关闭。在 windows 中下载一个虚拟机,把 linux 安装到虚拟机中,便可以实现在启动 windows 时,同时启动 linux,这样就实现了在 windows 系统中操作虚拟机中的 linux 系统,而且还可以使两套系统完全分离,谁也不会主动影响谁。
-Homestead 预封装了一个虚拟机——Homestead Vagrant Box(HVB)
你在网上看到的各种名称,比如 Homestead 虚拟机、Homestead Vagrant Box、HVB(我自起的简写)、Vagrant Box、virtualbox.box(和 virtualbox 不是一个东西,下面解释)、homestead.box 等这些名称的含义都相同,不要搞混了!官方的说法叫 “ Homestead Vagrant Box ” 。
该虚拟机内置 Ubuntu 操作系统,而该操作系统中内置了 PHP、web 服务器、mysql 和其他工具软件。这意味着我们无需在当前使用的 windows 系统下安装这些软件,整个开发环境全在 Homestead 虚拟机(Homestead Vagrant Box)当中!没错,你手中的 mysql、php 意义上完全可以卸载,为什么呢?因为在 windows 中写 php 代码,在 Ubuntu 系统中运行!环境全在 Ubuntu 系统中,windows 中直接写文本都行。
-虚拟机 与 Vagrant 虚拟机管理工具
virtualbox 是一个虚拟机软件(其他的虚拟机软件还有 hyperv 等),注意它是软件,不是虚拟机!它可以用来创建多个虚拟机,当然也可以用来——管理它创建的虚拟机。
下面的内容讲的都是 Homestead Vagrant Box
虚拟机注入到 virtualbox
虚拟机软件中的故事。
Vagrant 是一个虚拟机管理工具。通俗来讲的话,和 virtualbox、hyperv 等虚拟机软件的区别在于,Vagrant 在虚拟机软件的管理上套了一层管理,它可以同时对 virtualbox 、hyperv 等多个虚拟机软件创建的多个虚拟机进行管理,可以更灵活的管理多个虚拟机软件创建的多个虚拟机。
Vagrant 可以同时对 hyperv、 parallels、virtualbox、vmware_desktop 虚拟机软件进行管理。
-安装 Homestead Vagrant Box 虚拟机(HVB)
正向理解:在 VirtualBox 虚拟机软件 中添加 HVB 虚拟机 ,利用 Vagrant 工具进行管理。
实际操作:利用 Vagrant 管理工具,将 HVB 虚拟机 注入到 VirtualBox 虚拟机软件中。
由上可知,我们需要安装的东西有:
VirtualBox,VMWare,Parallels , Hyper-V 选择一个。这里选择 VirtualBox。
Vagrant 虚拟机管理软件。
Homestead Vagrant Box 虚拟机。
homestead 配置代码。
最好在某个盘下新建个名为 homestead 的文件夹集中存放,以下面目录为例:
- D:\homestead |— virtualbox |— vagrant |— homestead_vagrant_box |— homestead (配置代码文件夹)
我们按照【实际操作】顺序来进行安装:
VirtualBox 和 Vagrant 内存小,直接在官网上下,大多数不会出现网络问题。
注入 HVB 虚拟机 (近 2G 大小)就比较麻烦了,待下面继续说明。
小窍门:在某个目录下的地址栏输入 cmd 再按回车键,cmd 会直接进入该目录,省去了手打的烦恼~
-安装 Homestead Vagrant Box 虚拟机
方法一:
官方使用的方法。
该方法可以直接将 Homestead Vagrant Box 虚拟机 下载并注入到 Vagrant 中,注入过程会自动进行相关配置。但会发现下载速度特别慢!而且文件大小有近 2 个 G,所以该方法不可行。若可以下载成功,恭喜你避过这个坑,直接看官方教程去了。当然也可以继续往下看。
// D:\homestead\homestead_vagrant_box 目录下
$ vagrant box add laravel/homestead
方法二:
该方法需要手动做一些配置。
这里是和容易出问题的地方,很多人就是因这个坑而放弃使用 Homestead ,选择了使用 集成工具 (如 wampserver) + laravel 进行手动配置。但毕竟官方说:强烈推荐你使用 Homestead 做为你的开发环境。
命令行输入【方法一】的命令,会发现一个 URL 链接,该 URL 即 Homestead Vagrant Box 虚拟机 版本的网站,但进入该网站发现无论点什么都没法下载 近 2G 的 Homestead Vagrant Box 虚拟机。
- 该网站显示 virtualbox 大小 1.66G,这并不是 virtualbox 的大小,而是 Homestead Vagrant Box 虚拟机的大小,virtualbox 我们在前面已经下载了。
- virtualbox 是一个虚拟机软件,HVB 虚拟机要注入到 virtualbox 虚拟机软件中,HVB 只是 virtualbox 中的一个“box”。
我们再输入 3 后(输入 3 后按回车键立即 ctrl+c 结束,不然它会自动下载),会发现这个网址:vagrantcloud.com/laravel/boxes/hom...
没错,这个网址就是正在下载的链接,我们可以把该网址的版本 10.1.1 改成 Homestead Vagrant Box 虚拟机 版本的网站 里的最新版本,将该链接复制给迅雷或其他下载软件下载。
注意:这里只是下载了 HVB 虚拟机,并未将其注入到 virtualbox 虚拟机软件中。
- 下载到该目录下:D:\homestead\homestead_vagrant_box
- 若该版本用迅雷啥的下载的也非常慢,甚至下载速度 0m/s 的话,就先换个版本比较接近的版本下载,并切记往下继续阅读!版本方面也是有要求的!
-克隆 Homestead 环境所需要的配置代码
// 在 D:/homestead/homestead 目录中
$ git clone https://github.com/laravel/homestead.git
额…发现 homestead 整体目录结构是这样的,多了一层 homestead:
— D:\homestead |—virtualbox |—vagrant |—homestead_vagrant_box |—homestead |—homestead |—bin
可以将 D:\homestead\homestead
文件夹 及其刚 clone 的删除掉,再重新:
在 D:/homestead 目录中
$ git clone https://github.com/laravel/homestead.git
这么多余的一步是为了什么?虽然有教程引导你,但是踩的坑越多,经验积累的就越多,有些坑在含糊不定的时候,就是需要这么大胆的踩!
以上所有初步需要的,都已经下载完成了。
-启动 Vagrant
在这之前必然是需要某些配置,若不配置,必然会出现很多问题,以上内容显然没有进行任何配置,但这并无碍。 我们现在就直接启动,慢慢一步步的排查问题!
启动:
// 在 D:\homestead\homestead 目录中 $ vagrant up Homestead settings file not found in D:/homestead/homestead
提示
not found
,这是因为我们还未对homestead
环境进行初始化。init:
// 在 D:\homestead\homestead 目录中 $ init.bat Homestead initialized!
重新启动 Vagrant 后:
// 在 D:\homestead\homestead 目录中 $ vagrant up Bringing machine 'homestead' up with 'virtualbox' provider... ==> homestead: Box 'laravel/homestead' could not be found. Attempting to find and install... homestead: Box Provider: virtualbox homestead: Box Version: ~> 9 ==> homestead: Loading metadata for box 'laravel/homestead' homestead: URL: https://vagrantcloud.com/laravel/homestead ==> homestead: Adding box 'laravel/homestead' (v9.7.2) for provider: virtualbox homestead: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/9.7.2/providers/virtualbox.box ==> homestead: Box download is resuming from prior download progress Progress: 0% (Rate: 0\*/s, Estimated time remaining: --:--:--)
提示
Box 'laravel/homestead' could not be found
后,自动在下载某个东西。
意思是要求的 Homestead Vagrant Box
虚拟机 版本必须>9
,因为未找到(not be found
)对应版本的虚拟机,所以自动给你下载对应版本的虚拟机。咦,我在前面下载的虚拟机明明是 10.1.1
版本的呀!
命令行输入 vagrant box list
,可以查看 vagrant 注入了哪些虚拟机:
// 在 D:\homestead\homestead 目录中
$ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.
我们只是下载了 Homestead Vagrant Box
虚拟机,并没有让它注入到 vagrant
中!
-将 Homestead Vagrant Box
虚拟机 注入 Vagrant
中
很多人采用网上的办法,比如直接注入(该方法不推荐):
$ vagrant box add laravel/homestead D:\homestead\homestead_vagrant_box\virtualbox.box
这样的虽然注入成功,但是还是无法启动 Vagrant ,还是显示上面的相同结果(not be found.),并且我们发现注入的 Homestead Vagrant Box 虚拟机 版本是 0
,显然不满足版本必须>9
:
$ vagrant box list
laravel/homestead (virtualbox, 0)
如果你操作了这一步,可以输入下面命令将该注入进行删除:
// 在 D:\homestead\homestead 目录中
$ vagrant box remove laravel/homestead --box-version 0
// 删除成功。
//若版本不是 0,而是 5.1.1 这样的,那么把 0 改成对应的版本即可删除,比如:
$ vagrant box list
laravel/homestead (virtualbox, 5.1.1)
$ vagrant box remove laravel/homestead --box-version 5.1.1
// 删除成功。
$ vagrant box list
There are no installed boxes! Use `vagrant box add` to add some.
那么问题来了,下载的虚拟机明明是 10.1.1
版本,为什么是 0
?
这是因为该虚拟机是手动注入的(上面的【方法一】是自动注入、自动配置的),手动注入的虚拟机并不会自动配置元数据(里面包含版本信息),在默认情况下会识别版本为 0
。
推荐采用下面的方法:
我们需要在
D:\homestead\homestead_vagrant_box
目录下新建一个名为metadata.json
的文件进行元数据配置,内容如下:{ "name": "laravel/homestead", "versions": [ { "version": "10.1.1", "providers": [ { "name": "virtualbox", "url": "D:/homestead/homestead_vagrant_box/virtualbox.box" } ] } ] }
字段说明:
“version”:你所使用的 Homestead Vagrant Box 虚拟机 的版本。
“url”:你所使用的 Homestead Vagrant Box 虚拟机 的路径(绝对相对都可)。将元数据注入到 Vagrant 中
// 在 D:\homestead\homestead_vagrant_box 目录下 $ vagrant box add metadata.json . . . ==> box: Successfully added box 'laravel/homestead' (v10.1.1) for 'virtualbox'!
$ vagrant box list laravel/homestead (virtualbox, 10.1.1)
注入元数据时,会同时注入元数据所配置的对应 HVB(virtualbox.box)。
再次启动 Vagrant,发现还是这个问题
could not be found
:// 在 D:\homestead\homestead 目录下 $ vagrant up Bringing machine 'homestead' up with 'virtualbox' provider... ==> homestead: Box 'laravel/homestead' could not be found. Attempting to find and install... homestead: Box Provider: virtualbox homestead: Box Version: ~> 9 ==> homestead: Loading metadata for box 'laravel/homestead' homestead: URL: https://vagrantcloud.com/laravel/homestead ==> homestead: Adding box 'laravel/homestead' (v9.7.2) for provider: virtualbox
这是因为需要版本对应!详细的可以查看这篇文章 解决 Homestead 版本与 homestead.box 不对应造成的冲突 。
文章里的里 homestead.box 即 Homestead Vagrant Box 虚拟机。
简而言之就是,当前 homestead 环境版本(clone 过来的配置代码版本)必须使用指定版本的 Homestead Vagrant Box 虚拟机!而我当前使用的 homestead 环境版本 是
10.17.0
,看 github 上的文档说明需要使用的是Homestead Vagrant Box v9.7.2
,而这里使用的是Homestead Vagrant Box v10.1.1
。同样在上面的命令行当中能看到如果”
not be found
“的话,会继续自动下载指定的v9.7.2
版本(下载的非常慢):==> homestead: Adding box 'laravel/homestead' (v9.7.2) for provider: virtualbox
下载对应适配的版本(我这里是
9.7.2
):把这个网址版本数字改成指定版本,复制给迅雷下载: vagrantcloud.com/laravel/boxes/hom...
由于一些版本哪怕用迅雷下载,下载速度也是极慢,我们可能无法将要求的指定版本的 HVB 下载成功,因此并不一定非得要下载指定版本。
如果指定版本无法下载,经过我的测试,根据下面情况进行版本的选择,暂时并没有出现过什么问题:
下载的 HVB 版本,必须大于 Homestead 版本 所指定的版本(要求是
9.7.2
),下载10.X.X
版本的 HVB 也可以;元数据所配置的版本“version”,首先必须大于 Homestead 版本 所指定的版本(要求是 9.7.2),其次必须限制在 9.X.X 版本上,不能越界为 10.X.X!
删除
10.1.1
版本的虚拟机:// 在 D:\homestead\homestead 目录下 $ vagrant box list laravel/homestead (virtualbox, 10.1.1) $ vagrant box remove laravel/homestead --box-version 10.0.1
把元数据中的 “version” 改成
9.7.2
,”url”改成新下载的 HVB 路径,并重复上面步骤:// 在 D:\homestead\homestead_vagrant_box 目录中 $ vagrant box add metadata.json ==> box: Loading metadata for box 'metadata.json' box: URL: file://D:/homestead/homestead_vagrant_box/metadata.json ==> box: Adding box 'laravel/homestead' (v9.7.2) for provider: virtualbox box: Downloading: D:/homestead/homestead_vagrant_box/virtualbox.box box: ==> box: Successfully added box 'laravel/homestead' (v9.7.2) for 'virtualbox'!
启动 Vagrant 时,若显示以下信息,有多个方法解决:
// 在 D:\homestead\homestead 目录中 $ Vagrant up Bringing machine 'homestead' up with 'virtualbox' provider... ==> homestead: Importing base box 'laravel/homestead'... ==> homestead: Matching MAC address for NAT networking... ==> homestead: Checking if box 'laravel/homestead' version '9.7.2' is up to date... A VirtualBox machine with the name 'homestead' already exists. Please use another name or delete the machine with the existing name, and try again.
这是因为名叫
homestead
的虚拟机已经被启动,即使已经被remove
,
我们可以打开虚拟机软件删除它,删除前先退出-关闭电源:
在重新启动 Vagrant ,显示更长一段内容,没有显示错误,直到执行结束,则代表成功:// 在 D:\homestead\homestead 目录中 $ Vagrant up Bringing machine 'homestead' up with 'virtualbox' provider... ==> homestead: Checking if box 'laravel/homestead' version '9.7.2' is up to date... ==> homestead: Setting the name of the VM: homestead ==> homestead: Clearing any previously set network interfaces... ==> homestead: Preparing network interfaces based on configuration... homestead: Adapter 1: nat homestead: Adapter 2: hostonly ==> homestead: Forwarding ports...
打开 虚拟机软件 ,可以看到虚拟机正在运行,我们便可以开始创建项目了:
-vagrant 命令
vargrant up
:启动 HVB,若未安装 HVB ,则会自动下载并安装。vargrant destroy
:销毁 HVB,并销毁 HVB 中的一切,比如 composer 安装包、mysql软件及 mysql 全部数据(当然可以备份) 等。但是你创建的项目仍保留着。vagrant reload
:重启虚拟机。vagrant provision
:重新加载 Homestead 配置。vagrant reload -provision
:重启虚拟机,并重新加载 Homestead 配置。
-修改 HVB 虚拟机安装位置:
在【全局设定】中可以把 HVB 安装的位置修改了,默认在C盘,这肯定是不好的,一个虚拟机初始化安装就能达 6G 存储大小,这C盘可消耗不来。
另外,若想迁移当前已创建的 HVB ,就得需要配置很多杂碎的东西,似乎挺麻烦的,所以还是建议 vagrant destroy 后再 vagrant up ,重建一个 HVB,不过
再次提醒一下,这里的 HVB 只是 VirtualBox 的一个 box 而已。
本篇结束,谢谢阅读。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: