互联网创业的准备——版本控制与上线

注意:此文章写于2012-10-30,内容可能已过时,而且可能包含错误。

 

目前使用svn,尚未详细学习git的分支与主干,只会git基本语法是无法实现脚本上线的,待学习。

svn目录结构demo:

tags/
       movie_0.0.1
       movie_0.0.2
       www_0.0.1
       www_0.0.2
       pt_0.0.1

trunk/
         movie/
                   src/
                        model/
                   test/
                        model/
         www/
                   src/
                   test/
         pt/
                   src/
                   test/
branches/
              movie_0.0.2.1
              www_0.0.1.1

读写限制:tags是只读的,trunk和branches是读写的。

一个web项目会如果规模大,会分成多个模块开发,所以trunk下有多个模块目录,比如movie、www、pt。

如果人少,在trunk上开发简单方便。如果人多,则在branches上分多个版本开发。

如果多版本并行,则只能在branches上开发,比如chrome有stable、beta、dev并行开发和发布。

服务器环境划分——简单版:

example.com、movie.example.com、www.example.com 为internet外网线上生产环境,面向用户。

本地和线上使用相同软件环境,比如都安装到/usr/local/nginx/ 端口80,nginx.conf里写上include sites-enabled/*.conf

nginx/conf/sites-enabled/movie.example.com.conf放在svn里,如下:

server {
    listen       80;
    server_name  movie.example.com;
    root   html/movie.example.com/enabled/src/webroot/;

    location = /robots.txt {
    }
    location = /favicon.ico {
    }
    location / {
        rewrite .* /index.php last;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/usr/local/php/var/run/php-fpm.sock;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

本地开发时,配hosts:

127.0.0.1 movie.example.com
127.0.0.1 account.example.com

内部测试时,配hosts,比如:

192.168.1.3 movie.example.com
192.168.1.3 account.example.com

线上预览时,配hosts,比如:

 

74.125.31.161 movie.example.com
74.125.31.161 account.example.com

 

 

优点:简单

缺点:

1、如图所示

2、movie.example.com如何内网调用 0-0-2.account.example.com的API呢?

因为没有0-0-2.account.example.com的外网域名,所以无法调用。

如果添加0-0-2.account.example.com这个外网域名,会导致用户也可以访问,造成误解和搜索引擎收录。

如果配hosts或限制IP,会导致一旦更换IP,就需要重新审核录入(产品多了,更改IP的事情常有发生)。

 

服务器环境划分——完善版:

example.com、movie.example.com、www.example.com 为internet外网线上生产环境,面向用户。

*.intra.example.com 为intranet内部网(intranet不一定是lan局域网,可能也有外网ip,比如远程办公使用或者ipv6全是外网ip没有lan了),面向内部员工。

*.user.intra.example.com 个人开发调试环境,比如*.jim.user.intra.example.com解析到工程师jim的机器,开发movie项目时,域名是movie.jim.user.intra.example.com。注意:域名最大长度是253字节。

*.dev.intra.example.com 内部开发调试环境,比如trunk.movie.dev.intra.exmple.com或者0-0-3.movie.dev.intra.exmple.com。

*.prod.intra.example.com 内部线上生产环境,比如SOA业务之间api调用。比如0-0-3.movie.prod.intra.exmple.com需要调用0-0-2.account.prod.intra.exmple.com。预览时使用0-0-3.movie.prod.intra.exmple.com,测试完成,切换生效,对外是movie.example.com。

因为安全和集中管理,云主机或者自购服务器托管 和办公网不在同一个内网,所以需要VPN。参考:http://ariejan.net/2010/10/11/setup-a-ubuntu-vpn-server

每个人都设置VPN pptp比较麻烦,如果路由器支持Site to Site VPN会更方便,企业级路由器大都支持(比如TP-LINK TL-WVR300 ¥299)。参考:http://zhengweiit.blog.51cto.com/1109863/519821

家用级路由器如果支持DD-WRT开源系统,就能支持Site to Site VPN。参考http://www.dd-wrt.com/wiki/index.php/OpenVPN_-_Site-to-Site_routed_VPN_between_two_routers

如果购买了开源路由器可以配置dnsmasq,很方便,待验证企业级路由器是否支持。参考:http://www.cnblogs.com/sink_cup/archive/2012/08/17/router_dnsmasq_android_hosts.html

如果没有买开源路由器,则需要在内网自行搭建DNS,稍微麻烦点,但性能强。dnspod免费账户不支持子域名泛解析,比如用外网DNS解析*.jim.user.intra.example.com。

这里以trunk开发movie项目为例:

几个开发工程师从trunk上checkout,然后本地开发调试(movie.jim.user.intra.example.com、movie.tom.user.intra.example.com),自测完毕提交svn。

然后部署trunk到内部网的开发环境trunk.movie.dev.intra.example.com,进行开发工程师自测,如果是web,则界面测试;如果是api,则用代码测试。

开发工程师自测通过,打tag:

svn copy trunk/movie tags/movie_0.0.2

部署tag到线上内部环境0-0-2.movie.prod.intra.example.com,进行预览。

预览通过,把预览代码切换到线上movie.example.com。

然后大家继续在trunk上开发,线上的movie_0.0.2如果有bug,需要紧急修复,不能等到trunk下一版本再修复了,

那就建立branch:

svn copy tags/movie_0.0.2 branches/movie_0.0.2.1,

在branches上开发提交,然后打tag:

svn copy branches/movie_0.0.2.1 tags/movie_0.0.3

因为0.0.3作为一个紧急版本发布了,下一个trunk版本就会打0.0.4的tag然后发布。

 

版本号用几位?

常用的是3位发布(tags),4位开发(branches)。

也有4位发布的,比如chrome 22.0.1229.79。

使用自增还是日期?

采用自增比较多,采用日期的少,比如:

MIUI,每周五发布,比如2.10.12版就表示 2012年10月12日。

Ubuntu,每半年发布,比如12.04版表示2012年4月,12.10版表示2012年10月,但12.04.1版是8月发布的,表示基于12.04的第1个升级版。

每位的范围是多少?

自行参考现有的app store、google play。

如果使用3位自增 [0-99].[0-9].[0-9],第1版是0.0.1。

web每天或两天发布一次,1年以后版本号会增长到1.8.0,5年以后会增长到9.0.0……这时候创业也该成功或失败了吧……

小米手机的MIUI是每周发布一次,盛大bambook手机rom是每月发布一次……所以盛大不要搞了,歇着吧,项目管理能力和效率不行。

 

部署脚本:

主要功能:svn up、svn export、根据环境选择配置文件、打包上传、解包、重启web server、线上生效某一版本(生效旧版本即是回滚)

多种解决方案:make、shell、phing(ant)。

make和shell都不用安装额外的软件,linux已经支持了,所以很方便。

phing(ant)缺点是要安装软件,好处是以后可以用持续集成……(算了吧,国内公司很少达到这种境界的,有点繁琐)

这里介绍make,简单方便。按照完善版的环境划分进行部署。

todo

 

参考资料:

http://zh.wikipedia.org/wiki/Google_Chrome

 

广告:

创业需要PHP技术的,联系我:http://www.cnblogs.com/sink_cup/archive/2012/10/25/chuangye.html#me

posted @ 2012-10-30 12:04  sink_cup  阅读(4164)  评论(3编辑  收藏  举报
Creative Commons License

本站原创作品采用知识共享署名 3.0许可协议进行许可。