xama5/valet-neutral

针对Linux和MacOS的闪电般的PHP开发环境

v1.0.0-rc.1 2019-10-12 19:02 UTC

This package is auto-updated.

Last update: 2024-09-21 00:14:38 UTC


README

介绍

Valet Neutral(或ValetN)是针对MacOS和Linux的开发环境。无需Vagrant、Docker,无需/etc/hosts文件。

像瑞士一样中立,且源自瑞士。(几乎是两全其美)

ValetN与Valet+的比较

又一个Valet?是的!官方的Valet和Valet+是为MacOS开发的,两者都缺乏对Linux的官方支持。

是时候引入一些中立性了。本项目支持Linux和MacOS,从上游项目中拉取更改,使它们也能在Linux上运行。这意味着,您可以在任何系统上使用这个相同的包,并且它将按预期工作。根据您的操作系统,您可以享受Valet+提供的几乎所有功能。

虽然存在一个针对Linux的不官方Valet分支,但它不包含Valet+的功能,并且也仅适用于特定的操作系统。在我看来,它还对系统做了太多的更改,如果您决定与Valet分开,会留下大量遗留文件,造成巨大的配置混乱。

Valet Neutral尽可能少地更改您的系统。它几乎完全与您的系统隔离,同时遵循Valet的主要理念!

请注意,此包还旨在替换Valet/Valet+,并也使用valet命令。Valet Neutral和Valet+的文档几乎相同。

Valet与Valet+的比较

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

本readme中的部分文档来自Valet网站,并提供在此以方便阅读,以便您可以了解所有提供的功能。原始文档可以在此处找到:https://laravel.net.cn/docs/valet

由于Valet+旨在替换Valet,它仍然使用相同的valet命令行名称。其界面中任何更改的文档如下。

功能

ValetN配置您的系统,在启动系统时始终在后台运行Nginx。然后,使用DnsMasq,ValetN将所有指向本地机上安装的站点的*.test域的请求进行代理。

换句话说,这是一个闪电般的开发环境。ValetN提供了一种很好的替代方案,如果您想灵活地使用基本功能或喜欢极快的速度。

与Valet的区别

以下是与原始Valet的一些关键区别

  • PHP版本切换
  • Xdebug(开/关模式)
  • PHP扩展(mcrypt,intl,opcache)
  • 使用opcache优化的PHP配置
  • MySQL(带有优化配置)
  • Redis
  • Elasticsearch(可选)
  • 以下列出了更多功能...

目录

安装

⚠️ ValetN 需要 Homebrew,适用于 macOS 和 Linux。 (是的,现在也支持 Linux!) 在安装之前,您应该确保没有其他程序(如 Apache 或 Nginx)正在绑定您本地机器的端口 80。同时,请确保您没有占用 DNS 端口的本地 DNS 服务器。

  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 xama5/valet-neutral 安装 ValetN。
  6. 根据您的 shell(echo $SHELL)将 export PATH="$PATH:$HOME/.composer/vendor/bin" 添加到 .bash_profile(对于 bash)或 .zshrc(对于 zsh)。
  7. 运行 valet fix 命令。这将检查阻止 Valet+ 安装的常见问题。
  8. 运行 valet install 命令。这将配置和安装 ValetN 和 DnsMasq,并将 Valet 的守护进程注册为在系统启动时启动。
  9. 安装 ValetN 后,尝试在终端上使用如 ping -c1 foobar.test 的命令ping您的任何 *.test 域名。如果 ValetN 安装正确,您应该在 127.0.0.1 上看到此域名响应。如果没有,您可能需要重新启动系统。特别是从 Dinghy(docker)解决方案转换时。

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

ℹ️ 要更新 ValetN 到最新版本,请在终端中使用 composer global require xama5/valet-neutral 命令。升级后,运行 valet install 命令是良好的实践,以便 ValetN 在必要时对您的配置文件进行额外升级。

服务站点

安装 ValetN 后,您即可开始托管站点。ValetN 提供了一个命令来帮助您托管站点: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,您应该看到 ValetN 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 按钮。

xdebug-phpstorm

然后安装 Xdebug helper 以供 Chrome 使用,并在查看页面时启用它。

Ioncube

启用 Ioncube

valet ioncube on

禁用 Ioncube

valet ioncube off

数据库

ValentN 自动安装 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> 自动生成自定义数据库的文件名。

所有数据库导出均经过 gzip 压缩。

导入数据库

带有进度条的导入数据库

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

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

您可以直接导入 .sql 文件以及 gzip 压缩的 .sql.gz 数据库导出。

在Sequel Pro中打开数据库

Valent+ 首选支持在 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

框架特定开发工具

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

Git Tower(仅限 macOS)

Tower 中打开当前 git 项目

valet tower

PhpStorm

PhpStorm 中打开当前 git 项目

valet phpstorm

SourceTree(仅限 macOS)

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 提供站点。但是,如果您希望使用 HTTP/2 通过加密的 TLS 提供站点,请使用安全命令。例如,如果您的站点正在 example.test 域名上由 Valet 提供,您应运行以下命令以对其进行加密

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 使用驱动程序来处理请求。您可以在此处了解更多关于那些信息

当使用 ValetN 驱动程序时,会自动使用 APCu 缓存以避免在每次请求时都进行驱动程序查找。您可以通过运行 valet which 来为特定站点重置缓存。由于与 PHP-FPM 的兼容性问题,APCu 临时关闭,请参阅 weprovide/valet-plus#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 应用程序编写自己的 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 且请求 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 的文档可以在 Laravel 网站上找到

致谢

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

还要感谢 Valet+ 及其贡献者。

ValetN 作者