开发环境搭建homestead - windows

article/2025/9/15 15:13:00

系统要求

Windows7 及以上。

步骤简略

  1. 安装 VirtualBox
  2. 安装 vagrant
  3. 导入 Homestead Box 虚拟机盒子
  4. 安装 Git
  5. 安装 Homestead 管理脚本
  6. 配置 Homestead.yaml 文件
  7. 启动 Homestead 虚拟机
  8. 开启 NFS 挂载模式

安装 VirtualBox

VirtualBox 是 Oracle 公司的开源虚拟机软件。VirtualBox 号称是最强的免费虚拟机软件,它不仅功能齐全,而且性能也很优异!VirtualBox 支出大部分流行的系统,如:Mac,Windows,Linux 等。
前往下载 VirtualBox 6.1.x
下载完成之后,双击安装包进行安装。

安装 Vagrant

Vagrant 是用来管理虚拟机的工具,支持当前主流的虚拟机如 VirtualBox、VMware、AWS等。Vagrant 的主要作用是提供一个可配置、可移植和复用的软件环境。Vagrant 让你通过编写一个 Vagrantfile 文件来空值虚拟机的启动、虚拟机网络的配置、虚拟机与主机间的文件共享、以及启动后自动执行一些配置脚本,如自动执行一个 Shell Script 来安装一些必备的开发工具,如安装配置 MySQL、PHP,甚至是自动配置 Nginx 站点。这意味着,在一个多人开发的项目中,你只需要同步 Vagrantfile 文件,就可以保证参与项目的每个人个子的机器上拥有一支的开发环境。
前往下载 Vagrant
然后一步一步按照默认安装即可。

Homestead 介绍

HomeStead 利用 Vagrantfile 提供的遍历,定制了一整套的可配置、可移植和复用的 Laravel 开发环境。 HomeStead 虚拟机里面包含了 Nginx Web 服务器。PHP7、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时需要用到的各种软件。
HomeStead 包含了两个东西:

  • HomeStead 管理脚本;
  • HomeStead Box 虚拟机盒子。
    接下来肚子说明下。

1. HomeStead 管理脚本

Homestead 脚本使用 Rudy 和 Shell 脚本编写而成。原理是对Vagrantfile 文件做定制。将从~/HomesteadHomestead.yaml 读取的配置信息,在 provision 时,解析为Vagrant 命令并进行虚拟机的配置。Homestead 脚本的作用在于,提供了极其简单易用的接口,使我们只需要通过傻瓜化配置,即可完成复杂的任务。以下是几个常用的任务:

  • IP配置,端口映射;
  • Nginx Site 创建;
  • 数据库创建;
  • 主机文件夹挂在到虚拟机等任务。
    所有 Homestead 的版本历史在此处可以找到。

2. Homestead Box 虚拟机盒子

homestead.box 虚拟机盒子是提前打包好的Vagrant Box 虚拟机盒子,里面预装了Nginx Web 服务、PHP7、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时所需要用到的各种软件。所有虚拟机盒子版本历史在此。

安装和使用Homestead

接下来,我们会讲解:

  1. 下载和导入 Homestead Box 虚拟机盒子;
  2. 安装 Git,为下载 Homestead 管理脚本做准备;
  3. 使用 Git 下载Homestead 管理脚本;
1. 下载和导入 Homestead Box

由于国内的网络环境原因,我们特意为大家定制了适用于国内的 Homestead 安装包,该安装包提供了一下内容:

  • Comeposer 加速,配置了 Composer 中国全量镜像 支持;
  • 默认集成 Heroku 工具;
  • 默认集成 Yarn,并为 Yarn 加了淘宝镜像的加速;
  • 使用 CNPM 对 NPM 进行加速。
    接下来让我们开始进行 Homestead 的安装,首先我们需要下载 Homestead 虚拟机盒子,建议大家使用迅雷离线下载或者其他离线下载方式下载此盒子。

附:百度盘下载链接: https://pan.baidu.com/s/1LCiwc9ZP9kKdEyMUSabugg 提取码: idk9

