dcnl1980/valet-plus

速度极快的 macOS PHP 开发环境

1.0.29 2019-08-14 10:18 UTC

README

介绍

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

Valet 与 Valet+ 3.0

此 Valet Plus 与最新的 Laravel 6.x|Laravel 7.x 安装版本兼容。

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

本 README 中的一些文档摘自 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 updateHomebrew 更新到最新版本。
  2. 通过 brew tap henkrehorst/php 为 Valet+ 添加 Homebrew PHP tap。
  3. 使用 Homebrew 通过 brew install valet-php@7.4 安装 PHP 7.4。
  4. 使用 Homebrew 通过 brew install composer 安装 Composer。
  5. 使用 Composer 通过 composer global require dcnl1980/valet-plus:dev-master 安装 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 -c1 foobar.test 的命令ping任何 *.test 域名。如果 Valet+ 安装正确,你应该会在 127.0.0.1 上看到这个域名响应。如果不正确,你可能需要重启系统。特别是从 Dinghy(docker)解决方案迁移过来时。

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

ℹ️ 要更新 Valet+ 到最新版本,请在终端使用 composer global require dcnl1980/valet-plus:dev-master 命令。升级后,运行 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
valet use 7.3
valet use 7.4

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 中打开数据库,这是一个流行的 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

自动配置[beta]

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

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 上且不被 Valet 本地支持的 PHP 应用程序。当您安装 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 且请求 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的分支。感谢所有贡献者,尤其是原始作者

Valet+ 作者

联系我们

slack

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