Monthly Archives: December 2015

bara-基于Nginx和Dokcer的单机灰度测试环境原型

什么是bara bara,即日语的バラ,也就是玫瑰。 bara是一个基于Nignx和Docker的多版本程序同时在线的简易测试环境,只能单机使用,并且只是一个PoC而已,仅供参考。 简单来说,就是使用Nginx做反向代理,代理到后面的Docker容器,bara能动态创建Nignx配置文件,重启Nginx;而浏览器可以通过设置特殊header(默认为一个字母v)来通过Nginx代理,访问指定的后面的Docker容器。 bara概览 bara架构很简单,一个Nginx服务器运行在host上,画图如下: 其背后用到的主要原理就是Nginx的proxy_pass以及map功能,Nginx会根据浏览器设置的自定义header(v)的值,根据map的映射关系,找到合适的upstream代理过去而已。 而bara,就是发挥了Nginx的强大功能,和Docker的灵活轻便,从而能在一台主机上,跑n个版本的应用程序,以方便测试。 bara还有一个概念就是Nginx的配置文件模板,Nginx的配置文件是根据这个模板动态创建的,这个模板如果有{{upstream}}占位符,则会被bara系统自动根据运行中的容器来替换为一个upstream列表。 bara的代码在: https://github.com/liubin/bara。 下面,我们就来看看如何使用。 开始使用 启动前的配置 首先,需要修改config/initializers/docker.rb和 config/initializers/nginx.rb 这两个配置文件,指定如何连接Docker daemon和Nginx的配置文件位置以及nginx可执行程序的位置。 创建Nignx配置文件模板 Nginx配置文件模板是动态创建Nginx配置文件的模板,可以根据情况,准备多个模板。在Nginx服务页面,创建Nginx配置文件的时候,会基于状态为active的模板来创建Nginx的配置文件。 Nginx配置文件模板列表页面: 编辑模板页面: 拉取镜像到该host bara还提供了简单的镜像管理功能:列表,拉取,删除。如果镜像太大,尽量避免在线操作,还是直接在console中使用docker pull来拉取。 这是镜像列表页面: 启动容器 容器列表页面: 启动容器页面: 目前比较简单,只有一个容器名和CMD参数可以填写,默认会以-d和-P的形式启动容器。 生成Nginx配置文件和重启Nginx服务 在Nignx服务页面,可以完成查看当前Nginx配置文件内容,在线修改,以及重启Nginx服务器等。 这是一个Nignx配置文件例子: 设置客户端header 这里我使用了Chrome的插件ModHeader,这个插件,可以根据指定的url规则,设置自定一个header,这里我们添加了v这个header。ModHeader设置页面如下: 如果没有设置header,则Nginx会使用map中default的值作为upstream,目前为取得容器列表后的最后一个容器。 限制 目前bara只是一个原型,有很多不足,可能有人会觉得它 单机 使用-P

Posted in DevOps, Docker, Rails, Tech Tagged with: ,

无觅相关文章插件,快速提升流量