编程语言支持
如何部署 Go 应用
Flynn 使用 Go buildpack 来支持 Go 语言。
检测
当检测到部署的应用里包含以.go
为后缀的文件时,Flynn 会使用 Go buildpack。
环境依赖
Go buildpack 提供两个方法安装依赖的软件包,godep
和 go get
,推荐使用 godep,这个命令可以将依赖的软件包存储在 git 仓库里,可以在重复性部署的时候自动解决依赖关系。
godep 命令
使用 godep 命令保存依赖的软件包,进入应用的目录,运行godep save
命令,然后提交 Godeps 目录。当在 Flynn 里部署应用的时候,Godeps
目录里的软件包会被自动安装。
go get 命令
如果应用的代码仓库里没有Godeps
目录,buildpack 会自动下载 Mercurial 和 Bazaar,并运行 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
,那么,最终应用会被命名为:myserver
,Procfile
里的定义如下:
web: myserver
web
类型的应用会有默认的 HTTP 路由,会在环境变量里定义服务器监听的通信端口(PORT
)。