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 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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