Laravel 代客

Introduction

Laravel 代客 是 macOS 极简主义者的开发环境。 Laravel Valet 将你的 Mac 配置为始终运行Nginx 在您的机器启动时在后台运行。然后,使用DnsMasq, 代客代理所有请求*.test 域指向安装在本地计算机上的站点。

换句话说,Valet 是一个非常快速的 Laravel 开发环境,它使用大约 7 MB 的 RAM。 Valet 不能完全替代Sail 或者Homestead, 但如果您想要灵活的基础知识、喜欢极速或在 RAM 有限的机器上工作,则提供了一个很好的选择。

开箱即用的 Valet 支持包括但不限于:

但是,您可以使用自己的扩展 Valet自定义驱动程序.

Installation

Warning
Valet 需要 macOS 和Homebrew.在安装之前,您应该确保没有其他程序(如 Apache 或 Nginx)绑定到您本地计算机的端口 80。

要开始,您首先需要确保 Homebrew 是最新的,使用update 命令:

brew update

接下来,您应该使用 Homebrew 安装 PHP:

brew install php

安装 PHP 后,您就可以安装作曲家包管理器.此外,您应该确保~/.composer/vendor/bin 目录位于系统的“PATH”中。安装 Composer 后,您可以将 Laravel Valet 安装为全局 Composer 包:

composer global require laravel/valet

最后,你可以执行 Valet'sinstall 命令。这将配置和安装 Valet 和 DnsMasq。此外,Valet 依赖的守护进程将配置为在系统启动时启动:

valet install

安装 Valet 后,尝试 ping 任何*.test 在您的终端上使用诸如以下命令的域ping foobar.test.如果 Valet 安装正确,您应该会看到此域响应于127.0.0.1.

每次您的机器启动时,代客将自动启动其所需的服务。

PHP 版本

Valet 允许您使用valet use php@version 命令。如果尚未安装,Valet 将通过 Homebrew 安装指定的 PHP 版本:

valet use php@8.1

valet use php

您还可以创建一个.valetphprc 文件在项目的根目录中。这.valetphprc 文件应包含站点应使用的 PHP 版本:

php@8.1

创建此文件后,您可以简单地执行valet use 命令,该命令将通过读取文件来确定站点的首选 PHP 版本。

Warning
Valet 一次只提供一个 PHP 版本,即使您安装了多个 PHP 版本。

Database

如果您的应用程序需要数据库,请查看DBngin,它提供了一个免费的一体化数据库管理工具,其中包括 MySQL、PostgreSQL 和 Redis。安装 DBngin 后,您可以连接到您的数据库127.0.0.1 使用root 用户名和密码的空字符串。

重置您的安装

如果您无法正常运行 Valet 安装,请执行composer global require laravel/valet 命令后跟valet install 将重置您的安装并可以解决各种问题。在极少数情况下,可能需要通过执行“硬重置”Valetvalet uninstall --force 其次是valet install.

升级代客

您可以通过执行以下命令来更新您的代客安装composer global require laravel/valet 命令在你的终端。升级后,最好运行valet install 命令,以便 Valet 可以在必要时对您的配置文件进行额外升级。

服务站点

安装 Valet 后,您就可以开始为 Laravel 应用程序提供服务了。 Valet 提供了两个命令来帮助您为您的应用程序提供服务:parklink.

park 命令

park 命令在您的机器上注册一个包含您的应用程序的目录。一旦目录被代客“停放”,该目录中的所有目录都可以在您的网络浏览器中访问http://<directory-name>.test:

cd ~/Sites

valet park

这里的所有都是它的。现在,您在“parked”目录中创建的任何应用程序都将自动使用http://<directory-name>.test 习俗。因此,如果您的停放目录包含名为“laravel”的目录,则可以访问该目录中的应用程序http://laravel.test.此外,Valet 自动允许您使用通配符子域访问该站点 (http://foo.laravel.test).

link 命令

link 命令也可以用于服务你的 Laravel 应用程序。如果您想为目录中的单个站点而不是整个目录提供服务,则此命令很有用:

cd ~/Sites/laravel

valet link

一旦应用程序使用link 命令,您可以使用其目录名称访问该应用程序。因此,可以访问上面示例中链接的站点http://laravel.test.此外,Valet 自动允许您使用通配符子域(http://foo.laravel.test).

如果您想在不同的主机名上提供应用程序,您可以将主机名传递给link 命令。例如,您可以运行以下命令使应用程序可用http://application.test:

cd ~/Sites/laravel

valet link application

当然,您也可以使用link 命令:

valet link api.application

你可以执行links 命令显示所有链接目录的列表:

valet links

unlink 命令可用于破坏站点的符号链接:

cd ~/Sites/laravel

valet unlink

使用 TLS 保护站点

