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. 由浅入深了解Thrift之服务模型和序列化机制

    一.Thrift介绍 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎.其允许你定义一个简单的定义文件中的数据类型和服务接口.以作为输入文件,编 ...

  2. C++ 第一次上机作业

    今天完成了C++第一次上机作业,感觉比较简单. 题目: 求2个数或3个正整数中的最大数,用带有默认参数的函数实现. 对3个变量按由小到大顺序排序,要求使用变量的引用. 编写一个程序,用同一个函数名对几 ...

  3. iOS多线程的初步研究(七)-- dispatch对象

    谈起iOS的dispatch(正式称谓是Grand Central Dispatch或GCD),不得不说这又是iOS(包括MacOSX)平台的创新,优缺点这里不讨论,只有当你使用时才能真正体会到.我们 ...

  4. C++ 读取REG_SZ 、REG_DWORD 、REG_MULTI_SZ 类型注册表值

    读取REG_SZ 类型的注册表键值 // 读取 REG_SZ 类型键值的代码 HKEY hKey = NULL; DWORD dwSize = ; DWORD dwDataType = ; LPBYT ...

  5. centOS学习part4:安装配置vsftp

    0 上一章(http://www.cnblogs.com/souvenir/p/3875934.html)我们完成了对远程工具VNC的安装配置,接下来我们将安装另外一个常用工具:VSFTP. vsft ...

  6. unity3d设置3D模型显示在2D背景之前(多个相机分层显示)(转)

    解决步骤: 1.添加一个摄像机,命名为BackgroundCamera,然后在Layer添加一个background层.并且将plane拖放到改相机节点下. 然后将BackgroundCamera和P ...

  7. java中String,StringBuffer,StringBuilder之间的区别

    文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...

  8. vi / vim 删除以及翻页 其它命令

    vim中翻页的命令 vim中翻页的命令 整页翻页 ctrl-f ctrl-b f就是forword b就是backward 翻半页 ctrl-d ctlr-u d=down u=up 滚一行 ctrl ...

  9. Android核心分析之二十八Android GDI之Surface&Canvas

    Surface&Canvas Canvas为在画布的意思.Android上层的作图几乎都通过Canvas实例来完成,其实Canvas更多是一种接口的包装.drawPaints ,drawPoi ...

  10. Linux下TOmcat调试命令

    1.显示linux系统的环境变量:env命令,会显示JAVA_HOME,Catalina,CLASSPATH等系统变量 2.