[Web]Web应用部署实践

十 18th, 2011

      对于每一个web测试项目,肯定会在环境搭建上花费了不少的时间,现在一般都会写好了自动化的部署脚本,但我觉得还是自己动手做一遍,这对于理解搭建过程的各个环节还是很有帮助的,我们需要了解的就是背后的细节。。。。

背景; apache + jetty + mod_proxy

1.  apache: web服务器,提供http服务。支持静态页,对于java 应用,它是无能为力的。
2.  jetty:应用服务器,是一个servlet容器,支持动态网页,弥补apache天生的不足。
3.  mod_proxy: 此模块实现了Apache的代理/网关。它实现了的功能就是:将发送给apache的动态请求转发给jetty,并接收jetty返回的html,并给予展示。

步骤:
0. 安装环境
   使用yum安装,使用公司提供的安装包。先检查机器上安装情况:yun list | grep ali
   1. jdk: yum install ali-jdk.x86_64
   2. apache: yum install ali-httpd22.x86_64       一定要安装2.2.15, 因为该版本应该包含了mod_proxy模块,节省时间
   3. jetty; yum install  ali-jetty.x86_64
   上述安装完成之后,不用对配置文件进行修改,我比较推荐将配置文件与安装路径分离开。(至于怎么用yum方式安装,这个我就先不多说了,以后再对此进行总结,这方面的资料现在也是比较多的)

1. 部署环境:
   a.将web应用的目录结构:
   webTest
   |–web-deploy
   |—-conf                    —httpd的配置文件
   |—-htdocs                —放置静态页面
   |—-jetty_server
   |——-conf                —jetty的配置文件
   |——-webapps        —放置war包
   |——-ext                 —放置jar包
   |—-templates          —资源文件
  
   下面三个配置项一般需要根据开发提供的antx.propertirs进行修改,根据项目的不同而不同
   b. httpd.conf的配置项:
   内容比较多,但是注意下面2个配置必须得改
   DocumentRoot "/home/admin/webTest/web-deploy/htdocs"
   Include /home/admin/webTest/web-deploy/conf/httpd/mod_proxy.conf
   
     c. jetty.conf的配置项
     <Set name="port"><Property name="jetty.port" default="7001"/></Set>   <!–与mod_proxy.conf中保持一致–>
    
     d. mod_proxy.conf的配置项:
     <IfModule mod_proxy.c>
    ProxyRequests Off
    ProxyPreserveHost On
    <Directory proxy:*>
        Order deny,allow
        Allow from all
    </Directory>
    ProxyPassMatch ^/(.*\.htm|.*\.jsp|.*\.do|.*\.dox|.*\.json)$ http://localhost:7001 min=5 smax=16 ttl=600 timeout=30
     </IfModule>

2. 启动服务
   0.设置环境变量:
      JETTY_CONF="/home/admin/webTest/web-deploy/jetty_server/conf/jetty.conf"
      START_INI="/home/admin/webTest/web-deploy/jetty_server/conf/start.ini"
      JETTY_ARGS="–ini=$START_INI"
  
      执行命令: export JETTY_CONF START_INI JETTY_ARGS

      按顺序执行下面2个启动命令:                                                           
   1.start_jetty:  /usr/ali/jetty/bin/jetty.sh start –ini=JETTY_SERVER_HOME/conf/start.ini
   2.start_httpd: /usr/ali/httpd22/bin/httpd -f  /home/admin/webTest/web-deploy/conf/httpd/ httpd.conf
  
   That’s all! 服务器搭建基本已经完成,剩下的就是将web应用搭建到服务器上!
   测试一下服务器工作是否正常:  wget -m http://localhost/index.htm
  
3. 问题记录:
   1. host绑定:我使用的机器10.20.143.85,机器名为vm-143,由于jetty的conf中没有去手动绑定host,导致使用默认的机器名vm-143,但是该名在hosts文件中并没有绑定到任何的127.0.0.1,导致jetty启动失败。打开/etc/hosts 文件, 加上一行 127.0.0.1  vm-143  即可.
    
4. 自动化怎么做?
   步骤0还是需要手动去安装的,拿到新机器,立即安装即可。
   1. 一些不变量, antx.properties 中定义好的路径。
            webTest.root               = /home/admin/webTest
            webTest.deployhome  = ${webTest.root}/web-deploy
            webTest.jettyserverhome  = ${webTest.deployhome}/jetty_server
            webTest.templates  = ${webTest.deployhome}/templates
            这些在war出现之前就已经定义好了,所有shell部署脚本中也就按照相应的路径进行copy。
           
     2. 脚本执行过程:
        a. checking:        检查环境是否准备好
        b. kill service:      不管服务是否已开启,先停掉
        b. copy files:       拷贝war包,配置文件,资源文件,已经一些启动服务的脚本
        c. start service:  启动服务,注意先给启动服务的shell脚本加上可运行的权限。
  
5. 已实现的自动化部署脚本结构
   ./webTest-pub.sh   ——执行bin目录下的sh脚本
   |bin
   |–base_env.sh     export一些环境变量
   |–function.sh        将一些公用的方法都写到这里,pre_env, httpd_start, http_stop…..  一般会去调httpd.sh,jettyctl.sh中的函数
   |–httpd.sh            实现httpd的启动和停止
   |–jettyctl.sh          实现jetty的启动和停止,启动jetty之前,检查war是否拷贝到webapp下
   |–killws.sh            停止 httpd, jetty服务—-调用function.sh中的函数
   |–startws.sh         启动jetty, httpd服务—–调用function.sh中的函数

这些只是我对刚刚完成的一个项目的小结,也没考虑太周全,以后再继续完善。

(全文完)





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51398

订阅本站:http://www.wangyuxiong.com/feed

分类: 测试技术         标签: , , ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量