Blog Archives

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: ,

初识OpenTSDB

1. 什么是 OpenTSDB OpenTSDB ,可以认为是一个时系列数据(库),它基于HBase存储数据,充分发挥了HBase的分布式列存储特性,支持数百万每秒的读写。 2. 架构简介 这里我们简单看一下它的架构,如下图所示。 其最主要的部件就是TSD了,这是接收数据并存储到HBase处理的核心所在。而带有C(collector)标志的Server,则是数据采集源,将数据发给 TSD服务。 3. 安装 OpenTSDB + elasticsearch plugin 为了安装 OpenTSDB ,都需要以下条件和软件: Linux操作系统 JRE 1.6 or later HBase 0.92 or later 3.1. 安装GnuPlot 如果你还想使用自带的界面,则需要安装GnuPlot 4.2及以后版本,以及gd和gd-devel等。这里我们选择了GnuPlot 5.0.1的版本。 根据情况执行(没有就装),安装所需软件 $ sudo yum install -y gd

Posted in DevOps, Tech, Web

使用Packer创建Digital Ocean镜像

1. 什么是Packer Packer没听说过,可能你听说过Vagrant;如果Vagrant都没听说过,那么请原谅我说这真是稍微有点out了(如果你知道DevOps这个词的话)。 Packer和Vagrant都出自HashiCorp这个公司,这个公司实在是太性感了,以至于我还专门写过一些介(ruǎn)绍(wén):http://slides.com/binliu/docker-and-hashicorp#/。 除了本文要说的Packer之外,HashiCorp的大杀器还包括: Serf:一个简单的去中心化的集群管理软件; Consul:跨DataCenter的服务发现、配置管理和编配软件; Terraform:一个高抽象度、消除基础设施物理差异,来对基础设施进行构建、变更和版本化的工具; VAULT:用于保存密码、token等机密信息的存储服务; Atlas:通过一种工作流,完成公司内部从开发到发布的流程支撑基础工具。 那么言归正传,什么是Packer呢?按照官方介绍: Packer is a tool for creating identical machine images for multiple platforms from a single source configuration. 也就是说,Packer是一款创建(OS)镜像的工具,它以代码为表现形式,并支持多种本地和云平台,比如支持VirtualBox的OVF和VMware的VMDK镜像,以及EC2、DigitalOcean、OpenStack、Google Compute Engine等主流云主机,甚至支持构建Docker镜像。 Packer的目的不是取代现有的配置管理工具,比如Chef或者Puppet等,而是可以和这些工具配合使用,沿用公司历史资产。 Packer的项目主页: https://packer.io/ 。 2. 为什么用Packer 首先,那就是基础设施代码化,即Infrastructure as Code。因为我们都是程序员,喜欢代码,喜欢命令行,我们喜欢在Shell执行命令,看结果在屏幕上流动那种感觉。 其次,有利于实现Immutable

Posted in DevOps, Tech

创建基于Docker的E*K(ElasticSearch、Fluentd、Kibana)日志采集系统

说道日志采集和可视化,有很多方案,而最多的应该莫过于ELK了(ElasticSearch、Logstash和Kibana),而这一套软件,目前也同归于同一项目:https://www.elastic.co/。 不过我日志采集系统我没有使用Logstash,而是采用了Fluentd。 一共有两个Docker镜像,一共是日志采集,即fluentd-agent(https://github.com/liubin/fluentd-agent),另一个是日志存储(es)和可视化(kibanna)es-dashboard(https://github.com/liubin/es-dashboard)。其中fluentd-agent运行于nginx服务器上(也可以自己修改td-agent.conf来改写规则),而es-dashboard由两个应用组成,es和kibana,它们既可以运行在一个容器中,也可以分开运行,具体见后面说明。 1. 在同一容器中运行es和kibana sudo docker run -p 9200:9200 -p 9300:9300 -p 5601:5601 liubin/es-dashboard 2. 或者在两个容器中运行es和kibana 2.1. 启动es sudo docker run -p 9200:9200 -p 9300:9300 liubin/es-dashboard –name es /tmp/start.sh es 2.2. 启动kibana 得到上一个容器的IP地址和es端口后,启动第二个容器 sudo docker run -p 5601:5601 -e

Posted in Docker, Tech

Libreoffice permission issue under Nginx web server and PHP

We have a feature need to convert office documents to pdf files,because our servers are all CentOS, so we selected LibreOffice to do the conversion. The command can run successfully under console, but failed in web server. Here we got

Posted in Tech Tagged with:

Use DJJob in CodeIgniter

In a web application, time consuming processes, like sending emails, you need make it asynchronous. In this blog, we will introduce how to make a job running in the background using DJJob and crontab or CLI. In the Rails world,

