Revel框架应用部署的经验

关于Revel

Revel是一个高生产力的Go语言Web框架,原型是由Java的Play! Framework演变而来。其实除了Revel之外,Go语言的Web框架已经有很多了,这里就不再一一列举。就Revel框架本身而言,已经具备和提供了一些非常不错的特性,比如支持运行时的代码热编译(Hot Code Reload),提供诸多的组件,包括:路由, 参数解析, 验证, session/flash, 模板, 缓存, 计划任务, 测试, 国际化等功能。

虽然目前Revel正式release的版本还只是v0.12.0版本(2015-03-25 – Daffodil release),不过此框架已经有被应用到生产环境中的实际案例,并且并发性能良好。因此,Revel也成为我们最近一个项目的首选框架。

Revel应用的部署

介绍完了Revel框架,进入正题,分享一下Revel应用部署到生产环境的几种方式。

由于Go的静态特性,所有的程序是需要先编译才能运行的。这也意味着,编译好的应用,直接成为可执行文件,在运行的时候,不依赖于任何运行时。因此,Revel应用的部署也大致分为两种方式:

在本地编译发布

在服务端编译运行
两种方式各有优点,部署的方式也稍有区别,可以根据实际的需求进行选择。

在客户端编译发布

采用这种方式,直接在客户端编译代码得到可执行程序,然后将Revel应用上传部署到服务端。Revel框架本身也提供了一个命令,用以直接在客户端本地编译出最终需要发布的应用和相关的web资源文件,供部署。

例如,使用命令revel build,将编译好的应用输出到当前deploy目录:

revel build import/path/to/app ./deploy

接下来需要做的,是将deploy目录发布到服务器,你可以用scp命令,也可以用rsync。

除此之外,Revel还提供了一个更为方便的命令:

revel package import/path/to/app

运行后,revel会编译你的应用,并直接打包为app.tar.gz,将其上传到服务端解压并部署即可。

使用本地编译方式的好处,是服务端不需要安装和配置Go环境,也不需要安装Revel框架,服务端上运行的是编译好的应用,不用部署源代码到服务端。

在客户端编译发布,需要注意的是交叉编译的问题。如果客户端的操作系统以及CPU架构跟服务端不一致,需要在编译发布的时候提供目标机器的环境变量设置。

例如客户端机器是windows,CPU是32位,而服务端机器是linux系统,CPU是64位,则需要在编译打包的时候,提供如下环境变量:

GOOS=linux GOARCH=amd64 revel package import/path/to/app

在服务端编译运行

采用这种部署方式,可以避免交叉编译的不便,不过需要在服务端安装Go环境和Revel框架。通过使用Git,客户端提交的代码可以直接在服务端通过git pull获取所有改动,然后直接在服务端编译和运行。

由于git本身是增量获取代码改动,所以相比客户端编译后上传应用能节约不少时间。

与Upstart的结合

部署运行后,在生产环境还需要对应用本身运行状态进行监控。这类相关的工具有很多,比如Supervisor或者forever。但是这两个工具在服务器意外重启后,没法自动启动,也就没法继续守护我们的进程了。所以还得搞定如何在机器重启后自动启动Supervisor或者forever的问题。

相比之下,Upstart是个很不错的选择。Upstart 是一个基于事件的守护进程,用来替代 /sbin/init ,它既能在系统启动/关机时启动/关闭任务和服务进程,也能在系统运行阶段监控这些任务和服务进程。简直就是居家旅行必备之工具……

使用Upstart为我们的应用创建配置文件,保存到/etc/init/my-revel.conf。配置文件内容如下:

description "My Revel Website"

start on (local-filesystems and net-device-up IFACE!=lo)

kill signal TERM
kill timeout 60

respawn #自动重启
respawn limit 10 5 #尝试10次,间隔5秒

setgid deployuser
setuid deployuser

script
    /var/www/current/run.sh
end script

配置中的start on参数,指定了Upstart会在机器启动完毕,并且网络连接正常之后运行我们的程序。respawn参数则表示自动重启进程,并在5秒内尝试10次。把配置文件中的script部分,指向编译后revel应用中的run.sh即可。

最后,通过命令启动守护进程:

sudo start my-revel

这样,Revel已经成为后台进程运行了,并且会在机器意外重启后自动启动,程序异常退出后,也会被自动启动。可以直接用kill命令杀掉进程,发现新的Revel进程会立马被创建和运行。

时间: 2024-09-09 18:43:33

Revel框架应用部署的经验的相关文章

ssh 框架 javaweb 部署在新浪云时,去除哪些jar包