下载后的文件为 lc-homestead-12.0.0-20220219.zip ,请对其进行zip解压操作,解压成功后可以看到目录 lc-homestead-12.0.0-20220219 ,此目录下包含两个文件:

  • virtualbox.box (教程定制化过的 Homestead 盒子)
  • metadata.json (盒子的导入配置文件)
    在解压目录中 lc-homestead-12.0.0-20220219 运行以下命令导入Box:
vagrant box add metadata.json

注意:请必须解压到 非中文路径,有同学反馈中文路径会出现不可预知问题。

注:导入成功后,lc-homestead-12.0.0-20220219 文件夹克任意删除。

2. 安装Git

如果你先前已使用过 Git for Windows 来作为你进行 Laravel 项目开发时的默认命令工具,则该工具将会默认为你安装好Git。
使用一下命令来检测是否成功安装:

git --version
git version 2.12.2.windows.2
3. 下载 Homestead 管理脚本

因国内网络限制,为方便下载和后续管理脚本的流畅使用,我们使用定制版本的 Homestead 脚本,定制版有一下优势:

  • 从国内 coding.net 网站下载,下载速度会比 官方更快;
  • 对脚本进行修改,移除了每一次 provisioncomposer self-update 的卡顿。
    接下来,使用 Git 下载定制版的 Homestead:
cd ~
git clone https://gitee.com/summerblue/homestead.git Homestead

Windows下,~ 目录代表着 C:Users\你的用户名 ,而 ~/Homestead 代表着 C:\Users\你的用户名\Homestead 目录。

注:我们把 Homestead 放在 ~/Homestead 路径下,为方便后面的讲解,请保持一致。
下载完成之后我们使用命令行进入 Homestead 目录,再使用 Git 检出我们需要的 Homestead 版本:

cd ~/Homestead
git checkout v13.2.1

注:为了保证后续讲解的流畅性,请注意版本的一致性,这里我们使用 v13.2.1
接下来需要初始化Homestead:

./init.bat

运行以上命令后,会在 ~/Homestead 目录下生成一下三个文件:

  • Homestead.yaml - 主要配置信息文件,可以在此文件中配置 Homestead 的站点和数据库等信息;
  • after.sh - 每一次 Homestead 盒子重置后 (provision)会调用的 shell 脚本文件;
  • aliases - 每一次 Homestead 盒子重置后 (provision),会被替换至虚拟机的 ~/.bash_aliases 文件中, aliases 里可以放一些快捷命令的定义。

接下来对 Homestead.yaml 文件的各项配置信息进行详细讲解。

Homestead.yaml 配置文件

Homestead.yaml 文件在 ~/Homestead 文件夹里,在 Git-Bash 里,可以用一下命令使用文件夹打开当前命令行所在目录:

cd ~/Homestead/
explorer .

可通过运行命令快速打开 Homestead.yaml 文件:

code . ~/Homestead/Homestead.yaml

为了行文方便,后面如果没有提示的话,Homestead.yaml 指的是 ~/Homestead/Homestead.yaml 文件。
Homestead.yaml 里的配置大致可以分为一下几种:

  1. 虚拟机设置;
  2. SSH 秘钥登录配置;
  3. 共享文件夹配置;
  4. 站点配置;
  5. 数据库配置;
  6. 自定义变量;
1. 虚拟机设置

Homestead 支持我们对虚拟机的 IP,内存,CPU ,虚拟机默认提供者进行配置,这里我们基本不需要任何配置,因此跳过即可。

 ip: "192.168.10.10"memory: 2048cpus: 1provider: virtualbox
2. SSH 秘钥登录配置

authorize 选项是指派登录虚拟机授权链接的公钥文件,此文件填写的是主机上的公钥文件地址,虚拟机初始化时,此文件里的内容会被复制存储到虚拟机的 /home/vagrant/.ssh/authorized_keys 文件中,从而实现 SSH 免密码登录。在这里默认填写即可。

authorize: ~/.ssh/id_rsa.pub

