【问题标题】:Reuse a cloudfoundry app without having to rebuild from sratch重用 Cloud Foundry 应用程序,而无需从头开始重建
【发布时间】:2018-08-09 10:04:19
【问题描述】:

我使用 Cloudfoundry 部署了一个 Django 应用程序。构建应用程序需要一些时间,但是我需要使用不同的启动命令来启动应用程序,而我今天唯一的解决方案是每次应用程序时都完全重新构建。

使用 Docker,更改启动命令非常简单,不需要重新构建到整个容器,必须有更有效的方法来做到这一点:

以下是启动的应用程序:

  • FrontEndApp-Prod: 使用 gunicorn 的 Django 应用
  • OrchesterApp-Prod: Django Celery 相机和心跳
  • WorkerApp-Prod: Django Celery Workers

所有这些应用程序基本相同,只是使用了不同的路由、配置和启动命令。

下面是我使用的文件manifest.yml

defaults: &defaults
  timeout: 120
  memory: 768M
  disk_quota: 2G
  path: .
  stack: cflinuxfs2
  buildpack: https://github.com/cloudfoundry/buildpack-python.git
  services:
  - PostgresDB-Prod
  - RabbitMQ-Prod
  - Redis-Prod

applications:

- name: FrontEndApp-Prod
  <<: *defaults
  routes:
  - route: www.myapp.com
  instances: 2
  command: chmod +x ./launch_server.sh && ./launch_server.sh

- name: OrchesterApp-Prod
  <<: *defaults
  memory: 1G
  instances: 1
  command: chmod +x ./launch_orchester.sh && ./launch_orchester.sh
  health-check-type: process
  no-route: true

- name: WorkerApp-Prod
  <<: *defaults
  instances: 3
  command: chmod +x ./launch_worker.sh && ./launch_worker.sh
  health-check-type: process
  no-route: true

【问题讨论】:

  • 为什么不分别推送这三个应用呢?它们不是同时运行吗?添加有关系统外观的更多详细信息。这是一个 devops 周期吗?
  • 我绝对可以照你说的做。但是,对我来说,它仍然是次优的。它们都共享同一个“容器”,只是使用不同的启动命令执行。我确信我可以构建样板,然后根据应用需要修改启动命令、路由、内存、实例数。

标签: django celery ibm-cloud cloud-foundry django-celery


【解决方案1】:

对此我能想到两个选择:

  1. 您可以在Procfile 中使用一些新的 v3 API 功能并利用它们对多个进程的支持。有了这个,你基本上会有一个像这样的Profile

    web: ./launch_server.sh
    worker: ./launch_orchester.sh
    worker: ./launch_worker.sh
    

    然后该平台应暂存您的应用一次,但根据暂存生成的 Droplet 将其部署 3 次。这很巧妙,因为您最终只有一个应用程序运行了多个进程。缺点是在我写这篇文章时这是一个实验性 API,所以它仍然有一些粗糙的边缘,而且你获得的确切支持可能会有所不同,具体取决于你的 CF 提供商安装新版本云控制器 API 的速度。

    您可以在此处阅读有关此内容的所有详细信息:

    https://www.cloudfoundry.org/blog/build-cf-push-learn-procfiles/

  2. 您可以使用cf local。这是一个 cf cli 插件,它允许您在本地构建一个 droplet(暂存发生在本地计算机上的 docker 容器中)。然后,您可以获取该 Droplet 并根据需要进行部署。

    该过程大致如下所示,您只需要填写一些选项/标志(提示运行cf local -h查看所有选项):

    • cf local stage
    • cf local push FrontEndApp-Prod
    • cf local push OrchesterApp-Prod
    • cf local push WorkerApp-Prod

    第一个命令将在您的当前目录中创建一个以.droplet 结尾的文件,随后的三个命令将该滴部署到您的提供程序并运行它。最终结果是您最终应该得到三个应用程序,就像您现在拥有的一样,它们都是从同一个 droplet 部署的。

    缺点是您的 Droplet 是本地的,因此您需要为每个应用上传 3 次。

我想您还有第三种选择,即仅使用 docker 容器。不过,这有它自己的优点和缺点。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多