在日常的团队开发中,由于开发环境的不一致,往往会导致出现各种各样的问题。即使是经验丰富的工程师,在遇到这种问题时也会特别头疼。为了解决这种问题,Vagrant 顺势而生!Vagrant 是一个用于创建和部署虚拟化开发环境的工具,其依赖于 VirtualBox 虚拟机,致力于帮助开发者快速构建一个环境统一的虚拟系统。Vagrant 最强大的地方是在于它在构建虚拟系统时的快捷简便,使开发者可以在短短几分钟内完成一个虚拟系统的删除与构建。
我们希望在 Vagrant 的基础上让开发环境更加统一,让开发者都能在指定的环境下使用 Laravel/ThinkPHP,这时便有了 Homestead。Homestead 是一个基于 Ubuntu 构建的虚拟机,它包含了所有开发时需要用到的东西。Homestead 提供的默认开发环境还会装上很多常用的开发工具来辅助进行项目开发,包括 PHP7,Nginx,Redis,Memcached,MySQL,Git,Node.js,NPM 等等。
接下来让我们按照这几个步骤来完成 Windows 环境下整个 Laravel/ThinkPHP 开发环境的安装和配置,其他系统也类似:
安装 VirtualBox
安装 Vagrant
导入 Homestead Box 虚拟机盒子
安装 Git
安装 Homestead 管理脚本
配置 Homestead.yaml 文件
启动 Homestead 虚拟机
VirtualBox 是 Oracle 公司的开源虚拟机软件。VirtualBox 号称是最强的免费虚拟机软件,它不仅功能齐全,而且性能也很优异!VirtualBox 支持大部分流行的系统,如:Mac,Windows,Linux 等。
根据系统选择对应的版本,下载完成之后,双击安装包进行安装即可。
百度网盘下载链接 密码:ghh3
Vagrant 是用来管理虚拟机的工具,支持当前主流的虚拟机系统如 VirtualBox、VMware、AWS 等。Vagrant 的主要作用是提供一个可配置、可移植和复用的软件环境。Vagrant 让你通过编写一个 Vagrantfile 文件来控制虚拟机的启动、网络环境配置、虚拟机与主机间的文件共享,以及启动后自动执行一些配置脚本,如自动执行一个 Shell 命令来安装一些必备的开发工具,如安装配置 MySQL、PHP,甚至是自动配置 Nginx 站点。这意味着,在一个多人开发的项目中,你只需要同步 vagrantfile 文件,就可以保证与项目的每个人各自的机器上拥有一致的开发环境。
根据系统选择对应的版本,下载完成之后,双击安装包进行安装即可。
百度网盘下载链接 密码:ghh3
Homestead 利用 Vagrantfile 提供的便利,定制了一整套的可配置、可移植和复用的 Laravel/ThinkPHP 开发环境。
Homestead 包含了两个东西:
Homestead 管理脚本;
Homestead Box 虚拟机盒子。
Homestead 脚本使用 Ruby 和 Shell 脚本编写而成。原理是对 Vagrantfile 文件做定制。将从 ~/Homestead/Homestead.yaml
读取的配置信息,在 provision 时,解析为 Vagrant 命令并进行对虚拟机的配置。Homestead 脚本的作用在于,提供了极其简单易用的接口,使我们只需要通过傻瓜化的配置,即可完成复杂的任务。以下是几个常用的任务:
IP 配置,端口映射;
Nginx Site 创建;
数据库创建;
主机文件夹挂载到虚拟机等任务。
所有 Homestead 的版本历史在 此处 可以找到。在这里,为了提高操作的效率,这里我们使用定制版本的 Homestead。
Homestead.box 虚拟机盒子是提前打包好的 Vagrant Box 虚拟机盒子,里面预装了 Nginx Web 服务器、PHP7、MySQL、Postgres、Redis、Memcached、Node.js,以及所有在使用 Laravel 开发时所需要用到的各种软件。
所有虚拟机盒子版本历史 在此。
同样,我们会使用定制版本的虚拟机盒子。
接下来,我们会讲解:
下载和导入 Homestead Box 虚拟机盒子;
安装 Git,为下载 Homestead 管理脚本做准备;
使用 Git 下载 Homestead 管理脚本。
由于国内的网络环境原因,我们特意为大家制作了适用于国情的 Homestead 安装包,该安装包提供了以下内容:
Composer 加速,配置了 Composer 中国全量镜像 支持;
默认集成 Heroku 工具;
默认集成 Yarn,并为 Yarn 加了淘宝镜像的加速;
使用 CNPM 对 NPM 进行加速。
接下来让我们开始进行 Homestead 的安装,首先我们需要下载 Homestead 虚拟机盒子,建议使用迅雷或其它离线下载方式加速下载此盒子。
下载后的文件为 lt-homestead-6-1-0-2018061700.zip
,请对其进行 zip 解压操作,解压成功后可以看到目录 lt-homestead-6-1-0-2018061700
下包含两个文件:
virtualbox.box(教程定制化过的 Homestead 盒子)
metadata.json(盒子的导入配置文件)
在解压目录 lt-homestead-6-1-0-2018061700
运行以下命令导入 Box:
vagrant box add metadata.json
导入成功之后,lt-homestead-6-1-0-2018061700
文件夹可以任意删除。
可以参看之前的教程: Git 介绍、理解及使用指南(一) 安装一节。
接下来,使用 Git 下载定制版的 Homestead:
cd ~
git clone https://git.coding.net/summerblue/homestead.git Homestead
完成之后我们进入 Homestead 目录,使用 Git 检出我们需要的版本:
cd ~/Homestead
git checkout v7.8.0
接下来初始化 Homestead:
bash init.sh
运行以上命令后,会在 ~/Homestead
目录下面生成三个文件:
Homestead.yaml - 主要配置信息文件,我们可以在此文件中配置站点和数据库等信息;
after.sh - 每次盒子重置后(provision)会调用的 shell 脚本文件;
aliases - 每次盒子重置后(provision)会被替换至虚拟机的 ~/.bash_aliases
文件中,alises 里可以放一些快捷命令的定义。
Homestead.yaml 里面的配置大致可以分为以下几种:
虚拟机设置;
SSH 密钥登录配置;
共享文件夹配置;
站点配置;
数据库配置;
自定义变量。
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
如果存在 id_rsa
和 id_rsa.pub
,请跳过以下生成 SSH 的步骤。
否则使用以下方法来生成 SSH Key,请将 your_email@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]
这时,我们再检查一下:
ls -al ~/.ssh
可以看见两个文件:
id_rsa - SSH 密钥的私钥
id_rsa.pub - SSH 密钥的公钥
我们可以通过 folders 来指明本机要映射到 Homestead 虚拟机上的文件夹。
map 对应的是我们本机的文件夹
to 对应的是 Homestead 上的文件夹
统一配置如下:
folders:
- map: ~/Code
to: /home/vagrant/Code
即默认将本机的 ~/Code
文件夹映射到 /home/vagrant/Code
文件夹上。现在我们本机还没有 ~/Code
文件夹,让我们来创建一个:
cd ~
mkdir Code
我们将会在该文件夹下放置我们的项目,Homestead 会把该文件夹下的项目自动映射到虚拟机的 /home/vagrant/Code
文件夹上。
站点配置允许你在主机里,通过域名来访问虚拟机里的项目。如下面 sites 配置所示,将 homestead.test
映射到一个 Laravel 项目的 public 目录上。这一行配置,会命令 Homestead 为我们新建一个 Nginx 站点,并且把 Web Root 配置到指定目录下。
sites:
- map: homestead.test
to: /home/vagrant/Code/Laravel/public
另外,主机里直接访问虚拟机站点,必须通过绑定 hosts 来实现。接下来我们利用 hosts 文件绑定 Homestead.test
到虚拟机 IP 192.168.10.10
上。hosts 完整路径为 C:\Windows\System32\Drivers\etc\hosts
,在最后面加上一行:
192.168.10.10 homestead.test
至此站点就配置好了,后面我们可以通过浏览器访问 Homestead.test
站点。
我们可以为 Homestead 指定数据库名称,这里使用默认即可。
databases:
- homestead
最后,如果你需要自定义一些在虚拟机上可以使用的变量,则可以在 variables 中进行定义。
variables:
- key: APP_ENV
value: local
这里我们并没有使用到该功能。
完成了 Homestead 的配置,接下来我们要开始启动虚拟机了。
在命令中输入 vagrant,能看到 Vagrant 为我们提供了一些便利的命令行,下面简单介绍一下 vagrant 常用的一些命令行的使用:
命令行 | 说明 |
---|---|
vagrant init | 初始化 vagrant |
vagrant up | 启动 vagrant |
vagrant halt | 关闭 vagrant |
vagrant ssh | 通过 SSH 登录 vagrant |
vagrant provision | 重新应用更改 vagrant 配置,也可以使用 |
vagrant destroy | 删除 vagrant |
让我们启动 Homestead:
cd ~/Homestead && vagrant up
第一次启动时,Vagrant 会做以下这几件事情:
以导入的 Homestead 虚拟机盒子作为模板,新建一台虚拟机;
按照 Homestead.yaml 里面的配置信息,对这台新建的虚拟机进行配置;
配置完成后启动虚拟机。
成功启动后,还是在 ~/Homestead
目录中,通过以下命令来 SSH 登录 Homestead 虚拟机中:
vagrant ssh
在虚拟机界面下可以输入退出虚拟机:
exit
最后尝试关闭 Homestead:
vagrant halt
VirtualBox 提示「获取 VirtualBox COM 对象失败」,修改注册表中的: HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}
下 InprocServer32
的值为 C:\Windows\System32\oleaut32.dll
。