【问题标题】:Deploy to heroku with a Makefile and Docker and Python使用 Makefile 和 Docker 和 Python 部署到 heroku
【发布时间】:2020-02-10 23:03:06
【问题描述】:

对于一个学校项目,我想在 Heroku 上部署我们的应用程序。该应用程序由前端组成,使用 reactjs 制作,并编译为静态 html,然后由后端提供服务,该后端还处理 API 和其他所有内容。

dockerfile 工作正常,当在 repo 中时,启动 make docker 并且图像将被构建并启动。继续localhost:8080,您应该会看到登录提示。如果出现错误,则需要一个包含以下内容的 .env 文件

FLASK_DEBUG=True
FLASK_SECRET_KEY=ThisIsADevelopmentKey

FRONT_STATIC_FOLDER=../../frontend/build

DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=

然后使用docker run --env-file .env --name pymatcha --restart=always -p 8080:5000 -d pymatcha再次启动映像

问题是,当我推送到我的 PR 时,Heroku 创建了一个预览应用程序,但我收到了 Python 错误。要么完全缺少 python3.7,要么缺少 venv 或 ensurepip。为了反驳这一点,我尝试使用 Aptfile buildpack 添加 Aptfile,但它没有用。向上移动 Python buildpack。

有谁知道更好的解决方案可以轻松部署到我的项目 heroku 中?在 heroku 的构建过程中使用我们的 makefile 还是通过在 travis 中将 docker 映像推送到 heroku?

关于我的问题的有用链接: Repository

Current Heroku PR

Frontend folder

Backend folder

Dockerfile in Heroku PR

app.json for Heroku in Heroku PR

Makefile in Heroku PR

【问题讨论】:

  • 嗨!欢迎链接,但它们也可能被破坏。因此,您应该在 SO 帖子中直接包含您的文件内容。
  • 你说得对,我认为我最终不会删除这些文件。找到解决方案后,我会更新帖子/解决它(可能与 aws 一起使用)

标签: python docker heroku makefile


【解决方案1】:

可能的问题是您使用的是 heroku 堆栈中的构建包,而不是 docker “堆栈”。这意味着 heroku 将尝试根据其规则检测和构建您的应用程序,而忽略您的 dockerfile。

首先更新堆栈:

heroku stack set docker -a <your app>

然后您应该能够在本地构建您的 docker 容器并将它们推送到 heroku registry

使用 heroku,与许多部署目标一样,您需要在本地(或者更优选地)在 CI 中构建映像,并将其推送到注册表以进行部署/发布。

【讨论】:

  • 这也适用于预览应用程序吗?这样当我打开一个 PR 时,如果我正确配置了 CI,它就会制作一个预览应用程序?
  • 另外,我似乎无法为整个管道设置堆栈?
  • 我相信您必须通过app.json 设置评论应用程序。我相信将它与heroku.yml 结合起来可能会奏效。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2018-02-05
  • 2020-05-26
相关资源
最近更新 更多