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

时间:2019-03-21 06:21:31

标签: cloudfoundry pivotal-cloud-foundry

很抱歉,如果这是一个明显的问题。但是我有一个依靠CLI工具才能运行的webapp。我想知道是否有一种方法可以在不使用自定义buildpack的情况下指定它。以及如何尽可能做到这一点

在这方面的任何帮助都很好,谢谢

1 个答案:

答案 0 :(得分:0)

  

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

不可能直接用aptapt-get安装东西。您的应用以无特权的用户身份运行,并且无法运行那些工具来进行安装。

这为您提供了两个选择:

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

      

    十二因子应用程序也不依赖于任何系统工具的隐式存在。示例包括脱壳到ImageMagick或curl。 [1]

    此路径适用于较小或自包含的依赖项,例如静态构建的Go应用程序。如果您的应用需要共享库或其他资源才能运行,则也需要将它们与应用捆绑在一起。如果捆绑包的大小很大,也不太好。您捆绑的所有内容都将随该应用程序一起推送,因此会减慢您的推送速度。您还负责跟踪更新,并确保您拥有最新的,无错误和安全补丁的二进制文件和库。

    执行此操作的一般步骤是:

    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]。该buildpack可以使用apt安装所需的依赖项。您只需要在应用程序的根目录中添加一个apt.yml文件,然后使用多个buildpacks(首先使用apt buildpack,然后使用常规的buildpack)运行您的应用程序即可。

    这样做的主要好处是您不必管理依赖项。 apt buildpack将自动从您告诉它使用的存储库中安装它们,因此它将从那里也获取新版本。如果您需要安装的东西具有很多依赖关系,特别是敏感的依赖关系(如openssl)或经常像其他语言运行时(Python,Perl,Ruby等)那样得到更新/修补的依赖关系,则很好。

    其他好处。这很容易,因为buildpack负责调整PATH和LD_LIBRARY_PATH。它还使应用程序尺寸更小,因此推送速度更快。

    此选项的缺点是apt-buildpack不是官方的buildpack(由社区维护)。当您可以访问Internet时,它也最有效,因此它可以从Internet下载二进制文件,尽管您可以使用内部存储库解决此问题。


还有其他两个选项,但是除非上面两个选项对您都不起作用,否则我不推荐它们。

  1. 使用Docker。您可以使用所需的所有依赖项以及应用程序代码和cf push Docker映像到CF来设置自己的Docker容器。这样做的缺点是您失去了使用buildpack的优势,因此您将自己重新构建和管理Docker映像以及应用程序的所有必需依赖项。

  2. 您可以创建自己的自定义buildpack并以这种方式提供依赖项。我没有看到您要这样做的任何理由。这是一项体面的工作,最后,您会得到比Apt Buildpack更脆,更不灵活的东西。

  3. 从技术上来说,可以发布自己的rootfs,但实际上不应该这样做(我只是为了透彻地介绍了这一点)。这是CF上所有应用程序使用的基本文件系统。但是,这样做有很多缺点,主要是很难做到。它也适用于基础上的所有应用程序,可以膨胀rootfs的大小,并为使用rootfs的任何内容(即所有应用程序)提供更大的攻击面。

希望有帮助!