标签: 运维 测试环境搭建 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、解析无限个二级域名的方法