fly-apps / dockerfile-laravel
Dockerfile 生成器和 Fly.io 辅助工具。
Requires (Dev)
- illuminate/view: ^10.0
- laravel-zero/framework: ^10.2
- laravel/pint: ^1.13
- mockery/mockery: ^1.6
- nunomaduro/termwind: ^1.15.1
- pestphp/pest: ^2.22
- phpspec/php-diff: ^1.1
This package is auto-updated.
Last update: 2024-09-26 21:28:18 UTC
README
提供 PHP 生成器,用于生成 Dockerfile 和相关文件。主要目标是 Laravel,但也适用于大多数 PHP 应用程序。
使用方法
此项目提供了一个 CLI 应用程序,用于为您的 Laravel 应用程序生成 Dockerfile!
当前功能
此项目生成的 Dockerfile 旨在提供以下支持:
- 默认情况下在 Nginx 风格的 Web 服务器上运行您的应用程序。
- 或者在 Octane 风格的 Web 服务器上运行您的应用程序:FrankenPHP、RoadRunner、Swoole。
- 使用 Vite 或 Mix 构建静态资源
- 运行您的后台任务调度器 Scheduler
- 如果适用,生成与 Fly.io 相关的脚本,这些脚本对于将您的应用程序作为 Laravel Fly App 部署至关重要
生成的 Dockerfile 已更新以合并来自 https://github.com/fly-apps/laravel-docker 的 Dockerfile 逻辑,请参阅 Dockerfile 引用。此更改是为了允许使用 上游镜像,同时仍然提供先前使用的镜像(fideloper/fly-laravel
)提供的基逻辑,该镜像由该存储库维护。此外,现在它明显地在用户的项目目录中提供了必要的配置文件,特别是在 .fly
文件夹中,最终使用户能够完全控制这些文件!
安装
本地
在 Laravel 项目的基本目录中运行 composer require fly-apps/dockerfile-laravel --dev
。安装成功后,您现在应该在项目的 bin 目录中找到可执行文件:vendor/bin/dockerfile-laravel
。
全局
运行 composer global require fly-apps/dockerfile-laravel
。安装成功后,您现在应该在 composer 的 bin 目录中找到可执行文件:<path-to-composer-home>/vendor/bin/dockerfile-laravel
。您可以通过运行 composer -n config --global home
查看您的 composer 主目录的路径。
别名
一旦 dockerfile-laravel 成功安装,您可以通过运行: alias dockerfile-laravel='/path-to/vendor/bin/dockerfile-laravel'
为它创建一个别名。别名将允许您运行 dockerfile-laravel
,而不是包含 dockerfile-laravel 安装的全路径。
如果您想使此软件包在您的当前目录之外也可用,您可以将其添加到您主目录的 shell 配置文件中,例如 ~/.zshrc
或 ~/.bashrc
,如下所示
alias dockerfile-laravel="/path-to/vendor/bin/dockerfile-laravel"
之后重新启动您的终端,您应该能够通过在 shell 配置中保存的此别名全局访问 dockerfile-laravel
。
生成 Dockerfile
安装完 dockerfile-laravel 之后,您就可以用它为您的 Laravel 应用程序生成一个 Dockerfile。只需运行软件包的 generate
命令即可
# Locally run:
vendor/bin/dockerfile-laravel generate
# or, with Alias configured:
dockerfile-laravel generate
这将生成当前命令运行目录下的 Dockerfile。
选项
-o, --octane[=OCTANE]
- 如果使用 Octane,请提供哪种风味 - 以下之一:roadrunner, swoole, frankenphp--no-assets
- 跳过编译静态资源--force
- 覆盖现有文件--skip
- 保留现有文件--dev
- 在创建镜像时包含开发依赖,例如本地的 .env 文件--frankenphp-binary
- 使用 frankenphp 生成应用的单一文件二进制文件
Dockerfile 生成器接受以下选项
测试 Dockerfile
生成 Dockerfile 后,您现在应该能够将其构建成一个 Docker 镜像
docker build -t <image-name> .
之后,您可以运行该镜像的一个实例
docker run -p <port-in-your-machine>:8080 <image-name>
然后在浏览器中访问 127.0.0.1:<您机器上的端口号>
来访问您的 Laravel 应用程序的容器化实例!
本地开发
您想有点冒险精神,并想对这个软件包做一些实验吗?如果您想的话,可以进行一些本地开发。
熟悉以下内容
当然,当开始任何新存储库时,一个古老的问题:从哪里开始?首先,熟悉一下这个项目的 VIP 文件
-
app/Commands/GenerateCommand.php
- 这是应用的入口点。它负责根据 dockerfile.blade.php 模板和传递给它的标志,在项目基本目录中生成 Dockerfile。
-
resources/views/dockerfile.blade.php
- 这是用于生成 Dockerfile 的模板
完成设置
在深入进行本地开发更改之前,有一些待办事项可以帮助您在软件包上进行本地开发设置
- 克隆存储库
- 使用
composer install
获取存储库依赖 - 如果发现有关文件不可用的错误,您可能需要通过向 Laravel Zero 框架使用的 box 软件包提供适当的权限来修复此错误:
chmod 755 vendor/laravel-zero/framework/bin/box
。
然后,是的。在设置完成后,您可以进行更改!
测试更改
更改完成后,您可以通过运行 php dockerfile-laravel generate
在本地测试它们。这将调用 app/Commands/GenerateCommand.php
中找到的命令。
构建更改
太好了!您已经在本地测试了您的更改。现在是时候重新构建存储库的独立应用程序,以便您的更改包含在名为 dockerfile-laravel 的独立应用程序中。
只需运行构建命令
php dockerfile-laravel app:build
构建视图更改
如果对任何视图文件进行了更改,请确保清除缓存的视图(目前可以通过手动删除缓存的文件来完成)。视图缓存的存储路径在 config/view.php
中配置。
记住,如果您不删除缓存的视图,您的新“视图更改”很可能不会被包含在构建应用程序的功能中。
因此,如果您的视图更改似乎不起作用,请删除您找到的任何缓存的视图文件,然后重新构建您的更改。
测试新构建的应用程序
成功构建您的更改后,您必须测试结果。简单地说,在任何您选择的 Laravel 项目的根目录下运行以下命令
<path-to-dockerfile-laravel-dir>/builds/dockerfile-laravel generate
就这样!现在您应该可以看到可用于您项目的全新 Dockerfile。
测试用例
tests/Feature/GenerateCommandTest.php
中有两个通用测试用例
为每个支持的基生成正确的模板
- 测试生成的文件与在
tests/Feature/Supported
文件夹中找到的引用匹配。 - 此文件夹中的每个子文件夹包含以下内容:
- 配置文件,如
composer.json
,或其他由generate
命令使用的二进制文件,用于检测和确定文件的生成方式 - 参考文件是包含由
generate
命令生成的文件预期内容的文件,例如 Dockerfile
- 配置文件,如
生成带有正确片段的模板
- 测试在特殊事件/包支持的情况下,特定“片段”是否被正确包含在特定生成的文件中。这些片段的预期可以在
tests/Feature/Snippets
文件夹中找到。 - 此文件夹中的每个子文件夹包含以下内容:
- 配置文件:它们的相应
composer.json
文件。当与tests/Feature/Supported
文件夹中找到的基本子文件夹的 composer.json 文件结合时,应导致特定生成的文件包含额外的“片段”。它们的 composer.json 文件包含一个额外的自定义键:extra.templates
,这可以让测试知道要测试哪些特定的生成文件 - 参考文件:与
extra.templates
中找到的名称匹配的文件,并包含在生成的特定模板中期望添加的实际片段。
- 配置文件:它们的相应
- 此文件夹中的每个子文件夹都将与
tests/Feature/Supported
下的所有子文件夹结合并测试。这是因为它们识别的片段预期将与Supported
子文件夹中找到的所有“基本”配置一起工作。
这些测试用例用于确保新的更改不会破坏 generate
命令的现有功能。这些可以通过 ./vendor/bin/pest
运行。
贡献
一旦您对本地更改进行了构建和测试,您可以通过发送拉取请求来请求将其包含在此存储库中。(如果您为您的更改添加了测试用例,则可以获得加分!)
当然,您不必创建 PR。如果有任何对存储库有意义的特性或错误,您也可以创建一个 Issue。
一旦提交,Fly.io 的 Laravel 团队将审查您的 PR/Issue,并决定它是否可以成功添加到官方存储库中。您的贡献将非常受欢迎——感谢您!