內容目录

上一个主题

Go

下一个主题

容器

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

创建应用

登录『新浪云控制台』,点击『创建新应用』,运行环境选择『语言/云容器』,应用名为 helloworld

../../_images/docker-getting-started-create.png

根据您的应用需求,选择你想要的规格的容器。

../../_images/docker-getting-started-spec.png

点击创建,创建一个新的容器应用。

部署应用

应用创建完后,会显示你的应用的 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 来访问我们的应用了。

容器管理

在应用页面的左侧导航栏选择[容器管理],在这个页面可以管理您刚才部署的容器实例。

../../_images/docker-getting-started-container-management.png

构建和运行说明

如何识别应用是Go应用?

Go通过应用根目录下的 Godeps/Godeps.json 文件来判断一个应用是否是Go应用,所以即使应用没有任何依赖,您也必须执行 godep save 来生成这个文件,该命令也会记录下本地使用的Go版本,服务端会使用对应版本的Go来完成应用的构建。

指定Go版本

您可以使用 Godeps/Godeps.json 中的 GoVersion 来指定服务端构建和运行的时候使用的Go版本。

{
  "ImportPath": "...",
  "GoVersion": "go1.6"
}

注解

建议使用 1.5.3 以上的版本。

构建说明

服务端使用下面的命令来编译你的Go应用程序:

godep go install ./...

静态文件处理

所有通过git提交的文件在应用运行的时候都可以直接访问,您可以直接使用Go的 http.FileServer 来处理这些静态文件的访问请求。