跳至内容

警告 您正在浏览 Laravel 旧版本的文档。 考虑将你的项目升级到 Laravel 12.x

Laravel 帆

介绍

Laravel 帆 是一个轻量级的命令行界面,用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 为使用 PHP、MySQL 和 Redis 构建 Laravel 应用程序提供了一个很好的起点,而无需先前的 Docker 经验。

从本质上讲,Sail 是 docker-compose.yml 文件和 sail 存储在项目根目录中的脚本。 sail 脚本提供了一个 CLI,其中包含与 Docker 容器交互的便捷方法,这些容器由 docker-compose.yml 文件。

Laravel Sail 支持 macOS、Linux 和 Windows(通过 WSL2 )。

安装和设置

Laravel Sail 会自动安装在所有新的 Laravel 应用程序中,因此您可以立即开始使用它。要了解如何创建新的 Laravel 应用程序,请参阅 Laravel 的 安装文档 适用于您的操作系统。在安装过程中,系统会要求您选择应用程序将与哪些 Sail 支持的服务进行交互。

将 Sail 安装到现有应用程序中

如果您有兴趣将 Sail 与现有的 Laravel 应用程序一起使用,您可以简单地使用 Composer 包管理器安装 Sail。当然,这些步骤假设您现有的本地开发环境允许您安装 Composer 依赖项:

1 作曲家 要求 laravel/sail --dev

安装 Sail 后,你可以运行 sail:install Artisan 命令。此命令将发布 Sail 的 docker-compose.yml 文件到你的应用程序的根目录并修改你的 .env 为了连接到 Docker 服务,我们需要修改文件,其中包含所需的环境变量:

1 php 工匠 帆:安装

最后,您可以启动 Sail。要继续学习如何使用 Sail,请继续阅读本文档的其余部分:

1 ./供应商/bin/sail 向上

如果你正在使用 Docker Desktop for Linux,你应该使用 default 通过执行以下命令进入 Docker 上下文: docker context use default

添加其他服务

如果你想在现有的 Sail 安装中添加其他服务,你可以运行 sail:add Artisan 命令:

1 php 工匠 航行:添加

使用 Devcontainers

如果你想在 开发容器 ,您可以提供 --devcontainer 的选项 sail:install 命令。 --devcontainer 选项将指示 sail:install 命令发布默认值 .devcontainer/devcontainer.json 文件到你的应用程序的根目录:

1 php 工匠 帆:安装 --devcontainer

重建船帆图像

有时您可能希望完全重建 Sail 镜像,以确保镜像的所有包和软件都是最新的。您可以使用 build 命令:

1 码头工人 撰写 向下 -v
2
3 建造 --无缓存
4
5 向上

配置 Shell 别名

默认情况下,Sail 命令使用 vendor/bin/sail 所有新的 Laravel 应用程序都包含以下脚本:

1 ./供应商/bin/sail 向上

然而,你不必反复输入 vendor/bin/sail 要执行 Sail 命令,您可能希望配置一个 shell 别名,以便您更轻松地执行 Sail 的命令:

1 别名 = sh $([ -f sail ] && echo sail || echo vendor/bin/sail)

为了确保它始终可用,你可以将其添加到主目录中的 shell 配置文件中,例如 ~/.zshrc 或者 ~/.bashrc ,然后重新启动你的 shell。

配置完 shell 别名后,只需输入以下命令即可执行 Sail 命令 sail 本文档其余示例将假设您已配置此别名:

1 向上

启航和停航

Laravel Sail 的 docker-compose.yml 文件定义了各种 Docker 容器,它们协同工作以帮助您构建 Laravel 应用程序。每个容器都是 services 您的配置 docker-compose.yml 文件。 laravel.test 容器是为您的应用程序提供服务的主要应用程序容器。

在启动 Sail 之前,您应该确保本地计算机上没有运行其他 Web 服务器或数据库。要启动应用程序中定义的所有 Docker 容器,请执行以下操作: docker-compose.yml 文件,你应该执行 up 命令:

1 向上

要在后台启动所有 Docker 容器,您可以以“分离”模式启动 Sail:

1 向上 -d

一旦应用程序的容器启动了,您就可以通过 Web 浏览器访问该项目: http://本地主机

要停止所有容器,只需按 Control + C 即可停止容器的执行。或者,如果容器在后台运行,您可以使用 stop 命令:

1 停止

执行命令

