Windows 搭建 Laravel 的 Homestead 开发环境

开发 Laravel 应用,也可以使用 WAMP、XAMPP、PHPStudy 等集成环境,但对于一个优秀的开发者, 应毫不犹豫地选择 Homestead 作为 Laravel 应用的开发环境。

强烈推荐使用 Homestead 作为 Laravel 5.5 的 开发环境

你需要明白的四个主要概念:

  • VirtualBox:是 Oracle 公司的虚拟机软件。
  • Vagrant: 是一个基于Ruby的虚拟机管理工具,用于创建和部署虚拟化开发环境。它提供了一种命令行接口,允许自动化安装虚拟机, Vagrantfile 文件给共享虚拟机配置提供了可能。 Homestead 正是构建在 Vagrant 之上。
  • Laravel Homestead: 是官方预封装的一个 Homestead Vagrant Box,它是一台虚拟机的原型, 用来快速生产一个配置完整的服务器虚拟机,运行在 VirtualBox 上。
  • Homestead 管理脚本: 是 homestead 源码,它的源码托管在 github 上。里面的 Homestead.yaml 配置文件,可对 Vagrant 中的虚拟机进行傻瓜式配置。

接下来让我们按照下面的步骤来完成整个 Laravel 开发环境的安装及配置:

  • 安装 VirtualBox
  • 安装 Vagrant
  • 导入 Homestead Box 虚拟机盒子
  • 安装 Git
  • 安装 Homestead 管理脚本
  • 配置 Homestead.yaml 文件
  • 启动 Homestead 虚拟机

注意:必须开启本机的硬件虚拟化(VT-x),可以进入 BIOS 来设置。否则,虚拟机可能无法运行。

安装 VirtualBox

VirtualBox 号称是最强的免费虚拟机软件。

点击此处,下载 VirtualBox 5.2.6 版本。

下载完成之后,双击安装包执行安装,按照提示进行安装即可。

【 说明:如果安装出错,请到官网下载与操作系统对应的安装包。】

安装 Vagrant

Vagrant 是用来管理虚拟机的工具,支持当前主流的虚拟机系统如 VirtualBox、VMware、AWS 等。

Vagrant 的主要作用是提供一个可配置、可移植和复用的软件环境。

Vagrant 可以通过编写一个 Vagrantfile 文件来控制虚拟机的启动、虚拟机网络环境的配置、虚拟机与主机间的文件共享,以及启动后自动执行一些配置脚本,如自动执行一个 Shell Script 来安装一些必备的开发工具,如安装配置MySQL、PHP,甚至是自动配置 Nginx 站点。

这意味着,在一个多人开发的项目中,你只需要同步 Vagrantfile 文件,就可以保证参与项目的每个人各自的机器上拥有一致的开发环境。

点击此处,下载 Vagrant 2.0.2 版本。

然后,按照提示默认安装即可。

Homestead 介绍

Homestead 利用 Vagrantfile 提供的便利,定制了一整套的可配置、可移植和复用的 Laravel 开发环境。Homestead 虚拟机里面包含了 Nginx 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时需要用到的各种软件。

Homestead 包含了两个东西:

  • Homestead 管理脚本(其实,就是 Homestead 本身)
  • Homestead Box 虚拟机盒子(Homestead Vagrant Box)

Homestead 管理脚本

Homestead 脚本使用 Ruby 和 Shell 脚本编写而成。原理是对 Vagrantfile 文件做定制。将从 ~/Homestead/Homestead.yaml 读取的配置信息,在 provision 时,解析为 Vagrant 命令并进行对虚拟机的配置。

Homestead 脚本的作用在于,提供了极其简单易用的接口,使我们只需要通过傻瓜化配置,即可完成复杂的任务。以下是几个常用的任务:

  • IP 配置,端口映射
  • Nginx Site 创建
  • 数据库创建
  • 主机文件夹挂载到虚拟机

所有 Homestead 的版本历史在 此处 可以找到。在这里,为了提高操作的效率,我们将会使用定制版本的 Homestead。

Homestead Box 虚拟机盒子

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

Homestead Box 虚拟机盒子也有很多版本。不过,如 Homestead 脚本,为了学习的流畅性,我们将会使用定制版本的虚拟机盒子,你不需要太担心版本的事情。

安装和使用 Homestead

1. 下载和导入 Homestead Box 虚拟机盒子

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

  • Composer 加速,配置了 Composer 中国全量镜像 支持;
  • 默认集成 Heroku 工具;
  • 默认集成 Yarn,并为 Yarn 加了淘宝镜像的加速;
  • 使用 CNPM 对 NPM 进行加速。

接下来让我们开始进行 Homestead 的安装,首先我们需要下载 Homestead 虚拟机盒子。

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

  • homestead-virtualbox-3.0.0.box(教程定制化过的 Homestead 盒子)
  • metadata.json(盒子的导入配置文件)

在解压(必须解压到英文路径)目录中 lt-homestead-3-0-0-2017082400 运行以下命令导入 Box:

vagrant box add metadata.json

这样,就完成了 Homestead Vagrant 盒子的导入。

注:导入成功后,lt-homestead-3-0-0-2017082400 文件夹可任意删除。

2. 安装 Git

如果你的电脑已经安装了 Git for Windows,则无需重复安装。

使用以下命令来检测是否安装成功:

git --version

3. 下载 Homestead 管理脚本

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

  • 从国内 coding.net 网站下载,下载速度会比 官方 更快;
  • 对脚本进行修改,移除了每一次 provision 时 composer self-update 的卡顿。

