编程语言支持

如何部署 Go 应用

Flynn 使用 Go buildpack 来支持 Go 语言。

检测

当检测到部署的应用里包含以.go 为后缀的文件时,Flynn 会使用 Go buildpack。

环境依赖

Go buildpack 提供两个方法安装依赖的软件包,godepgo get,推荐使用 godep,这个命令可以将依赖的软件包存储在 git 仓库里,可以在重复性部署的时候自动解决依赖关系。

godep 命令

使用 godep 命令保存依赖的软件包,进入应用的目录,运行godep save命令,然后提交 Godeps 目录。当在 Flynn 里部署应用的时候,Godeps目录里的软件包会被自动安装。

go get 命令

如果应用的代码仓库里没有Godeps目录,buildpack 会自动下载 MercurialBazaar,并运行 go get 命令安装所导入软件包的最新版本。这种方式比较慢,并且不能重复构建的过程,所以不可靠。

如果不使用godep,应用的根目录里需要有一个.godir文件。这个文件里包含应用软件包的完整路径,Flynn 读取这个参数来定位软件包并且给应用命名。例如:一个应用根目录下的.godir文件包含github.com/flynn/flynn,表示这个应用的名称为:flynn

Go 版本

使用godep命令时,可以通过Godeps/Godeps.json里的GoVersion来指定 Go 的版本。

如果不使用 godep ,系统默认使用构建包里的最新版本。

二进制程序

应用目录下的所有主软件包都要被编译成二进制格式,并存放在/app/bin目录里,该路径包含在系统的PATH环境变量里。程序以包含它们的目录来命名。

如果应用的根目录下包含一个主软件包(main package),最终应用的名称会根据主软件包的路径得出。如果你使用godep,系统从Godeps/Godeps.json里读取ImportPath参数得到这个路径,如果你不使用godep,系统会读取.godir文件。

应用类型

在应用根目录下的 Procfile里声明应用支持的类型,一种应用类型占一行,格式:TYPE: COMMAND

例如:应用的根目录下有一个主软件包,软件包路径为:github.com/flynn/myserver,那么,最终应用会被命名为:myserverProcfile里的定义如下:

  1. web: myserver

web类型的应用会有默认的 HTTP 路由,会在环境变量里定义服务器监听的通信端口(PORT)。

原文: http://doc.oschina.net/flynn?t=54096