使用 Laravel Sail 时,您的应用程序在 Docker 容器内执行,并且与您的本地计算机隔离。但是,Sail 提供了一种便捷的方式来针对您的应用程序运行各种命令,例如任意 PHP 命令、Artisan 命令、Composer 命令和 Node/NPM 命令。

阅读 Laravel 文档时,您经常会看到对 Composer、Artisan 和 Node/NPM 命令的引用,但并未引用 Sail。 这些示例假设这些工具已安装在您的本地计算机上。如果您使用 Sail 作为本地 Laravel 开发环境,则应使用 Sail 执行这些命令:

1 # 在本地运行 Artan 命令...
2 php 工匠 队列:工作
3
4 # 在 Laravel Sail 中运行 Artisan 命令……
5 工匠 队列:工作

执行 PHP 命令

可以使用以下方式执行 PHP 命令 php 命令。当然,这些命令将使用为您的应用程序配置的 PHP 版本执行。要了解有关 Laravel Sail 可用的 PHP 版本的更多信息,请参阅 PHP 版本文档 :

1 php - 版本
2
3 php 脚本.php

执行 Composer 命令

可以使用以下方式执行 Composer 命令 composer 命令。Laravel Sail 的应用程序容器包含 Composer 安装:

1 作曲家 要求 laravel/圣所

为现有应用程序安装 Composer 依赖项

如果您与团队一起开发应用程序,您可能不是最初创建 Laravel 应用程序的人。因此,将应用程序的存储库克隆到本地计算机后,不会安装应用程序的任何 Composer 依赖项(包括 Sail)。

您可以通过导航到应用程序的目录并执行以下命令来安装应用程序的依赖项。此命令使用包含 PHP 和 Composer 的小型 Docker 容器来安装应用程序的依赖项:

