gpt4 book ai didi

docker - 如何在 Heroku 上部署 dockerized 应用程序?

转载 作者:行者123 更新时间:2023-12-02 19:19:35 24 4
gpt4 key购买 nike

我想在 Heroku 上部署一个基本的 Flask 应用。

这是我的应用程序的基本结构:

├── Dockerfile
├── Makefile
├── README.rst
├── app
│   ├── __init__.py
│   └── app.py
├── heroku.yml
├── poetry.lock
├── pyproject.toml
└── tests
├── __init__.py
└── test_app.py

每次我将 PR 合并到项目的 master 分支时,我希望应用程序能够重新部署,因此我通过 Heroku 中的自动部署选项进行了设置。

我能够在本地以及通过 docker 容器(也在本地)成功运行此应用程序,但是,Heroku 无法部署该应用程序。我遇到的第一个错误是 No default language could be detected for this app 这导致我为此应用程序 (python) 启用构建包。设置构建包后,出现以下错误:App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz ...!推送失败。我发现了一些相关的讨论(比如 this 一个)似乎暗示诗歌可能是问题所在并且我需要一个 requirements.txt,但即使在生成一个之后我仍然得到同样的错误。

有人知道这是怎么回事吗?我觉得有些事情根本上是错误的,因为我什至不需要构建包——docker 镜像应该会处理这个问题。仅供引用,heroku.yml 包含以下内容:

build:
docker:
web: Dockerfile

如果我应该分享有关我的应用程序设置的更多信息,请告诉我。

非常感谢!

更新 1:

我已经设法通过 heroku container:push web -a APP_NAME 然后是 heroku container:release web -a APP_NAME 将我的 docker 镜像推送到 Heroku,但是当我打开应用 https://APP_NAME.herokuapp.com/我看到它启动失败,这并不奇怪,因为我的 dockerfile 没有以 RUN python app.py 结尾——如果我添加该行并重新运行上述命令,那么整个过程将停止图像构建完成后,最后一行是“Running on ...”——我认为异步运行它也不是正确的解决方案。

有什么建议吗?如果我设法让 Heroku 容器工作,那么我想这意味着我无法让 Heroku 在每次更新 master 分支时重建我的图像,相反,我需要自己做。

最佳答案

我成功了。这是我所做的:

  1. 更改 flask 应用程序中的端口信息(这里是 more detail )
  2. app.py 移动到顶层,(appdir/app.py 而不是 appdir/app/app.py)
  3. 安装gunicorn
  4. 在项目的顶层创建一个 Procfile,其中应包含 web: gunicorn app:app
  5. 在 Dockerfile 中,最后一行不应是 python app.py 而是 gunicorn app:app
  6. 运行 heroku container:push web -a APP_NAME; heroku容器:release web -a APP_NAME

我仍然没有弄清楚持续集成如何适合这里(换句话说,Heroku 本身在这里提供任何东西吗?)但是,所以如果有人有任何建议,请告诉我

更新

只是想为 CI 添加一点,我最终使用了 GitHub 操作。我在 .github/workflows/deploy.yaml 下创建了一个文件,其中包含以下内容:

    - name: deploy
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_TOKEN }}
HEROKU_APP_NAME: "covid-monitor"
run: |
heroku container:login
heroku container:push web -a $(appname)
heroku container:release web -a $(appname)

请注意,要使其正常工作,您需要将 Heroku API token 添加到 GitHub secrets。

关于docker - 如何在 Heroku 上部署 dockerized 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60802633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com