calvinfa/valet-plus

飞速的 macOS PHP 开发环境

1.0.29.5 2021-02-02 09:57 UTC

README

简介

Valet+ 是一款 macOS 开发环境。无需 Vagrant,无需 Docker,无需 /etc/hosts 文件。

Valet 与 Valet+

Valet+ 是 Laravel Valet 的第三方分支,地址为 Laravel Valet。Valet+ 通过添加功能,旨在使事物更加简单和快速。我们非常感谢 Laravel 团队为我们提供了构建 Valet+ 的基础。由于这是一个分支,我们将在发布时定期从原始 Valet 拉取更改。

本说明书中的一些文档来自 Valet 网站,为方便阅读,在此提供。原始文档可在此处找到:https://laravel.net.cn/docs/valet

由于 Valet+ 旨在取代 Valet,它仍然使用相同的 valet 命令行名称。其界面的任何更改均在以下文档中记录。

为什么选择 Valet/Valet+?

Valet+ 配置您的 Mac 在启动时始终在后台运行 Nginx。然后,使用 DnsMasq,Valet+ 将所有指向 *.test 域的请求代理到您本地机器上安装的网站。

换句话说,这是一个飞速的开发环境。Valet+ 提供了灵活的基本功能或极端速度的绝佳替代方案。

与 Valet 的不同之处

以下是与原始 Valet 的几个关键区别

  • PHP 版本切换
  • Xdebug(开启/关闭模式)
  • PHP 扩展(mcrypt,intl,opcache)
  • 使用 opcache 优化 PHP 配置
  • MySQL(优化配置)
  • Redis
  • Elasticsearch(可选)
  • 更多功能在以下部分中详细说明...

目录

安装

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

  1. 使用 brew update 更新 Homebrew 到最新版本。
  2. 通过 brew tap calvinfa/php 添加 Homebrew PHP tap 以用于 Valet+。
  3. 使用 Homebrew 通过 brew install valet-php@7.2 安装 PHP 7.2。
  4. 使用 Homebrew 通过 brew install composer 安装 Composer。
  5. 通过 Composer 使用 composer global require weprovide/valet-plus 安装 Valet+。
  6. 根据您的 shell(echo $SHELL)将 export PATH="$PATH:$HOME/.composer/vendor/bin" 添加到 .bash_profile(对于 bash)或 .zshrc(对于 zsh)
  7. 运行 valet fix 命令。这将检查阻止 Valet+ 安装的常见问题。
  8. 运行 valet install 命令。可选地添加 --with-mariadb 以使用 MariaDB 而不是 MySQL。这将配置和安装 Valet+ 和 DnsMasq,并将 Valet 的守护程序注册为在系统启动时启动。
  9. 安装 Valet+ 后,请尝试在终端使用如下命令 ping 任意 *.test 域名:ping -c1 foobar.test。如果 Valet+ 安装正确,你应该在 127.0.0.1 上看到此域名响应。如果没有,你可能需要重启系统。特别是从 Dinghy(docker)解决方案转换过来时。

ℹ️ Valet+ 会在每次机器启动时自动启动其守护进程。一旦完成初始 Valet+ 安装,就无需再运行 valet startvalet install

ℹ️ 要更新 Valet+ 到最新版本,请在终端使用 composer global require weprovide/valet-plus 命令。升级后,运行 valet install 命令是一个好习惯,这样 Valet+ 就可以在必要时对配置文件进行额外的升级。

托管网站

安装 Valet+ 后,你就可以开始托管网站了。Valet+ 提供了一个命令来帮助你托管网站:valet park。这将把当前工作目录注册为项目根目录。通常这个目录是 ~/sites

  1. 创建一个 sites 目录:mkdir ~/sites
  2. cd ~/sites
  3. valet park

这就完成了。现在,你可以在 "parked" 目录中创建任何项目,它将自动使用 http://folder-name.test 规范进行托管。

例如

  1. mkdir ~/sites/example
  2. cd ~/sites/example
  3. echo "<?php echo 'Valet+ at your service';" > index.php
  4. 访问 http://example.test,你应该看到 Valet+ at your service

切换 PHP 版本

使用以下四个命令之一切换 PHP 版本

valet use 5.6
valet use 7.0
valet use 7.1
valet use 7.2

Xdebug

Xdebug 支持是内置的。启用后,它将在 9000 端口上工作。