1 码头工人 跑步 --rm \
2 -在 $(id -在 ):$(身份证 -g \
3 -v $(密码):/var/www/html \
4 -在 /var/www/html \
5 laravelsail/php84-composer:最新 \
6 作曲家 安装 --ignore-platform-reqs

使用时 laravelsail/phpXX-composer 图像,您应该使用与计划用于应用程序的 PHP 版本相同的版本( 80 , 81 , 82 , 83 , 或者 84 )。

执行 Artisan 命令

Laravel Artisan 命令可以使用 artisan 命令:

1 工匠 队列:工作

执行 Node / NPM 命令

可以使用以下方式执行节点命令 node 命令,而 NPM 命令可以使用 npm 命令:

1 节点 - 版本
2
3 npm 跑步 开发

如果你愿意,你可以使用 Yarn 代替 NPM:

1

与数据库交互

MySQL

你可能已经注意到,你的申请 docker-compose.yml 文件包含 MySQL 容器的条目。此容器使用 Docker 卷 这样,即使在停止并重新启动容器时,数据库中存储的数据仍然会保留下来。

此外,MySQL 容器首次启动时,它会为您创建两个数据库。第一个数据库使用您的 DB_DATABASE 环境变量,用于本地开发。第二个是专用的测试数据库,名为 testing 并确保您的测试不会干扰您的开发数据。

启动容器后,您可以通过设置以下方式连接到应用程序中的 MySQL 实例: DB_HOST 应用程序内的环境变量 .env 文件到 mysql

要从本地计算机连接到应用程序的 MySQL 数据库,可以使用图形数据库管理应用程序,例如 表格加 默认情况下,MySQL 数据库可通过以下方式访问: localhost 端口 3306 和访问凭据对应于您的 DB_USERNAMEDB_PASSWORD 环境变量。或者,您可以作为 root 用户,这也利用了你的 DB_PASSWORD 环境变量作为其密码。

MongoDB

如果您选择安装 MongoDB 安装 Sail 时的服务,您的应用程序的 docker-compose.yml 文件包含一个条目 MongoDB Atlas 本地 容器为 MongoDB 文档数据库提供 Atlas 功能,例如 搜索索引 。此容器使用 Docker 卷 这样,即使在停止并重新启动容器时,数据库中存储的数据仍然会保留下来。

启动容器后,您可以通过设置以下方式连接到应用程序中的 MongoDB 实例: MONGODB_URI 应用程序内的环境变量 .env 文件到 mongodb://mongodb:27017 。身份验证默认处于禁用状态,但您可以设置 MONGODB_USERNAMEMONGODB_PASSWORD 在启动之前启用身份验证的环境变量 mongodb 容器。然后,将凭据添加到连接字符串:

1 MONGODB_用户名 =用户
2 MONGODB_密码 =laravel
3 MONGODB_URI =mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@mongodb:27017

为了将 MongoDB 与您的应用程序无缝集成,您可以安装 MongoDB 维护的官方包

要从本地计算机连接到应用程序的 MongoDB 数据库,您可以使用图形界面,例如 罗盘 默认情况下,MongoDB 数据库可通过以下方式访问: localhost 港口 27017

雷迪斯

您的申请 docker-compose.yml 文件还包含一个条目 雷迪斯 容器。此容器使用 Docker 卷 这样,即使停止并重新启动容器,Redis 实例中存储的数据也会保留下来。启动容器后,您可以通过设置 REDIS_HOST 应用程序内的环境变量 .env 文件到 redis

要从本地计算机连接到应用程序的 Redis 数据库,可以使用图形数据库管理应用程序,例如 表格加 默认情况下,Redis 数据库可通过以下方式访问: localhost 端口 6379。

女武神

如果你在安装 Sail 时选择安装 Valkey 服务,你的应用程序的 docker-compose.yml 文件将包含以下条目 女武神 。此容器使用 Docker 卷 这样,即使停止并重新启动容器,Valkey 实例中存储的数据也会保留下来。您可以通过设置 REDIS_HOST 应用程序内的环境变量 .env 文件到 valkey

要从本地计算机连接到应用程序的 Valkey 数据库,您可以使用图形数据库管理应用程序,例如 表格加 默认情况下,Valkey 数据库可通过以下方式访问: localhost 端口 6379。

美丽搜索

如果您选择安装 美丽搜索 安装 Sail 时的服务,您的应用程序的 docker-compose.yml 文件将包含与以下项集成的此强大搜索引擎的条目: Laravel 侦察兵 启动容器后,您可以通过设置以下方式在应用程序中连接到 Meil​​isearch 实例: MEILISEARCH_HOST 环境变量 http://meilisearch:7700

您可以从本地计算机访问 Meil​​isearch 的基于 Web 的管理面板,方法是导航至 http://localhost:7700 在您的网络浏览器中。

类型感应

如果您选择安装 类型感应 安装 Sail 时的服务,您的应用程序的 docker-compose.yml 文件将包含此闪电般快速的开源搜索引擎的条目,该搜索引擎原生集成了 Laravel 侦察兵 。启动容器后,您可以通过设置以下环境变量连接到应用程序中的 Typesense 实例:

1 TYPESENSE_HOST =typesense
2 TYPESENSE_PORT =8108
3 TYPESENSE_协议 =http
4 TYPESENSE_API_密钥 =xyz

您可以从本地计算机通过以下方式访问 Typesense 的 API http://localhost:8108

文件存储

如果您计划在生产环境中运行应用程序时使用 Amazon S3 存储文件,则可能希望安装 MinIO 安装 Sail 时的服务。MinIO 提供了 S3 兼容的 API,您可以使用 Laravel 的 s3 文件存储驱动程序,而无需在生产 S3 环境中创建“测试”存储桶。如果您在安装 Sail 时选择安装 MinIO,MinIO 配置部分将添加到您的应用程序的 docker-compose.yml 文件。

默认情况下,你的应用程序的 filesystems 配置文件已经包含磁盘配置 s3 磁盘。除了使用此磁盘与 Amazon S3 交互之外,您还可以使用它与任何兼容 S3 的文件存储服务(如 MinIO)交互,只需修改控制其配置的相关环境变量即可。例如,当使用 MinIO 时,您的文件系统环境变量配置应定义如下:

1 文件系统磁盘 =s3
2 AWS 访问密钥 ID =航行
3 AWS 秘密访问密钥 =密码
4 AWS_DEFAULT_REGION =美国东部-1
5 AWS_BUCKET =本地
6 AWS_ENDPOINT =http://minio:9000
7 AWS_USE_PATH_STYLE_ENDPOINT =真

为了使 Laravel 的文件系统集成在使用 MinIO 时生成正确的 URL,你应该定义 AWS_URL 环境变量,以便它与应用程序的本地 URL 匹配并在 URL 路径中包含存储桶名称:

1 AWS_URL =http://localhost:9000/local

您可以通过 MinIO 控制台创建存储桶,该控制台位于 http://localhost:8900 .MinIO 控制台的默认用户名是 sail 默认密码是 password

通过生成临时存储 URL temporaryUrl 使用 MinIO 时不支持方法。

运行测试

Laravel 提供了出色的开箱即用测试支持,并且你可以使用 Sail 的 test 命令来运行你的应用程序 功能和单元测试 . Pest / PHPUnit 接受的任何 CLI 选项也可以传递给 test 命令:

1 测试
2
3 测试 - 团体 订单

test 命令相当于运行 test Artisan 命令:

1 工匠 测试

默认情况下,Sail 将创建专用的 testing 数据库,这样测试就不会干扰数据库的当前状态。在默认的 Laravel 安装中,Sail 还将配置您的 phpunit.xml 执行测试时使用此数据库的文件:

1 < 环境 姓名 = 数据库 价值 = 测试 />

Laravel Dusk

Laravel Dusk 提供了一个富有表现力、易于使用的浏览器自动化和测试 API。借助 Sail,您可以运行这些测试,而无需在本地计算机上安装 Selenium 或其他工具。要开始使用,请取消注释应用程序的 Selenium 服务 docker-compose.yml 文件:

1 :
2 图像 : selenium/独立 chrome
3 额外主机 :
4 - host.docker.internal:主机网关
5 :
6 - /dev/shm:/dev/shm
7 网络 :
8 -

接下来,确保 laravel.test 应用程序中的服务 docker-compose.yml 文件有一个 depends_on 进入 selenium :

1 取决于 :
2 - mysql
3 - redis
4 -

最后,你可以启动 Sail 并运行 dusk 命令:

1 黄昏

Apple Silicon 上的 Selenium

如果您的本地机器包含 Apple Silicon 芯片,您的 selenium 服务必须使用 selenium/standalone-chromium 图像:

1 :
2 图像 : selenium/独立铬
3 额外主机 :
4 - host.docker.internal:主机网关
5 :
6 - /dev/shm:/dev/shm
7 网络 :
8 -

预览电子邮件

Laravel Sail 的默认 docker-compose.yml 文件包含以下服务条目: 邮箱 。Mailpit 会在本地开发期间拦截应用程序发送的电子邮件,并提供方便的 Web 界面,以便您可以在浏览器中预览电子邮件消息。使用 Sail 时,Mailpit 的默认主机是 mailpit 可通过端口 1025 访问:

1 MAIL_HOST =邮件坑
2 邮件端口 =1025
3 邮件加密 =空

当 Sail 运行时,您可以通过以下方式访问 Mailpit 网络界面: http://本地主机:8025

容器 CLI

有时你可能希望在应用程序容器内启动 Bash 会话。你可以使用 shell 命令连接到您的应用程序的容器,允许您检查其文件和已安装的服务以及在容器内执行任意 shell 命令:

1
2
3 root shell 層

开始新的 Laravel 修补程序 会话中,您可以执行 tinker 命令:

1 修补

PHP 版本

Sail 目前支持通过 PHP 8.4、8.3、8.2、8.1 或 PHP 8.0 为您的应用程序提供服务。Sail 使用的默认 PHP 版本目前为 PHP 8.4。要更改用于为您的应用程序提供服务的 PHP 版本,您应该更新 build 定义 laravel.test 应用程序中的 docker-compose.yml 文件:

1 # PHP 8.4
2 语境 : ./vendor/laravel/sail/runtimes/8.4
3
4 # PHP 8.3
5 语境 : ./vendor/laravel/sail/runtimes/8.3
6
7 # PHP 8.2
8 语境 : ./vendor/laravel/sail/runtimes/8.2
9
10 # PHP 8.1
11 语境 : ./vendor/laravel/sail/runtimes/8.1
12
13 # PHP 8.0
14 语境 : ./vendor/laravel/sail/runtimes/8.0

此外,您可能希望更新您的 image 名称以反映应用程序使用的 PHP 版本。此选项也在应用程序的 docker-compose.yml 文件:

1 图像 : sail-8.2/app

更新应用程序后 docker-compose.yml 文件,你应该重建你的容器镜像:

1 建造 --无缓存
2
3 向上

节点版本

Sail 默认安装 Node 20。若要更改构建镜像时安装的 Node 版本,您可以更新 build.args 定义 laravel.test 应用程序中的服务 docker-compose.yml 文件:

1 建造 :
2 参数 :
3 环球集团 : ${WWWGROUP}
4 NODE_VERSION : 18

更新应用程序后 docker-compose.yml 文件,你应该重建你的容器镜像:

1 建造 --无缓存
2
3 向上

共享您的网站

有时您可能需要公开分享您的网站,以便为同事预览您的网站或测试与您的应用程序的 webhook 集成。要分享您的网站,您可以使用 share 命令。执行此命令后,您将收到一个随机 laravel-sail.site 您可以用来访问您的应用程序的 URL:

1 分享

通过以下方式共享您的网站 share 命令,你应该使用配置应用程序的受信任代理 trustProxies 应用程序中的中间件方法 bootstrap/app.php 文件。否则,URL 生成助手,例如 urlroute 将无法确定在 URL 生成期间应使用的正确 HTTP 主机:

1 -> withMiddleware 功能 中间件 $中间件 {
2 $中间件 -> 信任代理 (在: * (英文):
3 })

如果您想为共享网站选择子域名,您可以提供 subdomain 执行时选项 share 命令:

1 分享 --子域名=我的帆站点

share 命令由 暴露 ,由 BeyondCode

使用 Xdebug 进行调试

Laravel Sail 的 Docker 配置包括对 调试工具 ,一款流行且功能强大的 PHP 调试器。要启用 Xdebug,请确保您已 发布你的 Sail 配置 。然后,将以下变量添加到应用程序的 .env 配置 Xdebug 的文件:

1 SAIL_XDEBUG_模式 =开发、调试、覆盖

接下来,确保您发布的 php.ini 文件包括以下配置,以便在指定模式下激活 Xdebug:

1 [调试]
2 xdebug.模式 =${XDEBUG_MODE}

修改后 php.ini 文件,记得重建你的 Docker 镜像,以便你对 php.ini 文件生效:

1 建造 --无缓存

Linux 主机 IP 配置

在内部, XDEBUG_CONFIG 环境变量定义为 client_host=host.docker.internal 这样 Xdebug 就可以针对 Mac 和 Windows (WSL2) 进行正确配置。如果您的本地计算机运行的是 Linux,并且您使用的是 Docker 20.10+, host.docker.internal 可用,无需手动配置。

对于 20.10 之前的 Docker 版本, host.docker.internal Linux 不支持,您需要手动定义主机 IP。为此,请通过在容器中定义自定义网络为容器配置静态 IP。 docker-compose.yml 文件:

1 网络 :
2 自定义网络 :
3 伊帕姆 :
4 配置 :
5 - 子网 : 172.20.0.0/16
6
7 服务 :
8 laravel.测试 :
9 网络 :
10 自定义网络 :
11 ipv4_地址 : 172.20.0.2

设置静态 IP 后,在应用程序的 .env 文件中定义 SAIL_XDEBUG_CONFIG 变量:

1 SAIL_XDEBUG_配置 = 客户端主机=172.20.0.2

Xdebug CLI 用法

A sail debug 命令可用于在运行 Artisan 命令时启动调试会话:

1 # 无需 Xdebug 即可运行 Artisan 命令...
2 工匠 迁移
3
4 # 使用 Xdebug 运行 Artisan 命令...
5 调试 迁移

Xdebug 浏览器使用

要在通过 Web 浏览器与应用程序交互时调试应用程序,请按照 Xdebug 提供的说明 从 Web 浏览器启动 Xdebug 会话。

如果你正在使用 PhpStorm,请查看 JetBrains 的文档 零配置调试

Laravel Sail 依赖于 artisan serve 为您的应用程序提供服务。 artisan serve 命令仅接受 XDEBUG_CONFIGXDEBUG_MODE 从 Laravel 版本 8.53.0 开始的变量。旧版本的 Laravel(8.52.0 及以下版本)不支持这些变量,并且不接受调试连接。

定制

由于 Sail 只是 Docker,因此您可以自由地自定义几乎所有内容。要发布 Sail 自己的 Dockerfile,您可以执行 sail:publish 命令:

1 工匠 航行:发布

运行此命令后,Laravel Sail 使用的 Dockerfiles 和其他配置文件将放置在 docker 目录位于应用程序的根目录中。自定义 Sail 安装后,您可能希望更改应用程序容器中的图像名称 docker-compose.yml 文件。完成后,使用 build 命令。如果您使用 Sail 在一台机器上开发多个 Laravel 应用程序,则为应用程序映像分配一个唯一的名称尤为重要:

1 建造 --无缓存