web项目开发中,有三个实践对于项目成功是非常重要的:

1. staging servers

2. Version control workflows

3. Tested, repeatable deployments.

Staging Servers:

什么是Staging server呢?基本想法是 staging=production-users。如果你是facebook,google那么你可能早已经有了成熟的工作流程,你已经有了一些具备多级staging/production的系统,你可以动态地更改他们。你已经有了一些天才为你工作,听听他们怎么想就可以了。这篇文章适合于那些没有为自己工作的天才的老板们,对于那些处于“要么在开发人员电脑上运行”,“要么在生产环境中运行”状态的团队。

为什么我们需要staging servers? 任何可能在生产环境会down机的情况都需要再staging server上首先发生!正是因为这个原因,你总是希望staging server环境和production server环境越接近越好。如果生产环境处理信用卡业务,那么staging环境同样也要处理信用卡。这意味着如果你的支付网关配置收到影响,那么你将在staging server上发现这个情况,而不是放到production server上才发现。如果你的production server使用ruby1.9,那么你的staging server也要使用ruby1.9.如果你的production server上使用memcache并放在12345端口,那么staging server上同样在12345端口上使用memcache.

配置一台staging server是很简单的。如果对你来说不简单的话,那么意味着你的infrastructure本身就存在问题了,只是你不知道而已:你可能是长时间地对你的production server粗制滥造,比如手工ssh到你的系统中,调整你的配置而没有任何关于你做了什么的log。你没有一个归档的过程或者自动化的脚本来从头创建你的production server.如果你有那个如何创建你的production server的归档记录或者自动化创建脚本,那么你一定可以在一个小时内把staging server搭建起来,而这个stagingserver基本上和production server是一样的。

大部分人可能没有能力这样做如果他们没有仔细思考这个问题的话。这是可以解决的,而且应该解决。这有实质性的好处:如果你有一个可以重复的过程来provisioning一个产品环境的话,那么有一天如果发生了系统崩溃,你将有信心在很快执行一个流程恢复系统。信心是很重要的,因为一旦发生灾难,你将无所适从,而无所适从的情况下,你是很难免于犯错的。所以一切有备无患。

保持你的服务器配置在一个脚本中比在服务器上分别配置多处(比如/etc/environment,/etc/crontab,/usrlocal/nginx/conf/apps/appname.conf etc)的好处是这个脚本可以放在版本控制系统中。你的cron jobs?如果他们本身也被版本控制,那么你将有你的系统变更的过程记录。

在你准备好了能够重复生产你的staging environment时,你可能希望做一个小小的修改。很多公司可能不希望他们的staging environment放到公网上,因为这样的话,客户不会在成熟之前看到系统的墨阳,而严重的问题永远不会影响到外面的世界。有很多种方式来这样做:理想地,你只要在防火墙上配置规则,任何从互联网上来的能够进入到你的staging environment.

我的staging environment仅仅包含ngix的一片小代码,它拒绝任何人的访问,除非一个特定的host被允许。这将会break和外部server的集成,比如twilio,spreedly,他们是需要callback的。所以我就对这两个url做一个例外,允许他们访问。

另外一个问题是:你如何populate一些数据到staging server上去呢?我通常使用seed脚本,手工增加一些数据。你也可以dump production DB并且加载到staging DB上去。