可以使用 [--remote_autostart=] 选项,输入:valet xdebug --remote_autostart=0 或更改这两个设置:valet xdebug on --remote_autostart=1

启用 Xdebug

valet xdebug on [--remote_autostart=]

禁用 Xdebug

valet xdebug off [--remote_autostart=]

启用/禁用 xdebug.remote_autostart

valet xdebug --remote_autostart=[true/false]

⚠️ Xdebug 会使你的环境变慢。这就是为什么我们允许完全启用/禁用它。当不是调试时,最好通过运行 valet xdebug off 来禁用它。

PhpStorm

要在 PhpStorm 中使用 Xdebug,无需进行任何配置。只需运行 valet xdebug on 并点击右上角的 Xdebug 按钮

xdebug-phpstorm

然后为 Chrome 安装 Xdebug helper 并在查看要使用 Xdebug 的页面时启用它。

Ioncube

启用 Ioncube

valet ioncube on

禁用 Ioncube

valet ioncube off

数据库

Valet+ 自动安装 MySQL 5.7,并包含 5.6 兼容模式。它包括一个经过调整的 my.cnf,旨在提高速度。

用户名:root

密码:root

更改密码

valet db pwd <old> <new>

列出数据库

valet db ls

创建数据库

使用以下命令创建数据库:

valet db create <name>

如果没有提供名称,它会尝试找到最近的 git 仓库目录名称。如果找不到,它将使用当前工作目录名称。

valet db create

删除数据库

使用以下命令删除数据库:

valet db drop <name>

如果没有提供名称,它会尝试找到最近的 git 仓库目录名称。如果找不到,它将使用当前工作目录名称。

valet db drop

重置数据库

使用以下命令删除并创建数据库:

valet db reset <name>

如果没有提供名称,它会尝试找到最近的 git 仓库目录名称。如果找不到,它将使用当前工作目录名称。

valet db reset

导出数据库

导出数据库

valet db export <filename> <database>

如果没有提供数据库名称,它会尝试找到最近的 git 仓库目录名称。如果找不到,它将使用当前工作目录名称。

如果没有提供文件名,它将使用 <database>-<date>.sql.gz。你可以使用 valet db export - <database> 自动为自定义数据库生成文件名。

所有数据库导出都进行了压缩。

导入数据库

带有进度条的导入数据库

valet db import <filename>.sql(.gz) <name>

如果没有提供名称,它会尝试找到最近的 git 仓库目录名称。如果找不到,它将使用当前工作目录名称。

你可以直接导入 .sql 以及压缩的 .sql.gz 数据库导出。

在 Sequel Pro 中打开数据库

Valet+ 对在 Sequel Pro 中打开数据库提供了第一级支持,Sequel Pro 是一个流行的 Mac MySQL 客户端。

valet db open <name>

如果没有指定名称,它会尝试找到最近的git仓库目录名称。如果找不到,它将打开Sequel Pro而不预选数据库。

valet db open

日志记录

为了轻松阅读php、php-fpm、nginx、mysql、mailhog或redis的日志文件,可以使用以下命令。

valet logs <logname>

子域名

您可以使用以下方式管理当前工作目录的子域名

valet subdomain list
valet subdomain add <subdomain>

例如

valet subdomain add welcome

将创建 welcome.yourproject.test

域名别名/符号链接

显示当前文件夹基于的已注册符号链接。

valet links

添加新别名

valet link <domain>

例如

valet link yourproject2

将创建到当前文件夹的符号链接 yourproject2.test

删除别名

valet unlink <domain>

例如

valet unlink yourproject2

Mailhog

Mailhog用于捕获PHP发送的邮件。您可以通过http://mailhog.test访问面板。

启用Mailhog

valet mailhog on

禁用Mailhog

valet mailhog off

Redis

Redis自动安装并监听默认端口6379。Redis套接字位于/tmp/redis.sock

启用Redis

valet redis on

禁用Redis

valet redis off

Elasticsearch

可以使用以下方式安装Elasticsearch 2.4。

valet elasticsearch install

要卸载

brew uninstall elasticsearch@2.4

在撰写本文时,最新版本的Elasticsearch – 5.6 – 可以使用以下方式安装。

brew install elasticsearch

它将在默认端口9200上运行,并通过http://elasticsearch.test/访问。

Elasticsearch 2.4是默认安装的,因为Magento 2.1不支持Elasticsearch 5

切换Elasticsearch版本

