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. 用fscanf()从文件取数据时,如何判断文件结束

    例子:从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文件中.再从该文件中读入这些数据,将其中小写字母转换成大写字母后再显示屏上输出. 有两种方法 1.使用feof()函数 #inclu ...

  2. BZOJ 3155: Preprefix sum

    大意:给一个数组,先求出SUM[I],然后动态的求出1-I的SUM[I]的和, 这题得化公式: 树状数组维护两个和:SUM(A[I])(1<=I<=X); SUM(A[I]*(N-I+1) ...

  3. 表单很多数据项录入的时候,提交controller发生异常,数据回显。

    1.添加的情况(Model传递Form Data) request.getSession().setAttribute("car", car); //抛出异常的时候,数据回显. 2 ...

  4. HDU 1715 大菲波数(JAVA, 简单题,大数)

    题目 //BigInteger 和 BigDecimal 是在java.math包中已有的类,前者表示整数,后者表示浮点数 import java.io.*; import java.util.*; ...

  5. hdu 4462(状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4462 思路:由于数据不大,可以直接将所有的状态表示出来,然后枚举,判断能否将方格全部覆盖. http: ...

  6. 问题:-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the view outlet was not set.

    问题:-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "BlueView" nib but the vie ...

  7. 李洪强iOS开发之OC[008] -创建一个对象并访问实例变量

    // //  main.m //  07 - 创建一个对象并且访问实例变量 // //  Created by vic fan on 16/7/3. //  Copyright © 2016年 李洪强 ...

  8. 叠罗汉I

    叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上.同时我们应该让下面的人比上面的人更高一点.已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人.注意这里的人都 ...

  9. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)

    前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及M ...

  10. sql server UI怎么设置自增加id?

    设置表结构的时候,设置标识列就可以了啊 来自为知笔记(Wiz)