默认情况下,Valet 通过 HTTP 为站点提供服务。但是,如果您想使用 HTTP/2 通过加密的 TLS 服务站点,您可以使用secure 命令。例如,如果您的网站由 Valet 在laravel.test 域,您应该运行以下命令来保护它:

valet secure laravel

要“解除”站点的安全并恢复为通过纯 HTTP 提供其流量,请使用unsecure 命令。像secure 命令,此命令接受您希望取消保护的主机名:

valet unsecure laravel

提供默认站点

有时,您可能希望将 Valet 配置为提供“默认”站点而不是404 拜访不知名的人时test 领域。为此,您可以添加一个default 选择你的~/.config/valet/config.json 配置文件包含应作为默认站点的站点的路径:

"default": "/Users/Sally/Sites/example-site",

每个站点的 PHP 版本

默认情况下,Valet 使用您的全局 PHP 安装来为您的站点提供服务。但是,如果您需要跨多个站点支持多个 PHP 版本,您可以使用isolate 命令指定特定站点应使用哪个 PHP 版本。这isolate 命令将 Valet 配置为对位于当前工作目录中的站点使用指定的 PHP 版本:

cd ~/Sites/example-site

valet isolate php@8.0

如果您的站点名称与包含它的目录的名称不匹配,您可以使用--site 选项:

valet isolate php@8.0 --site="site-name"

为了方便起见,您可以使用valet php,composer, 和which-php 根据站点配置的 PHP 版本代理调用适当的 PHP CLI 或工具的命令:

valet php
valet composer
valet which-php

你可以执行isolated 命令显示所有独立站点及其 PHP 版本的列表:

valet isolated

要将站点恢复为 Valet 全局安装的 PHP 版本,您可以调用unisolate 来自站点根目录的命令:

valet unisolate

分享网站

Valet 甚至包括一个与全世界共享您的本地站点的命令,提供了一种在移动设备上测试您的站点或与团队成员和客户共享的简单方法。

通过 Ngrok 共享站点

要共享站点,请导航到终端中的站点目录并运行 Valet'sshare 命令。一个可公开访问的 URL 将被插入到您的剪贴板中,并准备好直接粘贴到您的浏览器中或与您的团队共享:

cd ~/Sites/laravel

valet share

要停止共享您的网站,您可以按Control + C.使用 Ngrok 共享您的站点需要您创建一个 Ngrok 帐户设置身份验证令牌.

Note
您可以将其他 Ngrok 参数传递给共享命令,例如valet share --region=eu.如需更多信息,请咨询ngrok 文档.

通过 Expose 共享网站

如果你有Expose 安装后,您可以通过导航到终端中的站点目录并运行expose命令。咨询的公开文件 有关它支持的其他命令行参数的信息。共享站点后,Expose 将显示您可以在其他设备上或在团队成员中使用的可共享 URL:

cd ~/Sites/laravel

expose

要停止共享您的网站,您可以按Control + C.

在本地网络上共享站点

Valet 将传入流量限制为内部127.0.0.1 默认情况下,您的开发机器不会暴露于来自 Internet 的安全风险。

如果您希望允许本地网络上的其他设备通过您机器的 IP 地址访问您机器上的代客站点(例如:192.168.1.10/application.test),您将需要为该站点手动编辑适当的 Nginx 配置文件以删除对listen 指示。你应该删除127.0.0.1: 的前缀listen 端口 80 和 443 的指令。

如果你还没有跑valet secure 在项目中,您可以通过编辑打开所有非 HTTPS 站点的网络访问权限/usr/local/etc/nginx/valet/valet.conf 文件。但是,如果您通过 HTTPS 为项目站点提供服务(您已经运行valet secure 对于网站)那么你应该编辑~/.config/valet/Nginx/app-name.test 文件。

更新 Nginx 配置后,运行valet restart 命令应用配置更改。

站点特定环境变量

一些使用其他框架的应用程序可能依赖于服务器环境变量,但不提供在您的项目中配置这些变量的方法。代客允许您通过添加一个配置站点特定的环境变量.valet-env.php 项目根目录中的文件。该文件应返回一组站点/环境变量对,这些变量将被添加到全局$_SERVER 数组中指定的每个站点的数组:

<?php

return [
    // Set $_SERVER['key'] to "value" for the laravel.test site...
    'laravel' => [
        'key' => 'value',
    ],

    // Set $_SERVER['key'] to "value" for all sites...
    '*' => [
        'key' => 'value',
    ],
];

代理服务

有时您可能希望将 Valet 域代理到本地计算机上的另一项服务。例如,您可能偶尔需要运行 Valet,同时还要在 Docker 中运行一个单独的站点;但是,Valet 和 Docker 不能同时绑定到端口 80。

要解决这个问题,您可以使用proxy 命令生成代理。例如,您可以代理来自http://elasticsearch.testhttp://127.0.0.1:9200:

