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?
2021-07-07 idea使用Alibaba Cloud Toolkit插件一键部署SpringBoot项目到Docker