staging server, source congtrol, deply workflow using git的更多相关文章

  1. 什么是staging server

    原文链接:http://blog.csdn.net/blade2001/article/details/7194895 软件应用开发的经典模型有这样几个环境:开发环境(development).集成环 ...

  2. Debezium SQL Server Source Connector+Kafka+Spark+MySQL 实时数据处理

    写在前面 前段时间在实时获取SQLServer数据库变化时候,整个过程可谓是坎坷.然后就想在这里记录一下. 本文的技术栈: Debezium SQL Server Source Connector+K ...

  3. Windows server R2 2008上部署gogs git

      所需的环境 1.     安装mysql                       安装路径:F:\MySQL Server 5.7 2.     安装gogs                  ...

  4. mac os 利用ssh 搭建git server服务器详细教程,以及git基本用法

    详细讲mac 连接mac的git操作 首先在服务端上 第一:新建一个仓库 1, cd /Users/userName/projects 用linux命令进入一个你想要创建与他人共享的文件夹. 2,su ...

  5. git workflow常用命令

    git init git status git add readme.txt git add --all         Adds all new or modified files git comm ...

  6. [Git] An efficient GIT workflow for mid/long term projects

    reference : http://fle.github.io/an-efficient-git-workflow-for-midlong-term-projects.html Our full-w ...

  7. How To Use Git Source Control with Xcode in iOS 6

    This tutorial is by Malek Trabelsi, a passionate iOS developer from Tunisia focused primarily on mob ...

  8. Windows下安装 msysGit 以及初始化 Git server环境

    Windows下git工具msysGit使用以及Git server初始化 Windows下git工具,这里选择msysGit,版本为msysGit-netinstall-1.8.1.2-previe ...

  9. 小白也能用Git管理团队项目了:百度云同步+Git Extensions+Git Source Control Provider

    百度云同步 百度云同步,会将本地的某个文件目录和云端进行同步.如果在本地将这个同步的目录设置为Git的中心服务器,那么本地push到中心服务器的内容也会被同步到云端.其他开发者只要也进行相同的设置,就 ...

随机推荐

  1. HDOJ 3486 Interviewe

    人生中第一次写RMQ....一看就知道 RMQ+2分但是题目文不对题....不知道到底在问什么东西....各种WA,TLE,,RE...后就过了果然无论错成什么样都可以过的,就是 上层的样例 啊  I ...

  2. 在线运行HTML代码器

    在线运行HTML代码器(二)和前面的(一)大同小异,关键部分为JS代码,这次是把运行器所有的JS功能集中放在一起.以下为HTML代码: <!DOCTYPE html PUBLIC "- ...

  3. Android fill_parent、wrap_content和match_parent的区别

    三个属性都用来适应视图的水平或垂直大小,一个以视图的内容或尺寸为基础的布局比精确地指定视图范围更加方便. 1)fill_parent 设置一个构件的布局为fill_parent将强制性地使构件扩展,以 ...

  4. 在iptables防火墙下开启vsftpd的端口

    在开启vsftpd端口后发现用客户端工具能登陆,但无法浏览文件和新建文件.此时看了一下ftp的协议,发现ftp有主动模式和被动模式.在服务端开21端口是让客户端进来,并没有出去的端口,还在服务端开启出 ...

  5. Java 8怎么了:局部套用vs闭包

    [编者按]本文作者为专注于自然语言处理多年的 Pierre-Yves Saumont,Pierre-Yves 著有30多本主讲 Java 软件开发的书籍,自2008开始供职于 Alcatel-Luce ...

  6. 总结 | 如何测试你自己的 RubyGem

    如何测试一个Gem gem 开发完了,想要给别人用,那就需要测试啊,测试一个 gem 其实很简单,这里我们用 minitest 为例, rspec 也一样适用.先来看看我们当前这个 gem 的目录结构 ...

  7. HYSBZ2038 小Z的袜子(莫队算法)

    今天学了一下传说中的解决离线询问不修改的一种算法.题目的意思非常简单,就是询问在一个[L,R]区间里的取两个物品,然后这两个物品颜色相同的概率.其实就是对于每种颜色i,这个区间里对应的个数cnt[i] ...

  8. UPC 2224 Boring Counting (离线线段树,统计区间[l,r]之间大小在[A,B]中的数的个数)

    题目链接:http://acm.upc.edu.cn/problem.php?id=2224 题意:给出n个数pi,和m个查询,每个查询给出l,r,a,b,让你求在区间l~r之间的pi的个数(A< ...

  9. HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)

    做这道题之前,建议先做POJ 1151  Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...

  10. initWithFrame方法的理解

    initWithFrame方法的理解   有时候,知道initWithFrame方法如何用,但是么有弄明白initWithFrame方法到底是什么? 那就通过查资料弄明白.     1. initWi ...