aschmelyun/fleet

在本地环境中运行多个Laravel Sail网站

v1.1.1 2024-06-02 21:10 UTC

This package is auto-updated.

Last update: 2024-09-02 21:41:53 UTC


README

Latest Version on Packagist Total Downloads

轻松在本地同时运行多个具有自定义域名的Laravel Sail应用程序。

注意:这仍然是一个新功能,可能包含错误,如果您看到任何奇怪的问题,请创建一个问题

安装

您可以通过composer安装此包

composer require aschmelyun/fleet --dev

入门指南

导航到您的Laravel应用程序的根目录,如果它正在运行,请停止任何Sail实例。然后,使用以下命令为您的应用程序添加Fleet支持

php artisan fleet:add

在设置过程中,您将被提示输入域名。或者,您也可以通过命令行传递

php artisan fleet:add my-app.localhost

设置完成后,您可以像平时一样启动Sail

./vendor/bin/sail up

并且您的网站将出现在您提供的域中!

注意:如果您选择的域名不以.localhost结尾,您需要将条目添加到您的hosts文件中,以便将流量导向127.0.0.1

本地SSL

Fleet通过mkcert的力量支持自定义域名的本地SSL。在您的机器上安装它后,您可以在使用fleet:add命令时使用--ssl选项来为您的应用程序启用它。

php artisan fleet:add my-app.localhost --ssl

将生成一个本地证书并存储在~/.config/mkcert/certs中。启动您的网站后,您指定的域名将启用https。

端口冲突

在启动多个Laravel Sail应用程序时,很可能会遇到Docker容器之间端口冲突的错误。这是因为每个服务都映射到您的本地机器的一个端口,默认情况下,它们在您的应用程序中是相同的。

为了解决这个问题,请在每个Laravel应用程序中使用.env文件添加不同的转发端口。例如

  • 应用 #1
FORWARD_DB_PORT=3306
FORWARD_REDIS_PORT=6379
  • 应用 #2
FORWARD_DB_PORT=4306
FORWARD_REDIS_PORT=7379

这样,两个应用程序都可以使用Fleet和Sail启动,它们各自服务的端口不会冲突。

额外用法

默认情况下,每次您使用fleet:add时,都会启动一个Docker网络和容器来处理来自您的本地域名(s)的流量。

您可以使用以下命令手动启动它

php artisan fleet:start

如果您希望从应用程序中删除Fleet支持并返回到默认的Docker设置,请运行

php artisan fleet:remove

要停止并删除系统上当前运行的所有Fleet容器和网络,请使用以下命令

php artisan fleet:stop

为什么使用这个?

Laravel Sail使用Docker和Docker Compose来启动容器,为您的应用程序创建本地开发环境。

默认情况下,容器绑定到本地机器的:80端口。启动第二个应用程序会导致端口冲突失败,但您始终可以调整它,以便第二个应用程序在类似:8081的端口上可用。

但这可能有一些意外的后果,并且可能会在两个不同的应用程序之间使用端口号进行通信时变得混乱。

相反,Fleet 提供了一组小的命令,用于修改您的 docker-compose.yml 文件,以支持 Traefik,一个运行在 Docker 容器中的反向代理。

当您将站点添加到 Fleet 时,会在您的应用程序的 Docker Compose 入口中添加一个网络和几个标签,并启动一个主 Traefik 容器来处理所有进入 :80 端口的本地网络流量。

这种配置允许将配置为不同域的 Laravel Sail 应用程序解析到各自的运行容器中。

要深入了解这些组件是如何结合在一起的,请查看我发布的关于使用 Docker Compose 与 Traefik 一起使用的 这个视频

更新日志

有关最近更改的更多信息,请参阅 更新日志

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件