Laravel 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,为此官方为我们提供了一整套本地开发环境 —— Laravel Homestead。
Laravel Homestead 是一个打包好各种 Laravel 开发所需要的工具及环境的 Vagrant 盒子(Vagrant 提供了一个便捷的方式来管理和设置虚拟机),该盒子为我们提供了优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP、HHVM、Web服务器以及其它工具软件,我们也完全不用再担心误操作搞乱操作系统 —— 因为 Vagrant 盒子是一次性的,如果出现错误,可以在数分钟内销毁并重新创建该 Vagrant 盒子!
Homestead可以运行在 Windows、Mac 以及 Linux 系统上,其中已经安装好了Nginx、PHP7.0、MySQL、Postgres、Redis、Memcached、Node以及很多其它开发 Laravel 应用所需要的东西。
注:如果你使用的是Windows,需要开启系统的硬件虚拟化(VT-x),这通常可以通过BIOS来开启。
在使用 Homestead 之前,需要先安装 Virtual Box/VMWare 和 Vagrant,所有这些软件包都为常用操作系统提供了一个便于使用的可视化安装器。
安装 Homestead Vagrant 盒子
VirtualBox/VMWare 和 Vagrant 安装好了之后,在终端中使用能如下命令将 laravel/homesterad
添加到 Vagrant 中。下载该盒子将会花费一些时间,时间长短主要取决于你的网络连接速度:
vagrant box add laravel/homestead
如果上述命令执行失败,可以使用 Vagrant 老版本的方式,这需要输入完整的 URL:
vagrant box add laravel/homestead https://atlas.hashicorp.com/laravel/boxes/homestead
通过 GitHub 安装 Homestead
你还可以通过简单克隆仓库代码来实现 Homestead 安装。将仓库克隆到用户目录下的 Homestead 目录,这样 Homestead 盒子就可以会作为所有其他 Laravel 项目的主机:
cd ~ git clone https://github.com/laravel/homestead.git Homestead
克隆完成后,在 Homestead 目录下运行 bash init.sh
命令来创建 Homestead.yaml
配置文件,Homestead.yaml
配置文件文件位于 ~/.homestead
目录:
bash init.sh
设置 Provider
Homestead.yaml
文件中的 provider
键表示使用哪个 Vagrant 提供者:virtualbox
、vmware_fushion
或者 vmware_workstation
,你可以将其设置为自己喜欢的提供者:
provider: virtualbox
配置共享文件夹
Homestead.yaml
文件中的 folders
属性列出了所有主机和 Homestead 虚拟机共享的文件夹,一旦这些目录中的文件有了修改,将会在本地和 Homestead 虚拟机之间保持同步,如果有需要的话,你可以配置多个共享文件夹(一般一个就够了):
folders: - map: ~/Code to: /home/vagrant/Code
如果要开启 NFS,只需简单添加一个标识到同步文件夹配置:
folders: - map: ~/Code to: /home/vagrant/Code type: "nfs"
配置 Nginx 站点
对 Nginx 不熟?没问题,通过 sites
属性你可以方便地将“域名”映射到 Homestead 虚拟机的指定目录,Homestead.yaml
中默认已经配置了一个示例站点。和共享文件夹一样,你可以配置多个站点:
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public
你还可以通过设置 hhvm
为 true
让所有的 Homestead 站点使用 HHVM:
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public hhvm: true
默认情况下,每个站点都可以通过 HTTP(端口号:8000)和 HTTPS(端口号:44300)进行访问。
Hosts文件
不要忘记把 Nginx 站点配置中的域名添加到本地机器上的 hosts
文件中,该文件会将对本地域名的请求重定向到 Homestead 虚拟机,在 Mac 或 Linux上,该文件位于 /etc/hosts
,在 Windows 上,位于 C:\Windows\System32\drivers\etc\hosts
,添加方式如下:
192.168.10.10 homestead.app
确保 IP 地址和你的 Homestead.yaml
文件中列出的一致,一旦你将域名放置到 hosts 文件,就可以在浏览器中通过该域名访问站点了!
http://homestead.app
配置好 Homestead.yaml
文件后,在 Homestead 目录下运行 vagrant up
命令,Vagrant 将会启动虚拟机并自动配置共享文件夹以及 Nginx 站点。
销毁该机器,可以使用 vagrant destroy –force
全局安装 Homestead 将会使每个项目共享同一个 Homestead 盒子,你还可以为每个项目单独安装 Homestead,这样就会在该项目下创建 Vagrantfile
,允许其他人在该项目中执行 vagrant up
命令,在指定项目根目录下使用 Composer 执行安装命令如下:
composer require laravel/homestead --dev
这样就在项目中安装了 Homestead。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.app
访问站点。不要忘记在 /etc/hosts
文件中添加域名 homestead.app
。
如果你希望使用MariaDB来替代MySQL,可以添加mariadb
配置项到Homestead.yaml
文件,该选项会移除MySQL并安装MariaDB,MariaDB是MySQL的替代版本,所以在应用数据库配置中你仍然可以使用mysql
驱动:
box: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
有时候你想要在文件系统的任意位置运行 vagrant up
启动 Homestead 虚拟机,要实现这一目的需要将 Homestead 安装目录添加到系统路径。这样你就可以在系统的任意位置运行 homestead
或 homestead ssh
来启动/登录虚拟机。
你可以在 Homestead 目录下通过运行 vagrant ssh
以 SSH 方式连接到虚拟机,但是如果你需要以更平滑的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用 vm
命令从任何地方以 SSH 方式连接到 Homestead 虚拟机:
alias vm="ssh vagrant@127.0.0.1 -p 2222"
默认已经在 Homestead 虚拟机中为 MySQL 和 Postgres 数据库做好了配置,更方便的是,Laravel的 .env
还为连接 Homestead 数据库做好了配置。
想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1
,对于 MySQL 而言,端口号是33060
,对 Postgres 而言,端口号是54320
,用户名/密码是 homestead
/secret
。
注意:只有从本地连接 Homestead 的数据库时才能使用这些非标准的端口,在 Homestead 虚拟机中还是应该使用默认的 3306 和 5432 端口进行数据库连接配置。
Homestead 虚拟机在运行时,可能需要添加额外 Laravel 应用到 Nginx 站点。如果是在单个 Homestead 环境中运行多个 Laravel 应用,添加站点很简单,只需将站点添加到 Homestead.yaml
文件,然后在 Homestead 目录中运行 vagrant provision
命令即可。
Laravel 提供了很方便的方式来调度 Cron 任务:只需每分钟调度运行一次 Artisan 命令 schedule:run
即可。schedule:run
会检查定义在 App\Console\Kernel
类中定义的调度任务并判断运行哪些任务。
如果想要为某个 Homestead 站点运行 schedule:run
命令,需要在定义站点时设置 schedule
为 true
:
sites: - map: homestead.app to: /home/vagrant/Code/Laravel/public schedule: true
该站点的 Cron 任务会被定义在虚拟机的 /etc/cron.d
目录下。
默认情况下,Homestead 端口转发配置如下:
转发更多端口
如果你想要为 Vagrant 盒子添加更多端口转发,做如下转发协议设置即可:
ports: - send: 93000 to: 9300 - send: 7777 to: 777 protocol: udp
SensioLabs 开发的 Blackfire Profiler 能自动收集代码执行数据,比如内存、CPU 时间、硬盘 I/O 等,Homestead 使得在应用中使用该性能分析器变得轻而易举。
Blackfire Profiler 需要的软件包已经预安装到 Homestead 盒子,你只需要在 Homestead.yaml
文件中设置 Blackfire Server ID 和 token:
blackfire: - id: your-server-id token: your-server-token client-id: your-client-id client-token: your-client-token
配置好 Blackfire 的凭证之后,在 Homestead 目录下使用 vagrant provision
重新启动 Homestead。在此之前,确保你已经查看过 Blackfire 文档了解了如何在浏览器安装相应的 Blackfire 扩展。