Posted in PHP, Tech Tagged with:

Load database config file from libraries in CodeIgniter

Sometime you will want to load database config variables from your libraries.In this case, if you use $this->_CI->config->load(‘database’), you will get an error: The error somthing like Your application/config/database.php file does not appear to contain a valid configuration array. The

Posted in Tech Tagged with: ,

《Web应用安全权威指南》出版后记

《Web应用安全权威指南》终于出版了,从开始翻译到上市,历时近一年。这期间,译者,尤其是图灵的编辑都付出了巨大的努力。当然,只有获得读者的承认,所有人的努力才不算浪费。 我也是今天刚拿到纸版的书,从印刷质量上来说,还挺不错,字体正合适阅读,封面设计的也很好看;纸质也不错,虽然有点重,不过只有不到400页,拿在手里正好。关键是,价钱也不贵,大概60左右的样子,貌似China-Pub59块多。 如果书中有什么不对的地方,也希望读者能直接和图灵或者译者联系。 1. 关于图灵和本书 首先,我个人认为这本书的主要面向用户为:初中级水平的开发人员,对安全感兴趣又不是特别深入的人;以及经验相对丰富又想做些查漏补缺的人。 这本书主要是面向开发人员的,意在帮助大家开发安全的Web应用,而不是让你成为黑客或者专业的安全人员。 此外,本书除了全世界共通的技术语言之外,中日之间不同的开发方式,IT背景也能帮我们开阔眼界, 促使我们去考虑一些之前没人去考虑的方面。也许有些东西在国内不现实或者不实用,由于译者能力有限,未能全部按照国内情况改写,深感内疚。 再介绍下原作者德丸浩(Twitter ID:@ockeghem https://twitter.com/ockeghem)。2008年创立HASH咨询公司,任董事长。主要从事网络安全性的诊断与咨询工作,并在工作之余通过博客普及网络安全知识。兼任KYOCERA Communication Systems股份有限公司技术顾问、独立行政法人信息处理推进机构(IPA)客座研究员,活跃于日本安全业界。说到IPA,这是在日本非常权威厉害的IT部门,他们除了举办类似国内的程序员、系统分析员等考试之外,还和有很多非常实用的机构和功能,比如没年的开源大奖,未踏(即还没有人踏入过的领域、技术)大奖等,非常贴近实际产业现状和需求。而KYOCERA,即京瓷,则是最近在中国很火的日本管理大师稻盛和夫所创办的企业。 2. 本书内容 本书共分8章,分别是: 第1章 什么是 Web应用的安全隐患 本章是入门引子,非常简短,主要是介绍了什么什么是Web应用中的安全问题,及其出现原因。并提出安全性bug和安全性功能两个概念。 第2章 搭建试验环境 本章介绍了如何安装书中演示例子的环境,包括虚拟机和调试工具Fiddler等。 本书还附带了一个VMware Player虚拟机,里面是一个简单的Web运行环境,功能不比大多数小网站少,非常方便大家亲手进行实践,包括Apache/PHP/邮件服务等。不过遗憾的是里面环境有些是日文的,大家可以和书对照着看。 整个环境可以从http://www.ituring.com.cn/book/1249中的“随书下载”菜单下下载。 第3章 Web 安全基础:HTTP、会话管理、同源策略 可以认为这章是进入后续章节的入门预习,主要介绍了HTTP原理和会话功能。以及主动攻击和被动攻击,及同源策略。 什么是HTTP,URL的结构式怎样的,一个网页请求都会有哪些网络传输?HTTP请求和返回的各字段都是什么意思?GET和POST的区别等等问题,以及现代Web赖以生存的Cookie和Session机制及安全问题,本章都进行了详细的说明。 本章后半部分,对被动攻击和同源策略进行了具体的介绍。 第4章 Web应用的各种安全隐患 这是本书中分量最重的一章,因为它介绍了现代Web安全的最重要3个问题:XSS,SQL注入和CSRF。除此之外,还有一些可能会被我们忽略的小问题,比如重定向问题,邮件发送问题,调用OS命令等问题。 第5章 典型安全功能 本章主要对为了保护系统安全所编写的安全性功能相关的最佳实践,主要就是账号管理、认证授权,最后也介绍了日志管理。 比如说错误消息提示,如果登录的时候email并没有在应用中注册,那么错误消息怎么显示?是“该用户不存在”,还是“登录出错”?这个大难,还是留给各位在阅读本书时自己思考吧。

Posted in 生活, Tech

Docker,云时代的程序交付方式

Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engine 的正式发布?Azure入华?还是AWS落地中国?留在每个人大脑中的印象可能各不相同,但要是让笔者来排名的话那么Docker绝对应该算是第一位的。如果你之前听说过它的话,那么也许你会说“没错,就是它”,因为几乎世界各地的开发、运维都在谈论着Docker;如果你还没听说过Docker,那么我真的建议你花上10分钟来阅读本文。 1. Docker简介 1.1. 什么是Docker? Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台。Docker也是容器技术的一种,它运行于Linux宿主机之上,每个运行的容器都是相互隔离的,也被称为轻量级虚拟技术或容器型虚拟技术。而且它有点类似Java的编译一次,到处运行,Docker则可以称为构建一次,在各种平台上运行,包括本地服务器和云主机等(Build once,run anywhere)。 容器就是集装箱,我们的代码都被打包到集装箱里;Docker就是搬运工,帮你把应用运输到世界各地,而且是超高速。 Docker是开源软件,代码托管在GitHub上,使用Go语言编写。Go可以称得上是互联网时代专门为开发分布式、高并发系统而生的编程语言。Docker也可以说是Go语言的一个杀手级应用,而且在Docker生态圈里很多软件也都是使用Go语言编写的。 1.2. Docker历史 Docker项目始于2013年3月,由当时的PaaS服务提供商dotCloud开发,dotClound也是YCombinator S10的毕业生。尽管Docker项目很年轻,到现在也只有15个月而已,然而它的发展势头如此之猛已经让很多人感叹不已了。 2013年10月dotCloud公司名字也由dotCloud, Inc.改为Docker, Inc.,集中更多的精力放到了Docker相关的研发上。 1.3. Docker的技术基石 在进入Docker的世界之前,我们先来看一下Docker实现所依赖的一些技术。 实际上Docker的出现离不开很多Linux kernel提供的功能,甚至可以说Docker在技术上并没有什么特别重大的创新之处,利用的都是已经非常成熟的Linux技术而已,这些技术早在Solaris 10或Linux Kernel 2.6的时候就有了。可以毫不夸张的说Docker就是“站在了巨人的肩膀上”。 下面我们就先来了解一下Docker主要利用的Linux技术。 1.3.1. 容器技术 容器(Container)有时候也被称为操作系统级虚拟化,以区别传统的Hypervisor虚拟技术。它不对硬件进行模拟,只是作为普通进程运行于宿主机的内核之上。 在容器中运行的一般都是一个简易版的Linux系统,有root用户权限、init系统(采用LXC容器的情况下)、进程id、用户id以及网络属性。 容器技术在云计算时代已经被大量使用。Google公司的Joe Beda在今年5月做了一次题为《Containers At Scale

Posted in Docker, Tech

单机版Mesos + Marathon + Deimos + Docker

最近关于Docker的Blog很多都提到了Mesos,确实是在复杂的应用环境下,如何管理集群是一个非常现实的问题。 本文就是参考各种资料,利用Vagrant+VirtualBox构建了一个单机版的Mesos环境。 1. 什么是Mesos? Apache Mesos是一个分布式系统的集群管理软件,它能为我们需要执行的任务在复杂系统中进行资源分配等工作。 Mesos主要由4个模块组成。 进行系统总体管理的Mesos master 为集群提供资源的Mesos slave 进行资源分配、调度(scheduling)的Framework 在Mesos slave上执行具体命令的Executor 关于Mesos的架构,可以参考这里的官方说明。 2. 什么是Marathon? Marathon是Mesos的一个Framework,用来执行需要长时间运行的任务。如果把Mesos比喻成数据中心的Kernel的话,那么Marathon就是它的init活着upstart守护进程。 它还具备HA,Health Checks,服务发现等功能。 3. 什么是Deimos? Deimos是一个Mesos的Docker接口(Plugin),Mesos的Executor,用来集成Docker容器,它是Mesos-Docker的替代产品。 4. 开始试验 4.1. 安装 如果你也用Vagrant的话,那么直接可以使用Provisioning脚本就可以了,我已经放到了GitHub上:https://github.com/liubin0329/mesos-marathon-deimos-vagrant 下载下来之后直接vagrant up就可以。 如果是手工自己安装,可以参考install.sh脚本。 4.2. 测试 启动服务之后,就可以使用例子中的JOB测试了。 为了启动速度,我们预先pull镜像下来。 然后就可以提交Job了。 这个job.json很简单,其意义也很容易理解。主要是cmd这个参数,这是一个简单的理由nc命令实现的Web服务器,放8090端口的时候只是打印出Hello World而已。 值得注意的是如果你的机器硬件不是特别好,需要注意提交job的时候设施合适的CPU和内存使用量,否则很可能导致因为申请不到资源而不能启动任务。 5.

Posted in Docker, Tech

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