这篇文章比较长,须要阅读20分钟旁边,紧张先容开拓环境Valet的安装、配置和利用。
【文章转自laravel学院】
Valet 是为 Mac 打造的极简 Laravel 开拓环境,没有 Vagrant,没有虚拟机,也无需配置 /etc/hosts 文件,还可以利用本地隧道公开分享你的站点。

启动 Mac 后,Laravel Valet 会在后台静默运行 Nginx,然后通过 DnsMasq,Valet 会代理所有针对 .test 域名的要求指向本地安装的站点目录。
此外,这样一个极速的 Laravel 开拓环境只须要占用 7M 内存。Valet 并不是想要替代 Vagrant 或者 Homestead,只是供应了其余一种选择,更加灵巧、极速、以及占用更小的内存空间。正是基于这些缘故原由,我们将 Valet 称之为轻量级的开拓环境。
Valet 开箱支持但不限于以下软件和工具:
Laravel
Lumen
Bedrock
CakePHP 3
Concrete5
Contao
Craft
Drupal
Jigsaw
Joomla
Katana
Kirby
Magento
OctoberCMS
Sculpin
Slim
Statamic
Static HTML
Symfony
WordPress
Zend
以上支持的驱动文件位于 ~/.composer/vendor/laravel/valet/cli/drivers 目录下,当然,你还可以通过自定义驱动扩展 Valet,自定义的驱动文件存放在 ~/.valet/Drivers 目录。
Valet 还是 Homestead
正如我们上篇文档所先容的,Laravel 还供应了其余一个开拓环境 Homestead。Homestead 和 Valet 的不同之处在于两者的目标受众和本地开拓办法。
Homestead 供应了一个完全的、包含自动化 Nginx 配置的 Ubuntu 虚拟机,如果你须要一个完全的虚拟化 Linux 开拓环境或者利用的是 Windows/Linux 操作系统,那么 Homestead 无疑是最佳选择,此外,学院君以为如果是公司团队进行正规的工程化开拓,还是利用 Homestead 为佳,缘故原由我在上篇文档中已经提及。
Valet 官方默认只支持 Mac,并且哀求本地自行安装 PHP 和数据库做事器,当然这可以通过 Homebrew 命令轻松实现(brew install php72 以及 brew install mysql),Valet 通过最小的资源花费供应了一个极速确当地开拓环境,如果你只须要 PHP/MySQL 并且不须要完全的虚拟化开拓环境,那么 Valet 将是最好的选择,学院君建议如果是 Mac 环境本地尝鲜,以是尝鲜便是以学习为目的或者只是快速做个 Demo 原型,那 Valet 无疑是很棒的选择。
末了,建议归建议,Valet 和 Homestead 都是搭建本地 Laravel 开拓环境的好工具,终极选择利用哪一个取决于你个人的喜好或团队的需求。
安装
注:已安装的直接跳到升级部分。
Valet 哀求 Mac 操作系统并且已安装 Homebrew。安装之前,还要确保没有其他程序如Apache 或 Nginx 绑定到本地的 80 端口。安装步骤如下:
利用 brew update 安装或更新 Homebrew 到最新版本;
通过 Homebrew 安装 PHP 7.2: brew install homebrew/php/php72;
通过 Composer 安装 Valet: composer global require laravel/valet
运行 valet install 命令,这将会配置并安装 Valet 和 DnsMasq,然后注册 Valet 后台随机启动。
安装完 Valet 后,考试测验利用命令如 ping foobar.test 在终端 ping 一下任意 .test 域名,如果 Valet 安装精确就会看到来自 127.0.0.1 的相应:
PING foobar.dev (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.069 ms64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.077 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.072 ms64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.082 ms
每次系统启动的时候 Valet 会在后台自动启动,不须要再次手动运行 valet start 或 valet install。
利用其他域名
默认情形下,Valet 利用 .test 域名后缀,如果你想要利用其他域名,可以利用 valet domain tld-name 命令。
例如,你想利用 .com 域名后缀取代 .test,运行 valet domain com,Valet 将会自动将站点域名后缀改为 .com。
数据库
注:已安装 MySQL 数据库忽略本条。
如果你须要数据库,可以在命令行通过 brew install mysql 安装MySQL,安装完成后就可以通过 brew services start mysql 来启动它,然后通过用户名 root 和一个空密码连接到本地数据库。
升级你可以在终端利用 composer global update 命令来升级 Valet。升级之后,最好运行下 valet install 命令以便 Valet 在必要情形下对配置文件进行升级:
升级到 Valet 2.0
注:先通过 valet –version 查看本机安装的 Valet 版本,如果版本已经大于 2.0 则可以跳过本段教程。
Valet 2.0 将 Valet 底层的 web 做事器从 Caddy 更换成了 Nginx,升级到这个版本之前须要运行以下命令来停滞和卸载已经在后台运行的 Caddy:
valet stopvalet uninstall
接下来,须要升级到最新版本的 Valet。基于 Valet 的安装办法,你可以通过 Git 或 Composer 来实现,如果你是通过 Composer 安装的 Valet,须要通过如下办法更新到最新的主版本:composer global require laravel/valet
最新的 Valet 源码下载好之后,运行 install 命令:
valet installvalet restart
升级之后,须要 re-park 和 re-link 站点。
访问站点Valet 安装完成后,就可以启动做事站点,Valet 为此供应了两个命令:park 和 link。
park 命令
在 Mac 系统中创建一个新目录,例如 mkdir ~/Sites,然后进入这个目录并运行 valet park。这个命令会将当前所在目录作为 Web 根目录。
接下来,在新建的目录中创建一个新的 Laravel 站点: laravel new blog。
接下来,在浏览器中访问 http://blog.com(我通过 valet domain com 将域名后缀改成了 .com)。
这便是我们要做的全部事情。现在,所有在 Sites 目录中创建的 Laravel 项目都可以通过 http://folder-name.com这种办法在浏览器中访问,是不是很方便?
link 命令
link 命令也可以用于访问本地 Laravel 站点,当你想要供应单个访问站点时这个命令很有用。
要利用这个命令,先切换到你的某个项目并运行 valet link app-name,这样 Valet 会在 ~/.valet/Sites 中创建一个符号链接指向当前事情目录。
运行完 link 命令后,可以在浏览器中通过 http://app-name.com 访问站点。
要查看所有的链接目录,可以运行 valet links 命令。你也可以通过 valet unlink app-name 来删除符号链接。
注:你还可以利用 valet link 将多个(子)域名指向同一个运用,要添加子域名或其它域名到运用,可以在运用目录下运行 valet link subdomain.app-name,如这里我们在一个新运用下运行 valet link forum.blog:
一样平常来说我们利用 park 命令更方便一些,省去了后面新建运用重复实行命令,但是如果有子域名这类分外需求,只能利用 link 命令来实现了。
通过 TLS 让站点更安全
默认情形下,Valet 利用 HTTP 协议,如果你想要利用 HTTP/2 通过加密的 TLS 为站点供应做事,可以利用 secure命令。例如,如果你的站点域名是 blog.com,可以利用如下命令:valet secure blog
要想回到”非安全”的 HTTP,可以利用 unsecure 命令。和 secure 命令一样,该命令吸收主机名作为参数:valet unsecure blog
分享站点Valet 还供应了一个命令用于将本地站点共享给其他人,这不须要任何额外工具即可实现,和 Homestead 一样,底层也是通过 Ngrok 实现。
要共享站点,切换到站点所在目录并运行 valet share,这会天生一个可以公开访问的 URL 并插入剪贴板,以便你直接复制到浏览器地址栏,便是这么大略:

你可以通过 http://4c59137d.ngrok.io 或 https://4c59137d.ngrok.io 从任意联网机器访问站点(由于已经公开到互联网上):
要停滞共享站点,利用 Control + C 快捷键结束该命令即可。
注:valet share 目前尚不支持分享利用 valet secure 命令进行安全处理的站点,以是须要先通过 valet unsecrue 命令解除安全访问。
自定义 Valet 驱动你还可以编写自定义的 Valet 驱动为非 Valet 原生支持的 PHP 运用供应做事。安装完 Valet 时系统会创建一个~/.valet/Drivers 目录,该目录中有一个 SampleValetDriver.php 文件,这个文件中有一个演示如何编写自定义驱动的示例。编写一个驱动只须要实现三个方法:serves、isStaticFile 和frontControllerPath。
这三个方法吸收 $sitePath、$siteName 和 $uri 值作为参数,个中 $sitePath 表示站点目录,如 ~/Sites/my-project,$siteName 表示主域名部分,如 my-project,而 $uri 则是输入的要求地址,如 /foo/bar。编写好自定义的 Valet 驱动后,将其放到 ~/.valet/Drivers 目录并遵照 FrameworkValetDriver.php 这种命名办法,举个例子,如果你是在为 WordPress 编写自定义的 Valet 驱动,对应的文件名称为 WordPressValetDriver.php。
下面我们来详细谈论并演示自定义 Valet 驱动须要实现的三个方法。
serves 方法
如果自定义驱动须要连续处理输入要求,serves 方法会返回true,否则该方法返回 false。因此,在这个方法中该当判断给定的 $sitePath 是否包含你做事类型的项目。
例如,假设我们编写的是 WordPressValetDriver,那么对应 serves 方法如下:
/ Determine if the driver serves the request. @param string $sitePath @param string $siteName @param string $uri @return void @translator laravelacademy.org/public function serves($sitePath, $siteName, $uri){ return is_dir($sitePath.'/wp-admin');}
isStaticFile 方法
isStaticFile 方法会判断输入要求是否是静态文件,例如图片或样式文件,如果文件是静态的,该方法会返回磁盘上的完全路径,如果输入要求不是要求静态文件,则返回 false:
/ Determine if the incoming request is for a static file. @param string $sitePath @param string $siteName @param string $uri @return string|false/public function isStaticFile($sitePath, $siteName, $uri){ if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) { return $staticFilePath; } return false;}
注:isStaticFile 方法只有在 serves 方法返回 true 并且要求 URI 不是 / 的时候才会被调用。
frontControllerPath 方法
frontControllerPath 方法会返回前端掌握器的完全路径,常日是 index.php:
/ Get the fully resolved path to the application's front controller. @param string $sitePath @param string $siteName @param string $uri @return string/public function frontControllerPath($sitePath, $siteName, $uri){ return $sitePath.'/public/index.php';}
关于自定义 Valet 驱动可以参考学院君为 Flarum 论坛编写的扩展教程:在 Mac 开拓环境 Laravel Valet 中配置运行 Flarum 论坛系统。
本地驱动
如果你想要为单运用程序定义一个自定义的 Valet 驱动,在运用根目录下创建一个 LocalValetDriver.php 文件,自定义驱动类可以继续自 ValetDriver 基类或者继续自已存在的运用指定驱动类如 LaravelValetDriver:
class LocalValetDriver extends LaravelValetDriver{ / Determine if the driver serves the request. @param string $sitePath @param string $siteName @param string $uri @return bool / public function serves($sitePath, $siteName, $uri) { return true; } / Get the fully resolved path to the application's front controller. @param string $sitePath @param string $siteName @param string $uri @return string / public function frontControllerPath($sitePath, $siteName, $uri) { return $sitePath.'/public_html/index.php'; }}其他常用 Valet 命令命令 描述 valet forget
从”parked”目录运行该命令以便从 parked 目录列表中移除该目录valet paths
查看你的”parked”路径valet restart
重启 Valetvalet start
启动 Valetvalet stop
关闭 Valetvalet uninstall
卸载 Valet