展開文件目錄

Laravel Valet

簡介

[!NOTE]
在 macOS 或 Windows 上尋找更簡單的方式來開發 Laravel 應用程式嗎?請查看 Laravel Herd。Herd 包含您開始使用 Laravel 開發所需的一切,包括 Valet、PHP 和 Composer。

Laravel Valet 是針對 macOS 極簡主義者的開發環境。Laravel Valet 配置您的 Mac,在機器啟動時始終在背景運行 Nginx。然後,使用 DnsMasq,Valet 將 *.test 域上的所有請求代理到安裝在本地機器上的網站。

換句話說,Valet 是一個極速的 Laravel 開發環境,大約使用 7 MB 的 RAM。Valet 並非 SailHomestead 的完全替代品,但如果您想要靈活的基本功能、極速度或在具有有限 RAM 的機器上工作,Valet 提供了一個很好的選擇。

開箱即用,Valet 支援包括但不限於:

然而,您可以使用您自己的自定義驅動程式來擴展 Valet。

安裝

[!WARNING]
Valet 需要 macOS 和Homebrew。在安裝之前,您應該確保沒有其他程序(如 Apache 或 Nginx)綁定到您本機的 80 端口。

要開始,您首先需要確保使用 update 命令更新 Homebrew:

brew update

接下來,您應該使用 Homebrew 安裝 PHP:

brew install php

安裝 PHP 後,您可以開始安裝Composer 套件管理器。此外,您應該確保 $HOME/.composer/vendor/bin 目錄在系統的 "PATH" 中。安裝 Composer 後,您可以將 Laravel Valet 安裝為全局 Composer 套件:

composer global require laravel/valet

最後,您可以執行 Valet 的 install 命令。這將配置並安裝 Valet 和 DnsMasq。此外,Valet 依賴的守護程序將配置為在系統啟動時啟動:

valet install

安裝完成後,您可以在終端機上嘗試使用命令(例如 ping foobar.test)對任何 *.test 域名進行 ping 測試。如果 Valet 安裝正確,您應該看到此域名在 127.0.0.1 上回應。

Valet 將在每次開機時自動啟動其所需的服務。

PHP 版本

[!NOTE]
您可以通過 isolate command 指示 Valet 使用每個站點的 PHP 版本,而不是修改全域 PHP 版本。

Valet 允許您使用 valet use php@version 命令切換 PHP 版本。如果指定的 PHP 版本尚未安裝,Valet 將透過 Homebrew 安裝該版本:

valet use php@8.2

valet use php

您也可以在項目根目錄中創建一個 .valetrc 檔案。.valetrc 檔案應包含站點應使用的 PHP 版本:

php=php@8.2

創建此檔案後,您只需執行 valet use 命令,該命令將通過讀取檔案來確定站點首選的 PHP 版本。

[!WARNING]
Valet 一次僅提供一個 PHP 版本,即使您安裝了多個 PHP 版本。

資料庫

如果您的應用程式需要資料庫,請查看 DBngin,它提供一個免費的全合一資料庫管理工具,包括 MySQL、PostgreSQL 和 Redis。安裝完 DBngin 後,您可以使用 root 用戶名和空字串密碼在 127.0.0.1 上連接到您的資料庫。

重設您的安裝

如果您在使 Valet 安裝正常運行時遇到問題,執行 composer global require laravel/valet 命令,然後執行 valet install 將重設您的安裝,並可以解決各種問題。在罕見情況下,可能需要通過執行 valet uninstall --force 後跟 valet install 來進行 "硬重設" Valet。

升級 Valet

您可以在終端機中執行 composer global require laravel/valet 命令來更新您的 Valet 安裝。升級後,建議執行 valet install 命令,以便 Valet 可以根據需要對您的組態檔進行額外的升級。

升級到 Valet 4

如果您從 Valet 3 升級到 Valet 4,請按照以下步驟正確升級您的 Valet 安裝:

  • 如果您已添加 .valetphprc 檔案以自定義您網站的 PHP 版本,請將每個 .valetphprc 檔案重新命名為 .valetrc。然後,在 .valetrc 檔案的現有內容前加上 php=
  • 更新任何自定義驅動程式以符合新驅動程式系統的命名空間、擴展、型別提示和返回型別提示。您可以參考 Valet 的 SampleValetDriver 作為範例。
  • 如果您使用 PHP 7.1 - 7.4 來提供您的網站,請確保仍然使用 Homebrew 安裝 PHP 的 8.0 或更高版本,因為 Valet 將使用此版本,即使它不是您的主要連結版本,來執行一些腳本。

提供網站

安裝 Valet 後,您可以開始提供 Laravel 應用程式。Valet 提供兩個命令來幫助您提供應用程式:parklink

park 命令

park 命令在您的機器上註冊包含應用程式的目錄。一旦使用 Valet 將目錄「停放」,該目錄中的所有目錄將可以在您的瀏覽器中訪問,網址為 http://<directory-name>.test

cd ~/Sites

valet park

