Go应用部署指南¶
入门指南¶
准备工作¶
首先,我们从github上clone一个go示例程序。
$ git clone https://github.com/sinacloud/go-getting-started.git
$ cd go-getting-started
$ ls
Godeps Procfile README.md main.go static templates
这个示例程序是一个使用 Gin Web框架写的HTTP Web服务器。我们依次来看下每个文件的作用,首先,main.go文件。
package main
import (
"net/http"
"os"
"github.com/gin-gonic/gin"
)
func main() {
port := os.Getenv("PORT")
if port == "" {
port = "5050"
}
r := gin.Default()
r.StaticFile("/favicon.ico", "./static/favicon.ico")
r.LoadHTMLGlob("templates/*.tmpl.html")
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello, World")
})
r.GET("/ping", func(c *gin.Context) {
c.HTML(http.StatusOK, "ping.tmpl.html", nil)
})
r.Run(":" + port)
}
这段程序就是设置了一些HTTP Handler,最后启动一个Web服务器,监听在环境变量 PORT
指定的端口上。
上面这段程序依赖于 Gin 这个包, Godeps
目录下就是通过 godep save -r ./...
保存下来的所有依赖包。
最后通过 Procfile 文件指定了如何启动这个应用的程序。
web: go-getting-started
部署应用¶
应用创建完后,会显示你的应用的 git 仓库地址以及如何将代码提交到该 git 仓库,按照说明提交代码。
$ git remote add sinacloud https://git.sinacloud.com/helloworld
$ git push sinacloud master
...
remote: Exporting git code...
remote: Uploading...
-----> Xxx app detected
-----> Creating runtime environment
...
remote: Deploy and waiting for app to be ready .....
To https://git.sinacloud.com/ymp9vm2385
+ 74d7d50...470cb46 master -> master
部署的时候,git 会显示当前的进度,如果部署失败,会提示相应的错误信息(比如 package.json 格式问题等)。
部署完成后,我们就可以通过 http://helloworld.applinzi.com 来访问我们的应用了。
容器管理¶
在应用页面的左侧导航栏选择[容器管理],在这个页面可以管理您刚才部署的容器实例,并查看容器的实时运行状态信息。
构建和运行说明¶
如何识别应用是Go应用?¶
Go通过应用根目录下的 Godeps/Godeps.json
文件来判断一个应用是否是Go应用,所以即使应用没有任何依赖,您也必须执行 godep save
来生成这个文件,该命令也会记录下本地使用的Go版本,服务端会使用对应版本的Go来完成应用的构建。
指定Go版本¶
您可以使用 Godeps/Godeps.json
中的 GoVersion
来指定服务端构建和运行的时候使用的Go版本。
{
"ImportPath": "...",
"GoVersion": "go1.6"
}
注解
建议使用 1.5.3 以上的版本。
静态文件处理¶
所有通过git提交的文件在应用运行的时候都可以直接访问,您可以直接使用Go的 http.FileServer
来处理这些静态文件的访问请求。