keys 是数组选项,填写的是本机的 SSH 秘钥文件地址。虚拟机初始化时,会将此处填写的所有 SSH 秘钥文件复制到虚拟机的 /home/vagrant/.ssh/ 文件夹中,从而使虚拟机能共享主机上的 SSH 私钥文件,使虚拟机具备等同于主机的身份认证。此功能为 SSH 授权提供了便利,例如在后面章节中,我们只需要在 GitHub 上配置一个 SSH 公钥,即可实现 GitHub 对虚拟机和主机共同认证。
此处我们将公钥和秘钥一起同步到虚拟机中:

keys:- ~/.ssh/id_rsa- ~/.ssh/id_rsa.pub

接下来我们来生成 SSH Key,开始之前,我们先使用一下命令来检查主机上是否已经生成过 SSH Key:

ls -al ~/.ssh

如果存在 id_rsaid_rsa.pub 的话,请跳过一下生成 SSH 的步骤继续阅读剩下内容。
否则使用一下方法来生成 SSH Key,请将 your_emal@example.com 替换为你的邮箱:

ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.

命令行会提示让你制定秘钥的名称,按回车键将 SSH Key 保存到默认文件名即可:

Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]

接下来会询问你为 SSH Key 设置密码,按回车键即可,默认为空密码:

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

可以都选择默认,一路 Enter 键即可, 大致如下:
在这里插入图片描述
这个时候如果我们再使用:

ls -al ~/.ssh

查看的话,会出现:
在这里插入图片描述
SSH 秘钥的两个文件:

  • id_rsa —— SSH 秘钥的 秘钥 (Private Key)
  • id_rsa.pub —— SSH 秘钥的 公钥 (Public Key)
3. 共享文件夹配置

我们可以通过 folders 来指明本机要映射到 Homestead 虚拟机上的文件夹。

  • map 对应的是我们本机的文件夹,格式例如:E:/Homestead/Code,以开发者实际项目目录为准。
  • to 对应的是 Homestead 上的文件夹。

为了后续课程讲解,请同意配置如下:

folders:- map: ~/Codeto: /home/vagrant/Code

默认 Homestead 会将我们本机的 ~/Code 文件夹映射到 /home/vagrant/Code 文件夹上。现在我们本机还没有 ~/Code 文件夹,让我们来创建一个:

cd ~
mkdir Code

执行成功后,同样的,我们可以通过 explorer . 命令在文件夹中打开此目录:
在这里插入图片描述
在后面的章节中,我们将会在该文件夹下放置我们所有的 Laravel 项目,Homestead 会把该文件夹下的项目自动映射到虚拟机的 /home/vagrant/Code 文件夹上。

4. 站点配置

站点配置允许你在主机里,通过域名来访问虚拟机里的 Laravel 应用。如下面 sites 配置所示,将 homestead.test 映射到一个 Laravel 项目的 public 目录上。这一行配置,会命令 Homestead 为我们新建一个 Nginx 站点,并且把 Web Root 配置到指定目录下。Laravel 应用的 Nginx 站点 Web Root 配置,默认就是在根目录下的 public 目录。

sites:- map: homestead.testto: /home/vagrant/Code/Laravel/public

目前 Laravel 项目并不存在。这里先统一配置为以上,请不用着急,在后续的章节中,我们会创建该 Laravel 项目。

另外,主机里直接访问虚拟机站点,必须通过绑定 hosts 来实现。接下来我们利用 hosts 文件绑定 homestead.test 到虚拟机 IP 192.168.10.10 上。hosts 文件的完整路径为 C:\Windows\System32\Drivers\etc\hosts,可使用下面命令打开:

code . C:/Windows/System32/Drivers/etc/hosts

如果你没有集成 code 命令的话, 请使用编辑器直接打开文件,文件路径在 C:\Windows\System32\Drivers\etc\hosts
hosts 文件的最后面加入以下一行:

192.168.10.10  homestead.test

至此站点就配置好了,等我们在后面章节创建 Laravel 项目后,即可通过浏览器访问 homestead.test 站点。