问题描述 在新浪云部署javaweb项目时,都需要去除哪些jar包,框架是Struts+hibernate+spring 解决方案 解决方案二: servlet-api-2.4.jarorg.apache.commons.logging-1.0.4.jar解决方案三: 以下是sae自有的jar,你的项目中如果也存在了就删除掉/usr/local/sae/jetty/lib/jetty-xml-7.4.3.v20110701.jar/usr/local/sae/jetty/lib/servlet-

⑪云上场景:大掌门,架构分层部署实践经验

在苹果AppStore和各大Android市场位居前列<大掌门>游戏的研发运营公司玩蟹是一个非常年轻,有创新有活力的团队,致力于为广大智能机用户提供最佳的游戏体验. 游戏行业具有用户爆发性增长的特性,比如今天刚上线,明天有10倍的需求,今天上线1台服务器够了,明天可能就需要10台服务器.服务器准备少了突然来了压力大跟不上,投入多了造成大量的资源浪费.阿里云服务非常适应手机游戏的移动化.碎片化特点. 大掌门架构部署图 架构分层部署,由单机分层调整为多机分层,分摊负载,避免单点故障,保证服务高可用

Codeigniter框架前后台部署(多目录部署)

个网站一般包含前台和后台并且访问的url是不同的,Codeigniter怎么来部署呢? 在网上看到了一篇比较好的文章: 在下载好的ci的根目录建立一个目录 admin 将application目录中的 config controllers libraries models views这几个目录分别复制到到根目录的admin中,然后将根目录的Index.php复制到admin目录中,然后修改该文件中的 $system_path = 'system'; 修改为$system_path = '../s

门户网站构建CSS框架的规则_经验交流

第一部:关于构建CSS框架我们要实现的目的: 1.实现标准化,具备主流平台适应性的前端实现: 2.快速开发,在站点风格确定后,前端不应该成为整个项目里瓶颈: 3.重构的需求,尽可能的让类和区块样式可重用: 4.分离结构和表现的需求,遵守了语义化结构的约定; 5.构架完全符合金融网特色的CSS框架. 6.对代码进行必要的搜索引擎优化. 第二部:关于CSS命名的一些约定: 1.不使用大写形式的类名和id名; 2.尽可能使用描述性的英文单词的组合作为类名和id名; 3.id名及类名的多个英文单词之间使

在Python的Django框架上部署ORM库的教程_python

Python ORM 概览 作为一个美妙的语言,Python 除了 SQLAlchemy 外还有很多ORM库.在这篇文章里,我们将来看看几个流行的可选ORM 库,以此更好地窥探到Python ORM 境况.通过写一段脚本来读写2个表 ,person 和 address 到一个简单的数据库,我们能更好地理解每个ORM库的优缺点. SQLObject SQLObject 是一个介于SQL数据库和Python之间映射对象的Python ORM.得益于其类似于Ruby on Rails的ActiveRe

javascript 框架小结 个人工作经验_javascript技巧

/**************************************************************************************** 作者:萧 枫 QQ:77182997 MSN:xiaofengnet@hotmail.com Email:xiaofengnet@163.com 网址:http://www.d369.net 请保留版权 谢谢合作 版本:V 1.6.1 /*****************************************

基于Agile模式的WebSphere Commerce产品的自动化构建与部署框架(3)

使用 WebSphere Commerce Build and Deployment Tool 部署增量代码包 WAS 的部署机制 通过 WCBD 来部署定制化的资源时,WCBD 将调用本地 WAS 接口,通过远程连接 协议与 Remote 端的 WAS 进行通信,并调用远程 WAS 的部署机制进行部署,因此了解 WAS 的部署机制将有 助于读者从本质上了解如何部署增量代码包.WAS 包含三种部署模式:单文件模式.多文件模式和模块文件模 式.针对不同的模式,使用不同的打包方式打包资源.在 WAS

go语言-安装go web框架revel时遇到问题,求指导

问题描述 安装go web框架revel时遇到问题,求指导 最近在学习go web 编程,看到目前学习资源较多的框架是revel框架.但是在安装revel时遇到问题. user@user-xubuntu:~/Go$ go get github.com/revel/revel package code.google.com/p/go.net/websocket: Get https://code.google.com/p/go/source/checkout?repo=net: dial tcp

SSH框架网上商城项目第27战之申请域名空间和项目部署及发布_java

前面陆陆续续的完成了网上商城的一些基本功能,虽然还有很多地方有待完善,但是不影响项目的部署和发布,我们可以先来玩一把,这一节主要介绍下域名空间的申请以及项目的部署和发布流程. 1. 域名空间的申请 作为一个伟大的屌丝,肯定没钱买域名空间,很自然的想到去申请个免费的,现在免费的域名空间也很多,我在福佳jsp技术网上申请了一个试用期是15天的,大家也可以去申请个玩玩,反正作为学习,这已经足够了,当然,如果要长期的肯定要付费的.注册过程我截几个图,如下:     然后下一步,最后开通如下: 建议把上面