Heroku 使用 docker 一键部署 golang 应用

Posted

技术标签:

【中文标题】Heroku 使用 docker 一键部署 golang 应用【英文标题】:Heroku one-click-deploy of golang application with docker 【发布时间】:2020-04-15 18:32:35 【问题描述】:

我对 heroku 很陌生,我想通过此处https://devcenter.heroku.com/articles/heroku-button 中所述的“部署到 heroku”按钮,让人们可以轻松地将我的应用程序安装在他们自己的实例上。

我现在在我的开发分支上创建了一个app.json:https://github.com/scribble-rs/scribble.rs/blob/develop/app.json


  "name": "Scribble.rs",
  "description": "A multiplayer drawing game for the browser",
  "repository": "https://github.com/scribble-rs/scribble.rs",
  "keywords": ["game", "multiplayer", "ephemeral"]

但是,通过调用 https://dashboard.heroku.com/new?template=https%3A%2F%2Fgithub.com%2Fscribble-rs%2Fscribble.rs%2Ftree%2Fdevelop 实际测试按钮将导致 Heroku 运行 go-projects 的默认构建过程。但是,由于生成的二进制文件不包含运行应用程序所需的资源,因此应用程序会构建,但在启动时会崩溃。

为了解决这个问题,我需要使用 docker-buildpack 来运行它。然而,我真的找不到关于这个特定用例的任何文档,尽管它看起来很笼统。对于使用应用程序“部署”选项卡上的 GitHub 连接通过 GitHub 进行部署,您可以指定 heroku.yml,我这样做了:https://github.com/scribble-rs/scribble.rs/blob/develop/heroku.yml

build:
  docker:
    web: Dockerfile

然而,在点击部署的情况下,这个文件似乎被忽略了,而我应该做的是通过app.json 明确指定一个构建包。虽然我用 docker-buildpacks 找到了一些 GitHub 存储库,但我有点不喜欢这个解决方案,因为我必须相信一些随机存储库,它可能随时中断或消失。

解决这个问题的最佳方法到底是什么?

【问题讨论】:

有趣的问题。也许只是分叉回购并在本地保持副本安全? 好吧,我简直不敢相信之前没有人有这个用例^^我通常也不知道这样的构建包有多脆弱,以及是否有人可以用它做恶意的事情。但是,是的,我认为保留副本是一种选择,但我通常希望避免使用其中一个选项。也许这个问题通常有更好的解决方案,我只是看不到。 这几乎是我找到的唯一一个:github.com/tslocke/heroku-buildpack-docker。可悲的是,看起来没有人仍然保持最新状态,我通常希望避免将另一个项目添加到我必须维护的事物列表中^^ 【参考方案1】:

看来您必须在app.json 中指定stack。阅读文档并不太清楚:https://devcenter.heroku.com/articles/app-json-schema#stack

我已将其设置为:

"stack": "container"

【讨论】:

以上是关于Heroku 使用 docker 一键部署 golang 应用的主要内容,如果未能解决你的问题,请参考以下文章

使用 docker 在 heroku 中部署 Django api rest

使用docker将django应用程序部署到heroku时在哪里运行collectstatic?

将 docker 镜像部署到 heroku

docker-compose 一键部署lnmp

2021-07-07 idea使用Alibaba Cloud Toolkit插件一键部署SpringBoot项目到Docker

IDEA 使用 Docker 插件,实现一键自动化部署