5. 数据库配置

我们可以为 Homestead 指定数据库名称,这里使用默认设置即可。

databases:- homestead

请注意开启数据库需要配合以下设置:

features:- mysql: true
6. 自定义变量

最后,如果你需要自定义一些在虚拟机上可以使用的自定义变量,则可以在 variables 中进行定义。

variables:- key: APP_ENVvalue: local

Homestead 自定义变量在本书中并未使用,知悉有此功能即可。

运行 Vagrant

完成了 Homestead 的配置,接下来我们要开始启动虚拟机了。

在命令中输入 vagrant,能看到 Vagrant 为我们提供了一些便利的命令行,下面简单介绍一下 Vagrant 常用的一些命令行的使用:

命令行说明
vagrant init初始化 vagrant
vagrant up启动 vagrant
vagrant halt关闭 vagrant
vagrant ssh通过 SSH 登录 vagrant(需要先启动 vagrant)
vagrant provision重新应用更改 vagrant 配置
vagrant destroy删除 vagrant

让我们开始启动 Homestead:

cd ~/Homestead
vagrant up

第一次启动时,Vagrant 会做以下这几件事情:

  • 以导入的 Homestead 虚拟机盒子为模板,新建一台虚拟机;
  • 并按照 Homestead.yaml 里的配置信息,对这台新建的虚拟机进行配置;
  • 配置完成后启动虚拟机。

成功启动后,还是在 ~/Homestead目录中,通过以下命令来 SSH 登录 Homestead 虚拟机中:

vagrant ssh

在我们登录成功后,你能看到类似于如下图的界面,现在我们在该终端界面中输入的所有命令都将运行在 Homestead 虚拟机上。
在这里插入图片描述
在虚拟机界面下可以输入退出虚拟机:

exit

最后尝试关闭 Homestead:

vagrant halt

注意:本书中因为虚拟机的存在,我们会有两个运行命令行的环境,一个是主机,另一个是 Homestead 虚拟机。我们会在命令的前面使用『命令行提示符』来区分主机和 Homestead。请记住以 > 开头的命令是运行在主机里,$ 开头的命令是运行在 Homestead 虚拟机里。

开启 NFS 挂载

使用 Homestead 开发时经常遇到站点龟速响应的问题,解决方案请见: Wiki:Laravel Homestead:开启 NFS 解决站点响应缓慢

FAQ

以下是环境部署的常见问题搜集,方便遇到问题的同学查阅。如果你一切正常,请无视以下。

1. SSH auth method: private key

Homestead 启动时 SSH auth method: private key 解决方案汇总

2. Failed to restart php7.0-fpm.service: Unit php7.0-fpm.service not found.

Vagrant 启动虚拟机 提示 PHP7.0 模块找不到,这个怎么处理呢?

3. 为什么我的项目页面打开这么慢?(重点推荐)

解决 Windows 系统使用 Homestead 运行 Laravel 项目响应缓慢问题

  1. Homestead 配置好后访问项目出现 No input file specified

这个错误的原因是文件夹映射没成功。

确保 mapto 路径的绝对准确,虚拟机里的 Linux 系统区分大小写;
确定路径没问题以后,主机里 vagrant provision && vagrant reload 意为「应用 Homestead.yaml 配置」和「重启虚拟机」。


http://chatgpt.dhexx.cn/article/Mandnbym.shtml

相关文章

Homestead 发布

以太坊开发开始于2013年12月份,当时两个开发者和一个大学辍学生(译者注:即Vitalik)决定集思广益,一起开发这一项目。后来与我们群志趣相投的人也加入了。我们的第一个概念验证(Proof of Cocept 1&#xff0…

TCP的三次握手和四次挥手(超详解)

TCP的三次握手和四次挥手 TCP的连接建立 TCP的连接建立的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。下图画出了三报文握手建立TCP连接的过程。 假定最初主机A运行的是TCP客户端程序,而B运行的是TCP服务端程序。最初两端的TCP进程都处…

简述TCP三次握手和四次挥手过程

TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(synj)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)第二次握手&a…

