Mac系统配置php轻量开发环境:Valet
简介
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
- 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 无疑是最佳选择。
Valet 官方默认只支持 Mac,并且要求本地自行安装 PHP 和数据库服务器,当然这可以通过 Homebrew 命令轻松实现(brew install php
以及 brew install mysql
),Valet 通过最小的资源消耗提供了一个极速的本地开发环境,如果你只需要 PHP/MySQL 并且不需要完整的虚拟化开发环境,那么 Valet 将是最好的选择。
安装
Valet 要求 MacOS 操作系统并且已安装 Homebrew。安装之前,还要确保没有其他程序如Apache 或 Nginx 绑定到本地的 80 端口。安装步骤如下:
- 使用
brew update
安装或更新 Homebrew 到最新版本; - 通过 Homebrew 安装 PHP 7.3:
brew install php
; - 安装 Composer;
- 通过 Composer 安装 Valet:
composer global require laravel/valet
(确保 ~/.composer/vendor/bin 目录在系统路径中); - 运行
valet install
命令,这将会配置并安装 Valet 和 DnsMasq,然后注册 Valet 后台随机启动。
我在valet install
过程中遇到一点问题;
Homebrew PHP appears not to be linked
会有这么一个警告;我的解决方法是这样的:(当然这需要你的php版本为7.x,valet版本大于2.0.8)
valet uninstall
brew install php
composer global require laravel/valet
valet install
这样就可以解决了;
安装完 Valet 后,尝试使用命令如ping foobar.test
(我这里因为已经切换成dev,所以是需要ping.dev的) 在终端 ping 一下任意 ```.test ```域名,如果 Valet 安装正确就会看到来自 127.0.0.1 的响应:
每次系统启动的时候 Valet 会在后台自动启动,不需要再次手动运行 valet start
或valet install
。
使用其他域名
默认情况下,Valet 使用 .test
域名后缀,如果你想要使用其他域名,可以使用 valet tld tld-name
命令。
例如,你想使用 .dev
域名后缀取代 .test
,运行 valet tld dev
,Valet 将会自动将站点域名后缀改为 *.app
。
数据库
mysql数据库使用brew安装非常简单,请自行搜索!这里不再概述。
PHP版本
Valet 允许你使用valet use php@version
来切换 PHP 的版本,如果指定 PHP 版本不存在的话,Valet 会通过 Brew 自动帮你安装:
valet use php@7.2
或者
valet use php // 默认PHP版本
升级
你可以在终端使用composer global update
命令来升级 Valet。升级之后,最好运行下valet install
命令以便 Valet 在必要情况下对配置文件进行升级。
升级到 Valet 2.0
注:先通过 valet --version 查看本机安装的 Valet 版本,如果版本已经大于 2.0 则可以跳过本段教程。
Valet 2.0 将 Valet 底层的 web 服务器从 Caddy 替换成了 Nginx,升级到这个版本之前需要运行以下命令来停止和卸载已经在后台运行的 Caddy:
valet stop
valet uninstall
接下来,需要升级到最新版本的 Valet。基于 Valet 的安装方式,你可以通过 Git 或 Composer 来实现,如果你是通过 Composer 安装的 Valet,需要通过如下方式更新到最新的主版本:
composer global require laravel/valet
最新的 Valet 源码下载好之后,运行 install 命令:
valet install
valet restart
升级之后,需要 re-park 和 re-link 站点。
访问站点配置
Valet 安装完成后,就可以启动服务站点,Valet 为此提供了两个命令:park
和 link
。
park
命令
- 在 Mac 系统中创建一个新目录,例如
mkdir ~/Sites
(或者自己的工作文档目录也可),然后进入这个目录并运行valet park
。这个命令会将当前所在目录作为 Web 根目录。 - 接下来,在新建的目录中创建一个新的 Laravel 项目:
laravel new blog
。 - 最后,在浏览器中访问
http://blog.test
。 - 当然,你也可以直接将自己原有的项目
git clone
或copy到当前目录(已经设置了Web根目录的目录)
这就是我们要做的全部工作。现在,所有在 Sites 目录中创建的 Laravel 项目都可以通过 http://folder-name.test 这种方式在浏览器中访问
link
命令
link
命令也可以用于访问本地 Laravel 站点,当你想要提供单个访问站点时这个命令很有用。
- 要使用这个命令,先切换到你的某个项目并运行
valet link app-name
,这样 Valet 会在~/.config/valet/Sites
中创建一个符号链接指向当前工作目录。 - 运行完 link 命令后,可以在浏览器中通过
http://app-name.test
访问站点。
要查看所有的链接目录,可以运行 valet links
命令。你也可以通过valet unlink app-name
来删除符号链接。
注:你还可以使用 valet link 将多个(子)域名指向同一个应用,要添加子域名或其它域名到应用,可以在应用目录下运行
valet link subdomain.app-name
。
一般来说我们使用 park
命令更方便一些,省去了后面新建应用重复执行命令,但是如果有子域名这类特殊需求,只能使用link
命令来实现了。
通过 TLS 保护站点
默认情况下,Valet 使用 HTTP 协议,如果你想要使用 HTTP/2 通过加密的 TLS 为站点提供服务,可以使用 secure
命令。例如,如果你的站点域名是 laravel.test
,可以使用如下命令:
valet secure laravel
要想回到"非安全"的 HTTP,可以使用unsecure
命令。和secure
命令一样,该命令接收主机名作为参数:
valet unsecure laravel
共享站点
Valet 还提供了一个命令用于将本地站点共享给其他人,这不需要任何额外工具即可实现,和 Homestead 一样,底层也是通过 Ngrok 实现。
要共享站点,切换到站点所在目录并运行valet share
,这会生成一个可以公开访问的 URL 并插入剪贴板,以便你直接复制到浏览器地址栏,就是这么简单:
你可以通过http://0de8c2df.ngrok.io 或 https://0de8c2df.ngrok.io 从任意联网机器访问站点(因为已经公开到互联网上):
要停止共享站点,使用 Control + C 快捷键结束该命令即可。
站点指定环境变量
有些使用其他框架的应用可能依赖服务器环境变量,但并没有提供在应用内配置这些变量的途径,在 Valet 中,可以通过在项目根目下添加.valet-env.php
文件来配置这些站点指定环境变量,这些变量会被添加到$_SERVER
全局数组中:
<?php
return [
'WEBSITE_NAME' => 'My Blog',
];