就是這樣。現在,在您的「停放」目錄中創建的任何應用程式將自動使用 http://<directory-name>.test 慣例提供。因此,如果您的停放目錄包含名為「laravel」的目錄,該目錄中的應用程式將可以在 http://laravel.test 訪問。此外,Valet 還自動允許您使用通配符子域名訪問該網站(http://foo.laravel.test)。

link 命令

link 命令也可用於提供您的 Laravel 應用程式。如果您只想在目錄中提供單個站點而不是整個目錄,這個命令很有用:

cd ~/Sites/laravel

valet link

一旦應用程式使用 link 指令連結到 Valet,您可以使用其目錄名稱來存取該應用程式。因此,在上面的示例中連結的網站可以在 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 以提供一個「預設」網站,而不是在訪問未知的 test 域時顯示 404。為了實現這一點,您可以將 ~/.config/valet/config.json 配置文件中添加一個 default 選項,其中包含應該作為預設網站的路徑:

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

### 每個網站的 PHP 版本

預設情況下,Valet 使用全域 PHP 安裝來提供您的網站。但是,如果您需要在各個網站之間支援多個 PHP 版本,您可以使用 `isolate` 指令來指定特定網站應該使用哪個 PHP 版本。`isolate` 指令會配置 Valet 使用指定的 PHP 版本來提供位於您目前工作目錄中的網站:

