Sail 开发环境

未匹配的标注
本文档最新版为 10.x,旧版本可能放弃维护,推荐阅读最新版!

Laravel Sail

简介

Laravel Sail 是一个 Laravel 默认 Docker 开发环境进行交互的轻量级命令行界面。Sail 为使用 PHP、MySQL、Redis 构建 Laravel 应用提供了很好的起点,不需要有任何 Docker 经验就可以轻松上手。

Sail 的核心是在 Laravel 项目根目录下提供 docker-compose.yml 文件(Docker Compose 编排配置文件)以及一个 sail 脚本文件,该脚本文件提供了与 docker-compose.yml 中定义的 Docker 容器进行交互的 CLI 方法。

Laravel Sail 目前支持 macOS、Linux 和 Windows(基于 WSL2)操作系统。

安装 & 设置

Laravel Sail 会随着新项目一起自动安装,所以开箱即用的,关于如何创建新的 Laravel 应用,可以参考前面的 安裝文档,在安装过程中,系统将要求您选择您的应用程序将与之交互的Sail支持服务。

在已有项目中安装 Sail 扩展

如果你需要将 Sail 和现有的 Laravel 应用一起使用,可以通过 Composer 包管理器来简单的安装 Sail。当然,下面所说的步骤是在假定你当前环境中允许使用 Composer 安装依赖包的。

composer require laravel/sail --dev

在你安装了 Sail 扩展包以后, 你可以运行 sail:install 这个 Artisan 命令. 此命令会将 Sail 的 docker-compose.yml 文件发布到应用程序的根目录下:

php artisan sail:install

最后,你可以通过 ./vendor/bin/sail up 启动 Sail 。如果还想学习更多 Sail 的高级用法可继续阅读本文档的其余内容。

配置 Bash 别名

默认情况下, 在一个全新的 Laravel 项目中需要调用 Sail 命令都必须要附带上 /vendor/bin/sail

./vendor/bin/sail up

但是,我们更希望通过配置 Bash 别名来更方便的执行 Sail 命令。而不是重复键入
vendor/bin/sail 来执行 Sail 相关命令:

alias sail='bash vendor/bin/sail'

一旦配置了 Bash 别名,就可以简单的通过 sail 来执行 Sail 命令。本文档的其余部分都将假定您已配置了此别名:

sail up

启动 & 停止 Sail

在 Laravel Sail 的 docker-compose.yml 文件中引入了很多的 Docker 容器。通过这些容器的协同工作可以帮助构建一个 Laravel 应用程序。这里的每一个容器都是通过 docker-compose.yml 文件中的服务条目配置出来的。其中 laravel.test 容器是为你的应用程序提供服务的主要容器。

执行 Composer 命令

可以使用 “composer” 命令来执行 Composer 命令。 Laravel Sail 的应用程序容器包括 Composer 2.x 安装:

sail composer require laravel/sanctum

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

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

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

docker run --rm \
    -v $(pwd):/opt \
    -w /opt \
    laravelsail/php80-composer:latest \
    composer install

执行 Artisan 命令

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

sail artisan queue:work

执行 Node / NPM 命名

可以使用node 命令来执行 Node 命令,而可以使用npm 命令来执行 NPM 命令:

sail node --version

sail npm run prod

与数据库交互

MySQL

您可能已经注意到,应用程序的docker-compose.yml文件包含一个MySQL容器的条目。此容器使用Docker volume,以便即使在停止和重新启动容器时也可以持久存储数据库中存储的数据。另外,当MySQL容器启动时,它将确保存在一个名称与您的 DB_DATABASE 环境变量的值匹配的数据库。

MySQL 容器启动后,就可以在 .env 中配置 Laravel 项目的环境变量 DB_HOST 值为 mysql 建立与数据库容器的连接了。

如果要从本地宿主机连接到 MySQL 数据库,可以使用图形化数据管理工具,比如 TablePlus。默认情况下,可以直接通过 localhost3306 端口连接到 MySQL 数据库容器。

Redis

docker-compose.yml文件中也编排了Redis 容器. 跟Mysql一样 也使用了Docker 目录 对 Redis 数据进行持久化存储。
确保即便 Redis 容器停止和重启,数据也不会被销毁。在应用容器启动后,会基于 .env 中配置的 REDIS_HOST 环境变量匹配的 redis 连接与 Redis 容器建立连接。

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

MeiliSearch

