如何配置测试环境,支持多分支开发

标签: 运维 测试环境搭建 apache


编 写:袁 亮
时 间:2016-09-05
说 明:如何配置测试环境,支持多分支开发

一、目的

1、业务开发,多人合作的时候,需要开启多个分支
2、每个分支的开发、调试、访问需要能跟其他分支独立

二、分支独立需要考虑如下问题

1、需要配置独立的访问规则,来支持各个分支
    要求:访问规格更改不需要改动程序
2、配置文件,每个分支可以自行配置,也可以使用通用的
    包含配置:
        数据库、缓存、静态文件等等
    解决方案:
        SetEnv CI_ENV development
        development配置目录不要放在svn里,通过svn ignore忽略
3、图片、文件上传
    解决办法:所有上传,走统一的接口,返回上传之后的地址即可,各个分支一样
4、api接口
    解决办法:在各自分支里,调用不同的api分支

三、访问规则配置方案

1、方案一:
    实施:将分支名以目录的形式放在测试hosts之后,比如shopdev的配置
    优点:新建分支很简单,在相应目录下建个分支目录即可
    缺点:因为多了一层目录,会导致整个的访问规则都不一样了,代码中需要做相应的兼容判断,比如出现这种:
        http://shopdev.ci123.com/svn/yungou/webroot/index_yiqigou.php/item-5287.html?store_id=120&share_uid=406259
        或者直接/目录开头的访问等等

2、方案二:
    实施:将分支名以泛域名解析的形式,隐藏到hosts里
    优点:对程序不用做任何改动,访问规则完全兼容(ps:代码里写死了绝路路径的这种自己挖坑的另算)
    缺点:测试域名一般不是实际解析的域名,也意味着没有走DNS解析的过程,只能通过hosts来实现
        而hosts并不具备解析功能,隐藏泛解析这种hosts是做不了的,只能每个分支自己加hosts
        ps:如果嫌加hosts麻烦,可以考虑将测试域名做实际解析
            或者在公司内部自建DNS(bind),缓存非测试域名,测试域名自己做解析
            比较麻烦,没太大意义,暂时不考虑
    其他:
        直接使用nginx+fastcgi会更简单,只是我们使用的apache为主,因此是配置的nginx+apache的方式

四、方案二实施

1、nginx 配置泛域名解析
    server_name通配符即可

2、apache支持泛域名解析(rewrite方式)
    1.1 ServerAlias 通配符实现泛解析
    1.2 rewrite 实现将分支名转为相应的目录名
    1.3 框架本身的rewrite重写
    1.4 静态文件rewrite重写

3、hosts 处理
    需要使用的分支,自行添加hosts

五、yungou.ws测试机最终使用

1、svn 创建分支,checkout到/opt/ci123/www/html/seller_shop下
    ps:分支名只支持大小写字母、数组、_组成的字符串
2、本地添加hosts
    192.168.0.249 分支名.yungou.ws
3、浏览器访问 (一些老旧浏览器需要强刷或者重启)
    分支名.yungou.ws

六、apache rewrite 概述

RewriteEngine On

# 将所有非static静态文件的请求,全部达到webroot的index中,框架本身的rewrite要求,将分支名嵌入进去
RewriteCond %{HTTP_HOST} [\w_]+.yungou.ws
RewriteCond %{REQUEST_URI} !static.*
#将hosts放到rewrite匹配源中,需要其中的分支名作为后续使用 跟下一条规则关联
RewriteRule ^(.+) %{HTTP_HOST}$1 [C] 
RewriteRule ([\w_]+).yungou.ws(.*) /$1/webroot/index.php/$2 [L]

# static 静态文件目录不rewrite,直接访问
RewriteCond %{HTTP_HOST} [\w_]+.yungou.ws
RewriteCond %{REQUEST_URI} static.*
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ([\w_]+).yungou.ws(.*) /$1/webroot/$2 [L]

附:参考文档

1、nginx泛解析域名实现多级域名多个同时绑定
2、nginx泛域名解析实现二级域名多域名
3、Apache 2.2 + Tomcat 泛域名解析 动态二级域名
4、使apache解析域名到目录的方法
5、Apache的Rewrite规则详细介绍
6、Apache Module mod_rewrite
7、解析无限个二级域名的方法