接下来,使用 Git 下载定制版的 Homestead。

在桌面,右键 --> Git Bash Here,然后在打开的窗口中输入如下命令:

cd ~

git clone https://git.coding.net/summerblue/homestead.git Homestead

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

【 注:把 Homestead 放在 ~/Homestead 路径下,是为了方便后面的讲解,请保持一致。】

下载完成之后我们使用命令行进入 Homestead 目录,再使用 Git 检出我们需要的 Homestead 版本:

cd ~/Homestead

git checkout v5.4.0

接下来我们需要初始化 Homestead:

bash init.sh

运行以上命令后,会在 ~/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 指的是 ~/Homestead/Homestead.yaml 文件。

Homestead.yaml 里的配置大致可以分为以下几种:

  • 虚拟机设置
  • SSH 秘钥登录配置
  • 共享文件夹配置
  • 站点配置
  • 数据库配置
  • 自定义变量

接下来我们逐个讲解。

虚拟机设置

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

ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

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_rsa 和 id_rsa.pub 的话,就说明以前已经生成过 SSH Key , 请跳过以下生成 SSH 的步骤继续阅读剩下内容。

否则使用以下方法来生成 SSH Key,请将 [email protected] 替换为你的邮箱:

ssh-keygen -t rsa -C "your_email@example.com"

命令行会提示让你指定秘钥的名称,按回车键将 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]

可以都选择默认,一直按回车键即可。

SSH 秘钥的两个文件:

  • id_rsa —— SSH 秘钥的 私钥 (Private Key)
  • id_rsa.pub —— SSH 秘钥的 公钥 (Public Key)

共享文件夹配置

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

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

共享文件夹里面的文件如有变更(新增、删除、修改等),在本机和虚拟机之间会自动同步。也可以根据需要配置多个共享文件夹。

为了后续课程讲解,请统一配置如下:

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

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

cd ~
mkdir Code

在后面的章节中,我们将会在该文件夹下放置我们所有的 Laravel 项目,Homestead 会把该文件夹下的项目自动映射到虚拟机的 /home/vagrant/Code 文件夹上。

站点配置

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

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

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

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

修改 hosts 文件,在最后添加下面的内容:

192.168.10.10  homestead.test

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

数据库配置

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

databases:
    - homestead

自定义变量

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

variables:
    - key: APP_ENV
      value: local

Homestead 自定义变量我们没用上,只需知道有此功能即可。

运行 Vagrant

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

在命令行输入 vagrant,能看到 Vagrant 为我们提供了很多可用的命令。

vagrant

Vagrant 的常用命令如下:

命令 说明
vagrant up 启动虚拟机
vagrant halt 关闭虚拟机
vagrant ssh 通过 SSH 登录 虚拟机
vagrant provision 立即使新配置生效
vagrant reload --provision 根据 Homestead.yaml 平滑重启虚拟机
vagrant box list 列出所有的 vagrant box
vagrant destroy 删除虚拟机

现在,让我们开始启动 Homestead:

cd ~/Homestead && vagrant up

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

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

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

vagrant ssh

登录成功后,在该终端界面中输入的所有命令都将运行在 Homestead 虚拟机上。

在虚拟机界面下可以输入下面的命令退出虚拟机:

exit

最后,关闭 Homestead 虚拟机:

vagrant halt

安装 Laravel 5.5

打开命令行,直接通过 Composer(前提是你已经安装了 Comoser ) 来安装 Laravel 5.5。

这里,为了统一,将 ~/Code 目录作为 Laravel 项目的保存目录。

前面已经说过,~ 代表的是你的家目录,即 C:\Users\用户名(如:C:\Users\HP)。

composer create-project --prefer-dist laravel/laravel blog 5.5.*

注:blog 为项目名称,可自己制定。

修改 ~/Homestead/Homestead.yaml ( Homestead 配置文件)中的个别配置:

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

sites:
    - map: homestead.test
      to: /home/vagrant/Code/blog/public

然后,在 ~/Homestead 目录中,启动虚拟机:

vagrant up

注意:虚拟机只会在第一次启动时自动应用 Homestead.yaml 配置,以后再使用 vagrant up 启动虚拟机时,会沿用第一次的配置。

因此,要想让新的 Homestead.yaml 配置生效,必须使用下面的命令:

vagrant provision
# 立即使 Homestead.yaml 配置生效,虚拟机不会重启

或者

vagrant reload --provision
# 平滑重启虚拟机,并加载 Homestead.yaml 配置

然后,在本机的浏览器中访问 http://homestead.test/ 或者 http://192.168.10.10/ ,就可以看到 Laravel 的默认首页。

最后说明两点:

  • Homestead.yaml 里面的共享文件夹配置,是指文件夹里面的内容会自动同步(不包括该文件夹本身),而且同步是双向的。也就是说,无论是在本机,还是虚拟机中的共享文件夹里面的内容发生变更,都可以实现同步。我们会发现,网上的其他教程是先登录虚拟机,然后在虚拟机里的共享文件夹中通过 Composer 安装 Laravel。

  • 如果之前用的是其他开发环境比如(phpStudy),现在想改用 Homestead 环境,只需更改 Homestead.yaml 里的相关配置,然后 vagrant provision 。

    folders:
        - map: D:/phpStudy/WWW
          to: /home/vagrant/Code
    
    sites:
        - map: homestead.test
          to: /home/vagrant/Code/blog/public

你可能感兴趣的:(Laravel)