```shell
cd ~/Sites/example-site

valet isolate php@8.0

如果您的網站名稱與包含它的目錄名稱不符,您可以使用 --site 選項來指定網站名稱:

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

為了方便起見,您可以使用 valet phpcomposerwhich-php 指令來代理根據網站配置的 PHP 版本調用適當的 PHP CLI 或工具:

valet php
valet composer
valet which-php

您可以執行 isolated 指令來顯示所有已隔離網站及其 PHP 版本的清單:

valet isolated

要將網站恢復為 Valet 全域安裝的 PHP 版本,您可以從網站的根目錄調用 unisolate 指令:

valet unisolate

分享網站

Valet 包含一個命令來與世界分享您的本地網站,提供了一種在移動設備上測試您的網站或與團隊成員和客戶分享的簡單方法。

Valet 預設支援通過 ngrok 或 Expose 來分享您的網站。在分享網站之前,您應該使用 share-tool 指令更新您的 Valet 配置,指定 ngrokexpose

valet share-tool ngrok

如果您選擇一個工具並且沒有通過 Homebrew(對於 ngrok)或 Composer(對於 Expose)安裝它,Valet 將自動提示您安裝它。當然,這兩個工具都需要您在開始分享網站之前驗證您的 ngrok 或 Expose 帳戶。

要分享一個網站,請在終端中導航到網站的目錄並運行 Valet 的 share 指令。一個可公開訪問的 URL 將被放入您的剪貼板,準備直接粘貼到您的瀏覽器中或與您的團隊分享:

cd ~/Sites/laravel

valet share

要停止分享您的網站,您可以按 Control + C

[!WARNING]
如果您使用自定義 DNS 伺服器(如 1.1.1.1),ngrok 分享可能無法正常工作。如果這是您的情況,請在您的 Mac 系統設定中打開網路設定,進入進階設定,然後轉到 DNS 標籤並將 127.0.0.1 添加為您的第一個 DNS 伺服器。

透過 Ngrok 分享網站

使用 ngrok 分享您的網站需要您創建一個 ngrok 帳戶設置驗證令牌。一旦您有了驗證令牌,您可以使用該令牌更新您的 Valet 配置:

valet set-ngrok-token YOUR_TOKEN_HERE

[!NOTE]
您可以將額外的 ngrok 參數傳遞給分享命令,例如 valet share --region=eu。有關更多信息,請參考ngrok 文件

透過 Expose 分享網站

使用 Expose 分享您的網站需要您創建一個 Expose 帳戶通過您的驗證令牌與 Expose 進行身份驗證

您可以查閱Expose 文件以獲取有關其支持的額外命令行參數的信息。

在本地網絡上分享網站

Valet 默認將傳入流量限制為內部的 127.0.0.1 介面,以防止您的開發機器受到來自互聯網的安全風險。

如果您希望允許本地網絡上的其他設備通過您的機器的 IP 地址(例如:192.168.1.10/application.test)訪問您機器上的 Valet 網站,您需要手動編輯該網站的適當 Nginx 配置文件,以刪除 listen 指令上的限制。您應該刪除端口 80 和 443 的 listen 指令上的 127.0.0.1: 前綴。

如果您尚未在專案上執行 valet secure,您可以通過編輯 /usr/local/etc/nginx/valet/valet.conf 檔案來開放所有非 HTTPS 網站的網路存取。但是,如果您正在透過 HTTPS 提供專案網站(已經對該網站執行 valet secure),則應編輯 ~/.config/valet/Nginx/app-name.test 檔案。

更新 Nginx 組態後,執行 valet restart 指令以應用組態變更。

網站特定環境變數

某些使用其他框架的應用程式可能依賴於伺服器環境變數,但並未提供在專案中配置這些變數的方式。Valet 允許您透過在專案根目錄中添加 .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 網域代理到本機上的另一個服務。例如,您可能偶爾需要在運行 Docker 中運行另一個獨立網站時運行 Valet;但是,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 "driver" 來提供在 Valet 不原生支援的框架或 CMS 上運行的 PHP 應用程式。安裝 Valet 時,將建立一個包含 SampleValetDriver.php 檔案的 ~/.config/valet/Drivers 目錄。此檔案包含一個示範驅動程式實作,以示範如何編寫自訂驅動程式。編寫驅動程式只需要實現三個方法:servesisStaticFilefrontControllerPath

所有三個方法都接收$sitePath$siteName$uri值作為引數。$sitePath是您機器上正在提供服務的站點的完全合格路徑,例如/Users/Lisa/Sites/my-project$siteName是域名的“主機”/“站點名稱”部分(my-project)。$uri是傳入的請求 URI(/foo/bar)。

完成自定義 Valet 驅動程式後,將其放置在~/.config/valet/Drivers目錄中,並使用FrameworkValetDriver.php命名慣例。例如,如果您正在為 WordPress 編寫自定義 valet 驅動程式,則應將檔案命名為WordPressValetDriver.php

讓我們來看看您的自定義 Valet 驅動程式應該實現每個方法的範例。

serves 方法

如果您的驅動程式應該處理傳入請求,serves 方法應該返回true。否則,該方法應返回false。因此,在此方法中,您應試圖確定給定的$sitePath是否包含您要提供服務的類型的專案。

例如,假設我們正在編寫一個WordPressValetDriver。我們的serves方法可能如下所示:

/**
 * Determine if the driver serves the request.
 */
public function serves(string $sitePath, string $siteName, string $uri): bool
{
    return is_dir($sitePath.'/wp-admin');
}

isStaticFile 方法

isStaticFile 方法應確定傳入請求是否是用於“靜態”檔案,例如圖像或樣式表。如果檔案是靜態的,該方法應返回磁碟上靜態檔案的完全合格路徑。如果傳入請求不是用於靜態檔案,該方法應返回false

/**
 * Determine if the incoming request is for a static file.
 *
 * @return string|false
 */
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
    if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
        return $staticFilePath;
    }

    return false;
}

[!WARNING]
如果serves方法返回true且請求 URI不是/,則只會調用isStaticFile方法。

frontControllerPath 方法

frontControllerPath 方法應返回應用程式的“前端控制器”的完全合格路徑,通常是一個“index.php”檔案或等效檔案:

/**
 * Get the fully resolved path to the application's front controller.
 */
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
    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.
     */
    public function serves(string $sitePath, string $siteName, string $uri): bool
    {
        return true;
    }

    /**
     * Get the fully resolved path to the application's front controller.
     */
    public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
    {
        return $sitePath.'/public_html/index.php';
    }
}

其他 Valet 指令

| 指令 | 說明 | | --- | --- | | `valet list` | 顯示所有 Valet 指令的列表。 | | `valet diagnose` | 輸出診斷信息以幫助調試 Valet。 | | `valet directory-listing` | 確定目錄列表行為。默認為 "off",對目錄渲染 404 頁面。 | | `valet forget` | 從 "parked" 目錄運行此指令以將其從停放目錄列表中刪除。 | | `valet log` | 查看由 Valet 服務寫入的日誌列表。 | | `valet paths` | 查看所有您的 "parked" 路徑。 | | `valet restart` | 重新啟動 Valet 守護程序。 | | `valet start` | 啟動 Valet 守護程序。 | | `valet stop` | 停止 Valet 守護程序。 | | `valet trust` | 為 Brew 和 Valet 添加 sudoers 檔案,以允許運行 Valet 指令而無需提示輸入密碼。 | | `valet uninstall` | 卸載 Valet:顯示手動卸載的說明。傳遞 `--force` 選項以強制刪除 Valet 的所有資源。 |

Valet 目錄和檔案

在疑難排解 Valet 環境問題時,您可能會發現以下目錄和檔案信息有所幫助:

~/.config/valet

包含所有 Valet 的組態設定。您可能希望維護此目錄的備份。

~/.config/valet/dnsmasq.d/

此目錄包含 DNSMasq 的組態設定。

~/.config/valet/Drivers/

此目錄包含 Valet 的驅動程式。驅動程式決定特定框架 / CMS 如何提供服務。

~/.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

這個目錄包含各種 PHP 組態設定的 *.ini 檔案。

/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 開始,預設限制存取某些檔案和目錄。這些限制包括桌面、文件和下載目錄。此外,網路卷和可移動卷的存取也受限。因此,Valet 建議您的網站資料夾位於這些受保護位置之外。

但是,如果您希望從其中一個位置提供網站,您需要給予 Nginx「完整磁碟存取權限」。否則,您可能會遇到來自 Nginx 的伺服器錯誤或其他不可預測的行為,尤其是在提供靜態資源時。通常,macOS 會自動提示您授予 Nginx 對這些位置的完整存取權限。或者,您可以透過 系統偏好設定 > 安全性與隱私 > 隱私,並選擇 完整磁碟存取權限 來手動執行。接著,在主視窗格中啟用任何 nginx 項目。

I'm sorry, but I need the Markdown content that you want me to translate into traditional Chinese. Please paste the Markdown content here so that I can proceed with the translation.