一、下载 Virtual Box 与 Vagrant 盒子,并将 laravel/homestead 盒子添加到Vagrant 中

这里我们选择 Virtual Box 而不选择 VMWare 的主要原因是 Virtual Box 是完全免费的。

安装好Virtual Box 与 Vagrant 在终端中使用如下命令将 Homestead Vagrant 盒子 laravel/homestead 添加到 Vagrant中:

vagrant box add laravel/homestead

执行命令后会列出一个列表,选择 virtualbox 对应选项即可,然后会下载相应资源,根据网络情况的不同可能会出现网络超时的情况,这个时候可以复制下图所示的下载地址将盒子下载下来(不推荐使用迅雷下载,很大几率会出现包损坏的情况)

通过这种方式下载的话需要手动将盒子添加到 Vagrant :

vagrant box add laravel/homestead ~/你手动下载的盒子的目录/virtualbox.box

添加盒子时可能会出现如下错误:

Check your Homestead.yaml file, the path to your private key does not exist

解决办法:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa

二、安装 Homestead

首先从 Github 上将 Homestead 克隆下来,并切换到 release 分支:

git clone https://github.com/laravel/homestead.git Homestead
cd ~/Homestead
git checkout release

在 Homestead 目录下运行 bash init.sh 命令来创建 Homestead.yaml 配置文件,生成的 Homestead.yaml 文件位于当前 Homestead 目录:

// Mac/Linux...
bash init.sh

//Windows...
init.bat

三、配置 Homestead

设置 Provider:

Homestead.yaml 文件中的 provider 键表示使用哪个 Vagrant 提供者:

provider: virtualbox

配置共享文件夹

Homestead.yaml 文件中的 folders 属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,可以配置多个共享文件夹:

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

如果只是创建了很少的站点,使用一般的映射就够了。随着站点数量的增加,就会遇到性能问题,尤其是在包含大量文件的低端机器或项目中,性能问题可能会非常明显。可以尝试映射每个项目到各自的 Vagrant 文件夹:

folders:
    - map: ~/code/project1
      to: /home/vagrant/code/project1

    - map: ~/code/project2
      to: /home/vagrant/code/project2

如果要开启 NFS,只需要简单添加一个标识到同步文件夹配置:

folders:
    - map: ~/code
      to: /home/vagrant/code
      type: "nfs"

使用 NFS,需要考虑安装 vagrant-bindfs 插件。该插件可用于 Homestead 盒子中为文件和目录维护正确的用户/组权限。

还可以通过 options 传递其他 Vagrant 支持的同步文件夹选项:

folders:
    - map: ~/code
      to: /home/vagrant/code
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

配置 Nginx 站点:

通过 sites 属性可以将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml 中默认已经配置了一个示例站点。和共享文件夹一样,可以配置多个站点:

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

修改配置以后,需要运行以下命令更新虚拟机上的 Nginx 配置:

vagrant reload --provision

Hosts 文件:

将 Nginx 站点配置中的域名添加到本地机器上的 hosts 文件中,该文件会将对本地的请求重定向到 Homestead 虚拟机,在 Mac 或 Linux 上,该文件位于 /etc/hosts,在 Windows 上,位于 C:\windows\System32\dirviers\etc\hosts,添加方式如下:

192.168.10.10 homestead.test

四、启动 Vagrant 盒子

配置好 Homestead.yaml 文件后,在 Homestead 目录下运行 :

vagrant up

Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点。启动之后,就可以在浏览器中通过 http://homestead.test 访问 Laravel 应用了。

如果要登录该虚拟机,可以使用:

vagrant ssh

如果要关闭该虚拟机,可以使用:

vagrant halt

如果要销毁该虚拟机,可以使用:

vagrant destroy --force

五、为指定项目安装 Homestead

可以为每个项目单独安装 Homestead,这样就会在该项目下创建 Vagrantfile,允许其他人在该项目中执行 vagrant up 命令,在指定项目根目录下使用 Composer 执行安装命令:

composer require laravel/homestead --dev

Homestead 安装完成后,使用 make 命令生成 Vagrantfile 和 Homestead.yaml 文件,make 命令会自动配置 Homestead.yaml 中的 sites 和 folders 属性,命令执行方式如下:

Mac/Linux:
php vendor/bin/homestead make
Windows:
vendor\bin\homestead make

在终端中运行 vagrant up 命令就可以在浏览器中通过 http://homestead.test 访问站点。

安装 MariaDB

如果要使用 MariaDB,可以添加 mariadb 配置项到 Homestead.yaml 文件:

box: laravel/homestead
ip: "192.168.10.10"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true

安装 MongoDB

如果要使用 MongoDB 社区版,需要在 Homestead.yaml 中更新如下配置项:

mongodb: true

默认安装的 MongoDB 将会设置数据库用户名为 homestead 以及密码 secret。

安装 Elasticsearch

如果要安装 Elasticsearch,需要添加 elasticsearch 到 Homestead.yaml 文件并指定一个支持的版本。默认安装会创建一个名为 [homestead] 的集群,不要给 Elasticsearch 分配超过操作系统一半的内存,确保 Homestead 机器至少是分配给 Elasticsearch 的两倍:

box: laravel/homestead
ip: "192.168.10.10"
memory: 4096
cpus: 4
provider: virtualbox
elasticsearch: 6

安装 Neo4j

Neo4j 是一个图形数据库管理系统,要安装 Neo4j 社区版,需要更新 Homestead.yaml 配置项如下:

neo4j: true

默认安装的 Neo4j 会设置数据库用户名为 homestead 及对应的密码 secret。要查看 Neo4j,可以在浏览器中访问 http://homestead.test:7474,Neo4j 对外提供了三个端口:7687(Bolt)、7474(HTTP)、7473(HTTPS)用于从客户端访问。