fly-apps/dockerfile-laravel

Dockerfile 生成器和 Fly.io 辅助工具。

安装次数: 26,532

依赖者: 0

建议者: 0

安全性: 0

星标: 19

关注者: 5

分支: 1

公开问题: 6

语言:Blade

类型:项目

1.0.6 2024-07-26 20:08 UTC

This package is auto-updated.

Last update: 2024-09-26 21:28:18 UTC


README

提供 PHP 生成器,用于生成 Dockerfile 和相关文件。主要目标是 Laravel,但也适用于大多数 PHP 应用程序。

使用方法

此项目提供了一个 CLI 应用程序,用于为您的 Laravel 应用程序生成 Dockerfile!

当前功能

此项目生成的 Dockerfile 旨在提供以下支持:

  1. 默认情况下在 Nginx 风格的 Web 服务器上运行您的应用程序。
  2. 或者在 Octane 风格的 Web 服务器上运行您的应用程序:FrankenPHP、RoadRunner、Swoole。
  3. 使用 ViteMix 构建静态资源
  4. 运行您的后台任务调度器 Scheduler
  5. 如果适用,生成与 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 文件

  1. app/Commands/GenerateCommand.php

    • 这是应用的入口点。它负责根据 dockerfile.blade.php 模板和传递给它的标志,在项目基本目录中生成 Dockerfile。
  2. resources/views/dockerfile.blade.php

    • 这是用于生成 Dockerfile 的模板

完成设置

在深入进行本地开发更改之前,有一些待办事项可以帮助您在软件包上进行本地开发设置

  1. 克隆存储库
  2. 使用 composer install 获取存储库依赖
  3. 如果发现有关文件不可用的错误,您可能需要通过向 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 中有两个通用测试用例

  1. 为每个支持的基生成正确的模板
  • 测试生成的文件与在 tests/Feature/Supported 文件夹中找到的引用匹配。
  • 此文件夹中的每个子文件夹包含以下内容:
    • 配置文件,如 composer.json,或其他由 generate 命令使用的二进制文件,用于检测和确定文件的生成方式
    • 参考文件是包含由 generate 命令生成的文件预期内容的文件,例如 Dockerfile
  1. 生成带有正确片段的模板
  • 测试在特殊事件/包支持的情况下,特定“片段”是否被正确包含在特定生成的文件中。这些片段的预期可以在 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,并决定它是否可以成功添加到官方存储库中。您的贡献将非常受欢迎——感谢您!