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 虚拟机软件中。

由上可知,我们需要安装的东西有:

  1. VirtualBox,VMWare,Parallels , Hyper-V 选择一个。这里选择 VirtualBox。

  2. Vagrant 虚拟机管理软件。

  3. Homestead Vagrant Box 虚拟机。

  4. homestead 配置代码。

最好在某个盘下新建个名为 homestead 的文件夹集中存放,以下面目录为例:

  • - D:\homestead
            |— virtualbox
            |— vagrant
            |— homestead_vagrant_box
            |homestead   (配置代码文件夹)

我们按照【实际操作】顺序来进行安装:

  1. VirtualBox 和 Vagrant 内存小,直接在官网上下,大多数不会出现网络问题。

  2. 注入 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 做为你的开发环境

  1. 命令行输入【方法一】的命令,会发现一个 URL 链接,该 URL 即 Homestead Vagrant Box 虚拟机 版本的网站,但进入该网站发现无论点什么都没法下载 近 2G 的 Homestead Vagrant Box 虚拟机。

    • 该网站显示 virtualbox 大小 1.66G,这并不是 virtualbox 的大小,而是 Homestead Vagrant Box 虚拟机的大小,virtualbox 我们在前面已经下载了。
    • virtualbox 是一个虚拟机软件,HVB 虚拟机要注入到 virtualbox 虚拟机软件中,HVB 只是 virtualbox 中的一个“box”。
  2. 我们再输入 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

在这之前必然是需要某些配置,若不配置,必然会出现很多问题,以上内容显然没有进行任何配置,但这并无碍。 我们现在就直接启动,慢慢一步步的排查问题!

  1. 启动:

    // 在 D:\homestead\homestead 目录中
    $ vagrant up
    Homestead settings file not found in D:/homestead/homestead

    提示 not found,这是因为我们还未对 homestead 环境进行初始化。

  2. init:

    // 在 D:\homestead\homestead 目录中
    $ init.bat
    Homestead initialized!
  3. 重新启动 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

推荐采用下面的方法:

  1. 我们需要在 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 虚拟机 的路径(绝对相对都可)。

  2. 将元数据注入到 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)。

  3. 再次启动 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
  4. 下载对应适配的版本(我这里是 9.7.2):

    把这个网址版本数字改成指定版本,复制给迅雷下载: vagrantcloud.com/laravel/boxes/hom...

    1. 由于一些版本哪怕用迅雷下载,下载速度也是极慢,我们可能无法将要求的指定版本的 HVB 下载成功,因此并不一定非得要下载指定版本

    2. 如果指定版本无法下载,经过我的测试,根据下面情况进行版本的选择,暂时并没有出现过什么问题:

      • 下载的 HVB 版本,必须大于 Homestead 版本 所指定的版本(要求是 9.7.2),下载 10.X.X 版本的 HVB 也可以;

      • 元数据所配置的版本“version”,首先必须大于 Homestead 版本 所指定的版本(要求是 9.7.2),其次必须限制在 9.X.X 版本上,不能越界为 10.X.X!

  5. 删除 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
  6. 把元数据中的 “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 命令

  1. vargrant up:启动 HVB,若未安装 HVB ,则会自动下载并安装。
  2. vargrant destroy:销毁 HVB,并销毁 HVB 中的一切,比如 composer 安装包、mysql软件及 mysql 全部数据(当然可以备份) 等。但是你创建的项目仍保留着。
  3. vagrant reload:重启虚拟机。
  4. vagrant provision:重新加载 Homestead 配置。
  5. vagrant reload -provision:重启虚拟机,并重新加载 Homestead 配置。

-修改 HVB 虚拟机安装位置:

在【全局设定】中可以把 HVB 安装的位置修改了,默认在C盘,这肯定是不好的,一个虚拟机初始化安装就能达 6G 存储大小,这C盘可消耗不来。

另外,若想迁移当前已创建的 HVB ,就得需要配置很多杂碎的东西,似乎挺麻烦的,所以还是建议 vagrant destroy 后再 vagrant up ,重建一个 HVB,不过

再次提醒一下,这里的 HVB 只是 VirtualBox 的一个 box 而已。

本篇结束,谢谢阅读。

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

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