neodork/valet-plus

闪电般的快速 macOS PHP 开发环境

dev-master 2020-02-02 13:48 UTC

README

介绍

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

Valet 与 Valet+ 的比较

Valet+ 是 Laravel Valet 的第三方分支,Laravel Valet 的网址为 Laravel Valet。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 henkrehorst/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. export PATH="$PATH:$HOME/.composer/vendor/bin" 添加到 .bash_profile(对于 bash)或 .zshrc(对于 zsh),具体取决于您的 shell(echo $SHELL
  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

就是这样。现在,您在“已停靠”目录内创建的任何项目都将自动使用 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+ 对在 Mac 上流行的 MySQL 客户端 Sequel Pro 打开数据库提供一流支持。Sequel Pro

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 use elasticsearch|es 6.8

框架特定的开发工具

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 提供网站,请使用 secure 命令。例如,如果您的网站通过 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 Framework

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

自定义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+驱动程序,请将其放置在~/.valet/Drivers目录中,使用FrameworkValetDriver.php命名约定。例如,如果您正在编写一个针对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并且请求URI不是/时,才会调用isStaticFile方法。

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 工作空间 ,您可以加入