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



如果这是一个明显的问题,请非常抱歉。但是我有一个依赖CLI工具来使其正常工作的WebApp。我想知道是否有一种方法可以在不使用自定义BuildPack的情况下进行指定。以及如何在可能的情况下进行此操作

对此的任何帮助都很好,谢谢

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

不可能直接使用aptapt-get安装内容。您的应用程序作为无特权用户运行,无法运行这些工具来安装内容。

这给您带来了几个选择:

  1. 获取二进制文件并将其与您的应用程序捆绑在一起。有些人(虽然没有我的判断)会说您的应用程序负责带来它需要运行的一切,因此您应该已经这样做了。

    十二个因素应用也不依赖于任何系统工具的隐式存在。例子包括炮击到ImageMagick或卷发。[1]

    此路径适合小型或自我包含的依赖关系,例如静态构建的GO应用程序。如果您的应用需要共享的库或其他资源来运行,则也需要将这些库与应用程序捆绑在一起。如果您的捆绑包的大小很大,也不是很好。您捆绑的所有内容都将通过应用程序推动,因此它可以减慢推动力。您还负责跟踪更新并确保您拥有最新的Bug&安全修补二进制文件&库。

    这样做的一般步骤是:

    1. 在应用程序的根部创建一个像binaries/这样的文件夹,并使用bin/lib/的子文件夹。
    2. 将您所有的二进制文件放在binaries/bin及其在binaries/lib下需要的任何共享库中。
    3. 在应用程序的根部添加一个.profile文件。这将在您的应用程序启动之前采购,以便将您捆绑的所有二进制文件放在路径上,并在搜索路径中添加库。

      .profile中,请记录以下内容:

      export PATH=$HOME/binaries/bin:$PATH
      export LD_LIBRARY_PATH=$HOME/binaries/lib:$LD_LIBRARY_PATH
      

    应该就是这样。只需使用所有新文件推动您的应用。

  2. 另一个更容易的选择是使用APT buildpack [2]。此构建包可以使用apt安装所需的依赖项。您只需要在应用程序的根部添加apt.yml文件。使用Multi-BuildPacks运行您的应用程序(首先是APT buildpack,然后是普通的buildpack)。

    这样做的主要好处是您不必管理依赖项。APT BuildPack将自动从您告诉的回购中安装它们,因此它也将从那里拾取新版本。如果您需要安装的内容具有很多依赖关系,尤其是敏感依赖性(例如OpenSSL)或经常像其他语言Runtime(Python,Perl,Ruby等)一样更新/修补的依赖项。

    其他好处。这更容易,因为构建包负责调整路径&ld_library_path。它还使应用程序尺寸较小,因此推动速度更快。

    此选项的缺点是Apt-Buildpack不是官方的构建包(维持社区)。当您访问Internet时,它也可以正常工作,因此可以从Internet下载二进制文件,尽管您可以使用内部存储库来解决此问题。


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

  1. 使用Docker。您可以使用所需的所有依赖项设置自己的Docker容器,以及您的应用程序代码和cf push Docker Image到CF。这样做的缺点是您失去了使用buildpacks的优势,因此您可以独自建造和管理Docker Images以及应用程序的所有所需依赖关系。

  2. 您可以创建自己的自定义构建包并以这种方式提供依赖关系。我看不到您想这样做的任何原因。这是一个不错的工作,最后,您的东西比APT Buildpack更脆,更灵活。

  3. 从技术上讲,可以运送自己的rootfs,但您真的不应该(我只是将其包括在内)。这是CF上所有应用程序使用的基本文件系统。这样做有很多缺点,主要是很难。它还适用于基础上的所有应用程序,可以膨胀rootfs的大小,并使用rootfs为任何物体做出更大的攻击表面(即所有应用程序)。

希望有帮助!

  • [1] https://12factor.net/dependendencies
  • [2] https://github.com/cloudfoundry/apt-buildpack

最新更新