使用以下命令之一切换Elasticsearch版本

valet use elasticsearch|es 2.4
valet use elasticsearch|es 5.6

框架特定的开发工具

Valet+将自动为您安装框架特定的开发工具

Git Tower

Tower中打开当前git项目

valet tower

PhpStorm

PhpStorm中打开当前git项目

valet phpstorm

SourceTree

SourceTree中打开当前git项目

valet sourcetree

VScode

Visual Studio Code中打开当前git项目

valet vscode

在浏览器中打开项目

在您的默认浏览器中打开当前项目

valet open

复制ssh密钥

valet ssh-key

自动配置[测试版]

自动为您所在的项目配置环境。

valet configure

支持的系统

Magento 2

自动为Magento 2配置数据库中的env.phpconfig.php基本URL、SEO URL重写和Elasticsearch配置。

Magento 1

自动为Magento 1配置数据库中的local.xml和基本URL。

使用 TLS 保护网站

默认情况下,Valet通过普通HTTP提供服务。但是,如果您想通过加密的TLS使用HTTP/2提供服务,请使用安全命令。例如,如果您的网站通过Valet在example.test域下提供服务,您应运行以下命令来保护它

valet secure example

要“取消保护”网站并重新回到通过普通HTTP提供服务,请使用unsecure命令。与secure命令一样,此命令接受您想要取消保护的域名

valet unsecure example

日志位置

nginx-error.logphp.logmysql.log位于~/.valet/Log

其他日志位于/usr/local/var/log

PHP.ini位置

PHP.ini的位置是/usr/local/etc/valet-php/VERSION/php.ini

Valet 驱动程序

Valent 使用驱动来处理请求。您可以在此处了解更多关于那些驱动的信息:这里

当使用 Valet 时,驱动会自动使用 APCu 进行缓存以避免每次请求时都进行驱动查找。您可以通过运行 valet which 来重置特定站点的缓存。由于与 PHP-FPM 的兼容性问题,APCu 临时关闭,请参阅 weprovide#49

默认情况下,以下都是已包含的

  • CakePHP 3
  • Craft
  • Drupal
  • Jigsaw
  • Laravel
  • Lumen
  • Magento
  • Magento 2
  • Neos
  • Pimcore 5
  • Shopware 5
  • Slim
  • Statamic
  • 静态 HTML
  • Symfony
  • Typo3
  • WordPress / Bedrock
  • Zend 框架

完整的列表可以在此处找到:这里

自定义 Valet 驱动

您可以编写自己的 Valet "驱动",以服务于在另一个框架或 CMS 上运行的 PHP 应用程序,这些框架或 CMS 不是由 Valet 本地支持的。当您安装 Valet+ 时,会创建一个 ~/.valet/Drivers 目录,其中包含一个 SampleValetDriver.php 文件。此文件包含一个示例驱动实现,以演示如何编写自定义驱动。编写驱动只需您实现三个方法:servesisStaticFilefrontControllerPath

这三个方法都将 $sitePath$siteName$uri 作为它们的参数。其中,$sitePath 是您机器上正在提供服务的网站的完全限定路径,例如 /Users/Lisa/Sites/my-project。其中,$siteName 是域名中的 "主机" 或 "站点名称" 部分(《my-project》)。其中,$uri 是传入请求的 URI(《/foo/bar》)。

一旦您完成了您自定义的 Valet+ 驱动,请使用 FrameworkValetDriver.php 命名约定将其放在 ~/.valet/Drivers 目录中。例如,如果您正在编写自定义的 WordPress Valet 驱动,则您的文件名应为 WordPressValetDriver.php

让我们看一下您的自定义 Valet+ 驱动应实现的每个方法的示例实现。

serves 方法

serves 方法应返回 true,如果您的驱动应处理传入的请求。否则,该方法应返回 false。因此,在此方法中,您应尝试确定给定的 $sitePath 是否包含您尝试提供服务的项目类型。

例如,假设我们正在编写一个 WordPressValetDriver。我们的 serve 方法可能看起来像这样

/**
 * 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;
}

{note} 只有当 serves 方法返回 true 时,才会调用 isStaticFile 方法,并且请求 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

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 的文档可在 Laravel 网站 上找到。

致谢

本项目是 laravel/valet 的分支。感谢所有贡献者,尤其是原作者

Valent+ 作者

联系方式

slack

我们有一个可用的 Slack 工作空间 您可以通过它加入