如何将Golang WebApp部署到Heroku
近年来,Go(又称“Golang”)在DevOps专业人员中日益受到欢迎。有许多用Go编写的工具,包括Docker和Kubernetes,但它们也可以用于Web应用程序和API。虽然Golang可以与编译语言一样快速执行,但使用它编码感觉更像是使用标准工具(如编译器、运行程序等)进行解释,您可以完全直接使用。再加上强大易懂的并发框架,可以充分利用当今的多核或多CPU执行系统,这就是为什么Go社区如此迅速增长的原因。看似简单的设计使Go易于学习和掌握,但它的能力并不受限,因为它是针对特定目标而创建的。在本文中,我们学习如何在Go中创建一个简单的Web应用程序,并将其部署到Heroku中,无需任何麻烦。
部署Golang应用程序至Heroku
步骤1: 注册Heroku帐户。如果您还没有Heroku帐户,请立即创建一个。最多可以免费托管5个应用程序,而不需要注册信用卡。
步骤2: 下载和安装Heroku命令行界面(CLI)。使用Heroku的命令行界面(CLI),您可以访问Heroku的服务。安装后,Heroku和Git命令可以从命令窗口中立即使用。
步骤3: 通过登录访问Heroku。我们需要做的第一件事是为项目创建一个目录,然后使用go mod init命令将其初始化为一个Go模块。使用您创建Heroku帐户时使用的电子邮件地址和密码登录:
$ heroku login
输入您的Heroku凭据。
电子邮件:muthuannamalai2002@gmail.com
密码(键入时会隐藏):
已登录为muthuannamalai2002@gmail.com
Heroku和Git需要进行身份验证才能正常使用。
步骤4: 创建一个项目目录。我们需要做的第一件事是为项目创建一个目录,并使用go mod init命令将其初始化为Go模块。
mkdir app
cd app
go mod init muthuannamalai12/app
建议您使用GitHub账户用户名,以使您的项目名称唯一,您的项目依赖项不会相互冲突。这不是必要条件,您也可以使用任何您想要的名称。
现在,在您的目录中应该看到一个名为go.mod的文件,这是Go用来跟踪其项目依赖关系的文件。当您查看文件内容时,它应该看起来像这样:
module muthuannamalai12/app
go 1.14
步骤5: 了解Git。在Windows中启动命令提示符打开命令行壳。您现在必须向Git身份验证,以确保它可以正确标记您的提交。以下是我使用的muthuannamalai12和muthuannamalai2002@gmail.com:
$ git config –global user.name “muthuannamalai12”
$ git config –global user.email muthuannamalai2002@gmail.com
将用户名和电子邮件地址更改为您自己的。
步骤6: 开发Web应用程序。在这一步中,我们准备一个可以部署的简单的Go应用程序。在文件夹“app”中编写程序“app.go”,如下所示:
package main
import (
"github.com/gin-gonic/contrib/static"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.String(200, "Hello")
})
api := r.Group("/api")
api.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "ping",
})
})
r.Use(static.Serve("/", static.LocalFile("./views", true)))
r.Run()
}
步骤7: 使用Git部署我们的Heroku应用程序。要将应用程序部署到Heroku,您需要将其存储在Git中。在同一文件夹$GOPATH/src/github.com/muthuannamalai12/app中键入以下命令:
$ git init
$ git add -A .
$ git commit -m “code”
步骤8: 设置Procfile文件。通过在应用程序的根目录中创建Procfile文件来指定启动应用程序所需的命令。Procfile文件如下所示:
web: app
在此,声明了单个进程类型web,以及启动它所需的命令。名称web至关重要。由于web运行在Heroku的HTTP路由堆栈上,因此此进程类型将能够处理Web流量。
步骤9: 下载并安装Godep。Heroku建议使用godep来管理Go软件包依赖关系,这使得通过修复依赖关系轻松地可重复地构建应用程序。现在让我们安装godep:
$ go get github.com/tools/godep
步骤10: 声明应用程序的依赖项。通过在应用程序的根目录中的Godeps目录中存在Godeps.json文件来识别Go应用程序。Godeps/Godeps.json文件用于声明您的应用程序所包含的依赖关系以及用于编译的Go版本。每当应用程序部署时,Heroku都会读取此文件,安装正确的Go版本,并使用 godep go install ./… 编译代码
在我们的项目中使用godep。在创建的app文件夹中键入以下命令
$ godep save -r
这些依赖项将保存到文件Godeps/Godeps.json中。
步骤11: 将新文件添加到Git中。
$ git add -A .
$ git commit -m “dependencies”
这现在已经准备好部署到Heroku了。
步骤12: 创建并部署应用程序。此步骤涉及创建并将应用程序部署到Heroku。创建Heroku应用程序将准备好接受您的源代码。
$ heroku create
创建应用程序...完成,immense-reaches-34382
https://immense-reaches-34382.herokuapp.com/ | https://git.heroku.com/immense-reaches-34382.git
还创建了一个名为Heroku的远程git存储库。在此示例中,Heroku为您的应用程序生成名称immense-reaches-34382,或者您可以将自己的名称作为参数指定。
当您准备就绪时,使用 git push heroku master 部署您的代码。
您的应用现在已经部署完毕。要访问它,打开应用程序名称生成的URL。以下快捷方式可打开该网站:
$ heroku open
就这样!您的Go应用程序现在正在Heroku上运行!