TCP三次握手和四次挥手解析

三次握手(建立连接) (1)序号:seq序号,占32位,用来标识从TCP客户端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:ack序号&a…

简述TCP的三次握手和四次挥手

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂&am…

简单理解TCP的三次握手和四次挥手

本文用简洁的语言教你理解TCP的三次握手和四次挥手,匆忙写的,审美可能有待提升。 本文适合入门,基础不高的同学观看,以便有一个大概的了解。深入的同学还请高抬贵手。 还有请记住,是传输层中TCP的东西,不…

tcp三次握手和四次挥手的过程

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号 并交换 TCP窗口…

TCP的三次握手和四次挥手

一、TCP介绍 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种…

TCP三次握手和四次挥手的全过程

三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,希望大家能带着如下问题进行阅读,收获会更大: 请画出三次握手和四次挥手的示意图为什么连接的时候是三次握手?什么是半连接队列?ISN(Initial Sequence Number)是…

TCP的三次握手和四次挥手总结

TCP的三次握手和四次挥手总结 本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号 seq:占 4 个字节,用来标记数据段的顺序,TCP 把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生…

三次握手和四次挥手知识总结(超详细)

前言: 最近学习了计算机网络的知识,看了很多的视频,并参考了很多资料,写下了这将近4500字的与“三次握手和四次挥手”相关的知识,希望能帮助到各位小伙伴儿以及加深自己印象,方便以后复习用 如果有什么写的…

简述TCP的三次握手和四次挥手过程

①TCP是一种精致的,可靠的字节流协议。 ②在TCP编程中,三路握手一般由客户端(Client)调用Connent函数发起。 ③TCP3次握手后数据收发通道即打开(即建立了连接)。 ④简述三路握手过程: 图 .TCP三次握手 (1)第一次握手:C…

通俗易懂理解TCP协议三次握手和四次挥手及其常见问题

TCP协议三次握手和四次挥手 三次握手如果建立连接只需要2次握手,可能会出现的情况 四次挥手为什么建立连接是三次握手,关闭连接确是四次挥手呢?TIME_WAIT状态有什么作用,为什么主动关闭方没有直接进入CLOSED状态释放资源&#xff…

TCP的三次握手和四次挥手详解

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,与之相反的,采用四次挥手来断开连接: TCP标志位有6种标示,即:SYN(建立联机) 、 ACK(确认) 、 PSH(传送) 、…

TCP三次握手和四次挥手详解(面试常见问题)

大概两个月前,一位朋友在面试360集团时,在面试过程中被问及TCP三次握手和四次挥手的相关知识,他当时只知道大概,但当时面试官问他TCP三次握手过程中发送的数字是多少,他一下子就懵住了,因为这也是他第一次参…

详解TCP 三次握手和四次挥手

任 TCP 虐我千百遍,我仍待 TCP 如初恋。 过去不会没关系,今天就让我们来消除这份恐惧,微笑着勇敢的面对它吧! 1、TCP 基本认识 2、TCP 连接建立 3、TCP 连接断开 4、Socket 编程 TCP 基本认识 瞧瞧 TCP 头格式 我们先来看看 TC…

简述三次握手和四次挥手

三次握手 第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号,此时客户端处于SYN_SENT状态 第二次握手:服务端收到客户端的SYN报文之后,会回复SYN报文作为应答,并且也指定了自己的初始…

TCP三次握手和四次挥手最通俗解释说明

TCP三次握手和四次挥手以及11种状态 1、三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三…

简述TCP三次握手和四次挥手

为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。 1.1 TCP三次握手漫画图解 如下图所示,下面的两个机器人通过 3 次握手确定了对方能正确接收和发送消息(图片来源:《图解 HTTP》)。 简单示意图: 客户端–发送带有 SYN 标志的数据包–一次握手–服务端服务…

tcp三次握手和四次挥手

TCP三次握手与四次挥手详解(最全面) 一、TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。 无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/I…