# Proxy over HTTP...
valet proxy elasticsearch http://127.0.0.1:9200

# Proxy over TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure

您可以使用删除代理unproxy 命令:

valet unproxy elasticsearch

您可以使用proxies 命令列出所有被代理的站点配置:

valet proxies

定制代客司机

您可以编写自己的 Valet“驱动程序”来为在 Valet 本身不支持的框架或 CMS 上运行的 PHP 应用程序提供服务。当您安装 Valet 时,一个~/.config/valet/Drivers 目录被创建,其中包含一个SampleValetDriver.php 文件。该文件包含一个示例驱动程序实现,用于演示如何编写自定义驱动程序。写一个驱动只需要你实现三个方法:serves,isStaticFile, 和frontControllerPath.

所有三种方法都收到$sitePath,$siteName, 和$uri 价值观作为他们的论据。这$sitePath 是您机器上所服务站点的完全限定路径,例如/Users/Lisa/Sites/my-project.这$siteName 是域的“主机”/“站点名称”部分(my-project).这$uri 是传入请求 URI (/foo/bar).

完成自定义 Valet 驱动程序后,将其放在~/.config/valet/Drivers 目录使用FrameworkValetDriver.php 命名约定。例如,如果您正在为 WordPress 编写自定义代客驱动程序,则您的文件名应该是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 bool
 */
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;
}

Warning
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 驱动程序,请创建一个LocalValetDriver.php 应用程序根目录中的文件。您的自定义驱动程序可能会扩展基础ValetDriver 类或扩展现有的特定于应用程序的驱动程序,例如LaravelValetDriver:

use Valet\Drivers\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';
    }
}

其他代客命令

Command Description
valet list 显示所有 Valet 命令的列表。
valet forget 从“停放”目录运行此命令以将其从停放目录列表中删除。
valet log 查看代客服务写入的日志列表。
valet paths 查看所有“停放”路径。
valet restart 重新启动 Valet 守护进程。
valet start 启动 Valet 守护进程。
valet stop 停止 Valet 守护进程。
valet trust 为 Brew 和 Valet 添加 sudoers 文件,以允许在不提示输入密码的情况下运行 Valet 命令。
valet uninstall 卸载代客:显示手动卸载的说明。通过--force 主动删除所有 Valet 资源的选项。

代客目录和文件

在解决代客环境问题时,您可能会发现以下目录和文件信息很有帮助:

~/.config/valet

包含代客的所有配置。您可能希望维护此目录的备份。

~/.config/valet/dnsmasq.d/

该目录包含 DNSMasq 的配置。

~/.config/valet/Drivers/

该目录包含 Valet 的驱动程序。驱动程序决定了特定框架/CMS 的服务方式。

~/.config/valet/Extensions/

此目录包含自定义 Valet 扩展/命令。

~/.config/valet/Nginx/

该目录包含 Valet 的所有 Nginx 站点配置。这些文件在运行时重建installsecure 命令。

~/.config/valet/Sites/

该目录包含您的所有符号链接相关项目.

~/.config/valet/config.json

这个文件是 Valet 的主配置文件。

~/.config/valet/valet.sock

该文件是 Valet 的 Nginx 安装使用的 PHP-FPM 套接字。这只有在 PHP 正常运行时才会存在。

~/.config/valet/Log/fpm-php.www.log

该文件是 PHP 错误的用户日志。

~/.config/valet/Log/nginx-error.log

该文件是 Nginx 错误的用户日志。

/usr/local/var/log/php-fpm.log

该文件是 PHP-FPM 错误的系统日志。

/usr/local/var/log/nginx

此目录包含 Nginx 访问和错误日​​志。

/usr/local/etc/php/X.X/conf.d

该目录包含*.ini 用于各种 PHP 配置设置的文件。

/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf

该文件是 PHP-FPM 池配置文件。

~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf

此文件是用于为您的站点构建 SSL 证书的默认 Nginx 配置。

磁盘访问

从 macOS 10.14 开始,默认情况下,对某些文件和目录的访问是受限的.这些限制包括桌面、文档和下载目录。此外,网络卷和可移动卷的访问也受到限制。因此,代客建议您的站点文件夹位于这些受保护位置之外。

但是,如果您希望从其中一个位置提供站点服务,则需要为 Nginx 提供“完整磁盘访问权限”。否则,您可能会遇到来自 Nginx 的服务器错误或其他不可预测的行为,尤其是在提供静态资产时。通常,macOS 会自动提示您授予 Nginx 对这些位置的完全访问权限。或者,您可以通过以下方式手动执行此操作System Preferences >Security & Privacy >Privacy 并选择Full Disk Access.接下来,启用任何nginx 主窗口窗格中的条目。

豫ICP备18041297号-2