一、下载 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)用于从客户端访问。