如果在安装 Laravel Sail的时候选择安装了MeiliSearch搜索引擎, docker-compose.yml 会编排一个MeiliSearch的容器,这个与Laravel Scout是兼容使用。
在应用容器启动后, 会基于 .env 中配置的MEILISEARCH_HOST 环境变量 匹配的 MeiliSearch 连接 与 MeiliSearch 容器建立连接 可以通过 http://localhost:7700 来访问 meilisearch实例.

在本机环境中,你就可以通过在浏览器中输入 localhost:7700 来访问 MeiliSearch 提供的 WEB 管理面板。

运行测试

Laravel 开箱提供了非常出色的测试支持,你可以使用 Sail 提供的测试命令 test 在宿主机执行运行在 Docker 容器中的项目代码功能和单元测试,命令开启测试:

sail test

sail test --group orders

当然,你也可以通过 Artisan 命令进行测试:

sail artisan test

Laravel Dusk

Laravel Dusk 提供了非常优雅的、易于使用的浏览器自动化测试 API。使用 Sail 的话,基于 Dusk 进行浏览器测试更加方便了,不需要在本地宿主机安装 Selenium 或者任何其他工具,在 docker-compose.yml 文件中取消 Selenium 服务注释:

selenium:
    image: 'selenium/standalone-chrome'
    volumes:
        - '/dev/shm:/dev/shm'
    networks:
        - sail

然后, 确保 docker-compose.yml 文件中的 laravel.test 服务 depends_on 配置项中包含 selenium

depends_on:
    - mysql
    - redis
    - selenium

最后就可以通过 Sail dusk 命令运行 Dusk 测试用例了

sail dusk

预览邮件

Laravel Sail 默认的 docker-compose.yml 文件还编排了MailHog 的容器 . 该服务用于在本地开发期间拦截应用发送的所有邮件并提供一个 Web 界面在浏览器中预览这些邮件信息,方便测试和调试。使用时,MailHog的默认主机为mailhog,默认的 SMTP 端口号是 1025

MAIL_HOST=mailhog
MAIL_PORT=1025

当 Sail 运行时,可以通过 localhost:8025 访问 MailHog Web 界面。

容器 CLI

有时候,可能想要在应用容器中开启一个 Bash 会话,这可以通过调用 Sail 提供的 shell 命令连接到应用 Docker 容器来实现:

sail shell

这样一来,就可以和容器中所有文件和已安装服务进行交互了。

还可以通过 tinker 命令开启一个新的 Laravel Tinker 会话:

sail tinker

PHP 版本

Sail 目前支持 PHP 8.0PHP 7.4 版本,要切换 PHP 版本,需要更新 docker-compose.yml 中的 laravel.test 容器 build 定义:

# PHP 8.0
context: ./vendor/laravel/sail/runtimes/8.0

# PHP 7.4
context: ./vendor/laravel/sail/runtimes/7.4

另外, 如果想要修改应用容器使用的 PHP 版本镜像,需要更新 docker-compose.yml 中对应的 image 名称:

image: sail-8.0/app

更新过 docker-compose.yml 文件后,需要 重构容器镜像 让修改生效:

sail build --no-cache

sail up

公开站点

有时候可能想要将本地站点公开,以便让同事可以预览或者测试外部接口调用。要公开站点,可以使用 share 命令,运行该命令后,会获取到一个随机的用于访问站点的 laravel-sail.site URL

sail share

如果想要设置共享站点的子域名,可以在执行 share 命令时候加一个 subdomain 选项:

sail share --subdomain=my-sail-site

技巧:share 命令是基于 Expose驱动的, 这是一个由 BeyondCode开源的基于 PHP 实现的隧道服务。

自定义

由于 Sail 本质上是基于 Docker 容器的,所以可以对其所有行为特性进行自定义。要自定义 Sail 的话,需要先通过 sail:publish 命令发布 Sail 的 Dockerfile:

sail artisan sail:publish

上面命令将会 将 Sail 自带的所有 Dockerfile 和其他配置文件发布到项目根目录下的 docker 子目录中,你可以通过修改这些文件自定义 Sail,修改完成后,需要使用 build 命令重建应用容器让所有更改生效:

sail build --no-cache

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel/8.5/sai...

译文地址:https://learnku.com/docs/laravel/8.5/sai...

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:12
讨论数量: 4
发起讨论 只看当前版本


UpGod
PHP环境都没有你让我安装laravel/sail?先有鸡还是先有蛋?
0 个点赞 | 24 个回复 | 分享 | 课程版本 8.5
晓飞
Laravel6无法安装sail吗?
0 个点赞 | 1 个回复 | 问答 | 课程版本 8.x
虢國技醬
服务使用不同端口
0 个点赞 | 0 个回复 | 分享 | 课程版本 9.x