开发 Laravel 应用,也可以使用 WAMP、XAMPP、PHPStudy 等集成环境,但对于一个优秀的开发者, 应毫不犹豫地选择 Homestead 作为 Laravel 应用的开发环境。
强烈推荐使用 Homestead 作为 Laravel 5.5 的 开发环境。
你需要明白的四个主要概念:
接下来让我们按照下面的步骤来完成整个 Laravel 开发环境的安装及配置:
注意:必须开启本机的硬件虚拟化(VT-x),可以进入 BIOS 来设置。否则,虚拟机可能无法运行。
VirtualBox 号称是最强的免费虚拟机软件。
点击此处,下载 VirtualBox 5.2.6 版本。
下载完成之后,双击安装包执行安装,按照提示进行安装即可。
【 说明:如果安装出错,请到官网下载与操作系统对应的安装包。】
Vagrant 是用来管理虚拟机的工具,支持当前主流的虚拟机系统如 VirtualBox、VMware、AWS 等。
Vagrant 的主要作用是提供一个可配置、可移植和复用的软件环境。
Vagrant 可以通过编写一个 Vagrantfile 文件来控制虚拟机的启动、虚拟机网络环境的配置、虚拟机与主机间的文件共享,以及启动后自动执行一些配置脚本,如自动执行一个 Shell Script 来安装一些必备的开发工具,如安装配置MySQL、PHP,甚至是自动配置 Nginx 站点。
这意味着,在一个多人开发的项目中,你只需要同步 Vagrantfile 文件,就可以保证参与项目的每个人各自的机器上拥有一致的开发环境。
点击此处,下载 Vagrant 2.0.2 版本。
然后,按照提示默认安装即可。
Homestead 利用 Vagrantfile 提供的便利,定制了一整套的可配置、可移植和复用的 Laravel 开发环境。Homestead 虚拟机里面包含了 Nginx 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时需要用到的各种软件。
Homestead 包含了两个东西:
Homestead 脚本使用 Ruby 和 Shell 脚本编写而成。原理是对 Vagrantfile 文件做定制。将从 ~/Homestead/Homestead.yaml 读取的配置信息,在 provision 时,解析为 Vagrant 命令并进行对虚拟机的配置。
Homestead 脚本的作用在于,提供了极其简单易用的接口,使我们只需要通过傻瓜化配置,即可完成复杂的任务。以下是几个常用的任务:
所有 Homestead 的版本历史在 此处 可以找到。在这里,为了提高操作的效率,我们将会使用定制版本的 Homestead。
homestead.box 虚拟机盒子是提前打包好的 Vagrant Box 虚拟机盒子,里面预装了 Nginx Web 服务器、PHP 7.0、MySQL、Postgres、Redis、Memcached、Node,以及所有你在使用 Laravel 开发时所需要用到的各种软件。
Homestead Box 虚拟机盒子也有很多版本。不过,如 Homestead 脚本,为了学习的流畅性,我们将会使用定制版本的虚拟机盒子,你不需要太担心版本的事情。
1. 下载和导入 Homestead Box 虚拟机盒子
由于国内的网络环境原因,特意为大家定制了适用于国情的 Homestead 安装包,该安装包提供了以下内容:
接下来让我们开始进行 Homestead 的安装,首先我们需要下载 Homestead 虚拟机盒子。
下载后的文件为 lt-homestead-3-0-0-2017082400.zip,请对其进行 zip 解压操作,解压成功后可以看到目录 lt-homestead-3-0-0-2017082400,此目录下包含两个文件:
在解压(必须解压到英文路径)目录中 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 脚本,定制版有以下优势:
接下来,使用 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.yaml 文件在 ~/Homestead 文件夹里,在 Git-Bash 里,你可以使用以下命令,打开当前的工作目录:
cd ~/Homestead/
explorer .
为了方便,后面如果没有提示的话, Homestead.yaml 指的是 ~/Homestead/Homestead.yaml 文件。
Homestead.yaml 里的配置大致可以分为以下几种:
接下来我们逐个讲解。
Homestead 支持我们对虚拟机的 IP,内存,CPU,虚拟机的默认提供者进行配置。这里我们基本不需要做任何配置,因此可以跳过。
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
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 秘钥的两个文件:
我们可以通过 folders 来指明本机要映射到 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 自定义变量我们没用上,只需知道有此功能即可。
完成了 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 目录中,通过以下命令来 SSH 登录 Homestead 虚拟机中:
vagrant ssh
登录成功后,在该终端界面中输入的所有命令都将运行在 Homestead 虚拟机上。
在虚拟机界面下可以输入下面的命令退出虚拟机:
exit
最后,关闭 Homestead 虚拟机:
vagrant halt
打开命令行,直接通过 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