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
码头工人
撰写
向下
-v23
帆
建造
--无缓存45
帆
向上
配置 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
工匠
队列:工作34
#
在 Laravel Sail 中运行 Artisan 命令……5
帆
工匠
队列:工作
执行 PHP 命令
可以使用以下方式执行 PHP 命令
php
命令。当然,这些命令将使用为您的应用程序配置的 PHP 版本执行。要了解有关 Laravel Sail 可用的 PHP 版本的更多信息,请参阅
PHP 版本文档
:
1
帆
php
- 版本23
帆
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
帆
节点
- 版本23
帆
npm
跑步
开发
如果你愿意,你可以使用 Yarn 代替 NPM:
1
帆
纱
与数据库交互
MySQL
你可能已经注意到,你的申请
docker-compose.yml
文件包含 MySQL 容器的条目。此容器使用
Docker 卷
这样,即使在停止并重新启动容器时,数据库中存储的数据仍然会保留下来。
此外,MySQL 容器首次启动时,它会为您创建两个数据库。第一个数据库使用您的
DB_DATABASE
环境变量,用于本地开发。第二个是专用的测试数据库,名为
testing
并确保您的测试不会干扰您的开发数据。
启动容器后,您可以通过设置以下方式连接到应用程序中的 MySQL 实例:
DB_HOST
应用程序内的环境变量
.env
文件到
mysql
。
要从本地计算机连接到应用程序的 MySQL 数据库,可以使用图形数据库管理应用程序,例如
表格加
默认情况下,MySQL 数据库可通过以下方式访问:
localhost
端口 3306 和访问凭据对应于您的
DB_USERNAME
和
DB_PASSWORD
环境变量。或者,您可以作为
root
用户,这也利用了你的
DB_PASSWORD
环境变量作为其密码。
MongoDB
如果您选择安装
MongoDB
安装 Sail 时的服务,您的应用程序的
docker-compose.yml
文件包含一个条目
MongoDB Atlas 本地
容器为 MongoDB 文档数据库提供 Atlas 功能,例如
搜索索引
。此容器使用
Docker 卷
这样,即使在停止并重新启动容器时,数据库中存储的数据仍然会保留下来。
启动容器后,您可以通过设置以下方式连接到应用程序中的 MongoDB 实例:
MONGODB_URI
应用程序内的环境变量
.env
文件到
mongodb://mongodb:27017
。身份验证默认处于禁用状态,但您可以设置
MONGODB_USERNAME
和
MONGODB_PASSWORD
在启动之前启用身份验证的环境变量
mongodb
容器。然后,将凭据添加到连接字符串:
1
MONGODB_用户名
=用户2
MONGODB_密码
=laravel3
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 侦察兵
启动容器后,您可以通过设置以下方式在应用程序中连接到 Meilisearch 实例:
MEILISEARCH_HOST
环境变量
http://meilisearch:7700
。
您可以从本地计算机访问 Meilisearch 的基于 Web 的管理面板,方法是导航至
http://localhost:7700
在您的网络浏览器中。
类型感应
如果您选择安装
类型感应
安装 Sail 时的服务,您的应用程序的
docker-compose.yml
文件将包含此闪电般快速的开源搜索引擎的条目,该搜索引擎原生集成了
Laravel 侦察兵
。启动容器后,您可以通过设置以下环境变量连接到应用程序中的 Typesense 实例:
1
TYPESENSE_HOST
=typesense2
TYPESENSE_PORT
=81083
TYPESENSE_协议
=http4
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
文件系统磁盘
=s32
AWS 访问密钥 ID
=航行3
AWS 秘密访问密钥
=密码4
AWS_DEFAULT_REGION
=美国东部-15
AWS_BUCKET
=本地6
AWS_ENDPOINT
=http://minio:90007
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
帆
测试23
帆
测试
- 团体
订单
帆
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
-
mysql3
-
redis4
-
硒
最后,你可以启动 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
邮件端口
=10253
邮件加密
=空
当 Sail 运行时,您可以通过以下方式访问 Mailpit 网络界面: http://本地主机:8025
容器 CLI
有时你可能希望在应用程序容器内启动 Bash 会话。你可以使用
shell
命令连接到您的应用程序的容器,允许您检查其文件和已安装的服务以及在容器内执行任意 shell 命令:
1
帆
壳23
帆
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.42
语境
:
./vendor/laravel/sail/runtimes/8.434
#
PHP 8.35
语境
:
./vendor/laravel/sail/runtimes/8.367
#
PHP 8.28
语境
:
./vendor/laravel/sail/runtimes/8.2910
#
PHP 8.111
语境
:
./vendor/laravel/sail/runtimes/8.11213
#
PHP 8.014
语境
:
./vendor/laravel/sail/runtimes/8.0
此外,您可能希望更新您的
image
名称以反映应用程序使用的 PHP 版本。此选项也在应用程序的
docker-compose.yml
文件:
1
图像
:
sail-8.2/app
更新应用程序后
docker-compose.yml
文件,你应该重建你的容器镜像:
1
帆
建造
--无缓存23
帆
向上
节点版本
Sail 默认安装 Node 20。若要更改构建镜像时安装的 Node 版本,您可以更新
build.args
定义
laravel.test
应用程序中的服务
docker-compose.yml
文件:
1
建造
:2
参数
:3
环球集团
:
‘
${WWWGROUP}
‘4
NODE_VERSION
:
‘
18
‘
更新应用程序后
docker-compose.yml
文件,你应该重建你的容器镜像:
1
帆
建造
--无缓存23
帆
向上
共享您的网站
有时您可能需要公开分享您的网站,以便为同事预览您的网站或测试与您的应用程序的 webhook 集成。要分享您的网站,您可以使用
share
命令。执行此命令后,您将收到一个随机
laravel-sail.site
您可以用来访问您的应用程序的 URL:
1
帆
分享
通过以下方式共享您的网站
share
命令,你应该使用配置应用程序的受信任代理
trustProxies
应用程序中的中间件方法
bootstrap/app.php
文件。否则,URL 生成助手,例如
url
和
route
将无法确定在 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/1667
服务
: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
帆
工匠
迁移34
#
使用 Xdebug 运行 Artisan 命令...5
帆
调试
迁移
Xdebug 浏览器使用
要在通过 Web 浏览器与应用程序交互时调试应用程序,请按照 Xdebug 提供的说明 从 Web 浏览器启动 Xdebug 会话。
如果你正在使用 PhpStorm,请查看 JetBrains 的文档 零配置调试 。
Laravel Sail 依赖于
artisan serve
为您的应用程序提供服务。
artisan serve
命令仅接受
XDEBUG_CONFIG
和
XDEBUG_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
帆
建造
--无缓存