您可以将CLI工具添加到Cloud Foundry应用程序吗?

问题描述 投票:0回答:1

非常抱歉,如果这是一个明显的问题。但是我有一个依赖于CLI工具的webapp来使它工作。我想知道是否有一种方法可以在不使用自定义buildpack的情况下指定它。如果可能的话,如何做到这一点

对此有任何帮助都很棒,谢谢

cloudfoundry pivotal-cloud-foundry
1个回答
0
投票

您可以将CLI工具添加到Cloud Foundry应用程序吗?

aptapt-get直接安装东西是不可能的。您的应用以非特权用户身份运行,无法运行这些工具来安装内容。

这为您提供了几个选项:

  1. 获取二进制文件并将其与您的应用捆绑在一起有些人(虽然我没有判断)会说你的应用程序负责带来它运行所需的一切,所以你应该已经这样做了。 十二因素应用程序也不依赖于任何系统工具的隐含存在。示例包括炮轰ImageMagick或curl。 [1] 此路径适用于小型或自包含的依赖项,例如静态构建的Go应用程序。如果您的应用需要共享库或其他资源才能运行,您还需要将这些资源与您的应用捆绑在一起。如果捆绑的大小很大,那也不是很好。你捆绑的所有东西都会被app推高,所以它会减慢你的推动力。您还负责跟踪更新并确保您拥有最新的,无错误和安全修补的二进制文件和库。 这样做的一般步骤是: 在你的应用的根目录下创建一个像binaries/这样的文件夹,其子文件夹为bin/lib/。 将所有二进制文件放在binaries/bin下,以及binaries/lib下所需的任何共享库。 在应用的根目录添加.profile文件。这将在您的应用程序启动之前获取,因此它会将您捆绑的任何二进制文件放在路径上,并将库添加到搜索路径中。 在.profile中提出以下内容: export PATH=$HOME/binaries/bin:$PATH export LD_LIBRARY_PATH=$HOME/binaries/lib:$LD_LIBRARY_PATH 那应该是它。只需使用所有新文件推送您的应用即可。
  2. 另一个更简单的选择是使用Apt buildpack [2]。这个buildpack可以使用apt安装所需的依赖项。您只需要将apt.yml文件添加到应用程序的根目录并使用multi-buildpacks运行您的应用程序(首先是apt buildpack,然后是普通的buildpack)。 这样做的主要好处是您不必管理依赖项。 apt buildpack将自动从你告诉它使用的repo安装它们,所以它也会从那里获取新版本。如果你需要安装的东西有很多依赖项,这是很好的,特别是敏感的依赖项(比如openssl)或者像其他语言运行时(Python,Perl,Ruby等等)经常更新/修补的依赖项。 其他福利。它更容易,因为buildpack负责调整PATH和LD_LIBRARY_PATH。它还使应用程序大小更小,因此推送速度更快。 这个选项的缺点是apt-buildpack不是官方的buildpack(它的社区维护)。当您可以访问Internet时它也最有效,因此它可以从Internet下载二进制文件,但您可以使用内部存储库来解决此问题。

还有其他几个选项,但我不推荐它们,除非上面的两个选项绝对不适合你。

  1. 使用Docker。您可以设置自己的Docker容器,其中包含您需要的所有依赖项,以及您的应用程序代码和cf push Docker镜像到CF.这样做的缺点是你失去了使用buildpacks的优势,因此你需要自己构建和管理Docker镜像以及所有必需的应用程序依赖项。
  2. 您可以创建自己的自定义buildpack并以这种方式提供依赖项。我没有看到你想要这样做的任何理由。这是一项相当不错的工作,最终,你会遇到比Apt Buildpack更脆弱,更不灵活的东西。
  3. 在技​​术上可以运送你自己的rootfs,但你真的不应该(我只是把它包括在内)。这是CF上所有应用程序使用的基本文件系统。这样做有很多缺点,主要是因为它很难。它也适用于基础上的所有应用程序,可以膨胀rootfs的大小,并为使用rootfs(即所有应用程序)的任何东西制作更大的攻击面。

希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.