部署

最后更新于:2022-04-01 04:22:32

## 概要 几种常见的部署方法如下: 1. 本地编译代码,然后复制到服务器上运行 2. 在服务器上拉取代码,然后编译、运行 3. 使用 Heroku 进行部署 使用命令行演示互动部署 - 一般将web服务器作为守护程序运行。常用工具有: * [Ubuntu Upstart](http://upstart.ubuntu.com/) * [systemd](http://www.freedesktop.org/wiki/Software/systemd) ## 本地编译 目标机器上不需要安装Go语言环境。[Revel命令行工具](http://gorevel.cn/docs/manual/tool.html) 提供了`package`包命令,用来编译和压缩应用程序, 如下所示: ~~~ # 本地测试运行 $ revel run import/path/to/app .. 测试程序 .. # 打包程序 $ revel package import/path/to/app 打包的文件准备好了: app.tar.gz # 复制到目标机器 $ scp app.tar.gz target:/srv/ # 在目标机器上运行 $ ssh target $ cd /srv/ $ tar xzvf app.tar.gz $ bash run.sh ~~~ 如果您的本地机器与目标机器的架构相同,那么不会有什么问题。否则,你需要参考交叉编译来构建指定平台架构的程序。 ### 增量部署 由于静态链接的二进制程序带有完整的资源文件,可能会变得相当大,所以支持增量部署。 ~~~ # 构建应用程序到一个临时目录 $ revel build import/path/to/app /tmp/app # 将临时目录 Rsync 到服务器上的主目录 $ rsync -vaz --rsh="ssh" /tmp/app server # 连接到服务器,并重新启动应用程序 ... ~~~ Rsync 支持ssh完整的复制操作。例如, 下面是一个更复杂的操作: ~~~ # 一个使用自定义证书、登录名和目标目录的例子 $ rsync -vaz --rsh="ssh -i .ssh/go.pem" /tmp/myapp2 ubuntu@ec2-50-16-80-4.compute-1.amazonaws.com:~/rsync ~~~ ## 在服务器上构建 这种方法依赖你的版本控制系统来分发、更新代码。你需要在服务器上安装Go语言环境。好处是,你避免了潜在的交叉编译。 ~~~ $ ssh server ... 安装Go语言环境 ... ... 配置存储库 ... # 进入你的应用程序所在的目录 (GOPATH环境变量), 拉取代码, 并运行。 $ cd gocode/src/import/path/to/app $ git pull $ revel run import/path/to/app prod ~~~ ## Heroku Revel 维护了一个 [Heroku Buildpack](https://github.com/revel/heroku-buildpack-go-revel), 允许一条命令即可部署代码,请参考 [自述文件](https://github.com/revel/heroku-buildpack-go-revel/blob/master/README.md) 使用说明 ## 交叉编译 为了创建一个交叉编译环境,我们需要从源代码构建。参考 [从源代码安装Go](http://golang.org/doc/install/source) 获取更多信息。你必须正确设置 $PATH 和 $GOPATH 环境变量, 否则,如果已经有一个二进制的Go语言包存在,你会陷入严重的错误。 当Go编译器安装成功后,通过指定 GOOS 和 GOARCH 目标环境来建立交叉编译环境。参考 [可用的环境变量](http://golang.org/doc/install/source#environment) 获取更多信息。 ~~~ $ cd /path/to/goroot/src $ GOOS=linux GOARCH=amd64 ./make.bash --no-clean $ GOOS=windows GOARCH=386 ./make.bash --no-clean ~~~ 在新的环境中安装Revel,然后设定目标架构,打包应用程序。 ~~~ $ GOOS=linux GOARCH=amd64 revel package import/path/to/app ~~~ 然后,将压缩包复制到目标平台。
';