SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4085|回复: 6

简单的发布逻辑

[复制链接]
发表于 2015-11-9 11:12:51 | 显示全部楼层 |阅读模式
这个版块没有人写,我就写写我四年前的公司搞的一套发布逻辑吧


逻辑说明

1、根据服务器列表、分组、批次,计算每次并发发布的机器数量(提高发布效率,减少发布时间)

2、根据不同的发布类型走不同的流程  测试/线上/预发布 等

3、判断服务器部署类型(仅仅以tomcat类型举例,其实支持静态文件,dubbo类型java自启动,rpm等)

4、判断发布过程中是否关闭Nagios
5、判断发布过程中,是否关闭 上下线机制(以前的业务逻辑是有严格的上线和下线开关,一旦开关启动,流量就不在分发到要部署的机器)

6、判断发布过程中,是否关闭tomcat

7、如果需要关闭tomcat,检查tomcat是否运行,端口是否存在

8、启动下线开关 【可选】

9、判断是否使用服务化,stop服务化【可选】

10、等待10秒,并时时刻刻监控服务连接状况,如果存在继续等10秒,直到无服务无连接

11、关闭tomcat(也可以选择kill -9) 【可选】

12、rsync待发布文件到应用服务器

13、当然清理删除tomcat缓存

14、启动tomcat 【可选】

15、curl -I http://127.0.0.1:port/页面或接口 返回200确认服务正常,可以指定多个关键链接,确定服务正常运行

16、注册服务化【可选】

17、激活上线开关,引入流量 【可选】
 楼主| 发表于 2015-11-9 11:24:38 | 显示全部楼层
一般沙发都是自己坐!!!
回复 支持 反对

使用道具 举报

发表于 2015-11-18 15:37:14 | 显示全部楼层
踩踩~~发布流程大部分其实都差不多,只是每个公司需求部署的情况有差异
回复 支持 反对

使用道具 举报

发表于 2017-9-11 10:08:07 | 显示全部楼层
推荐给楼主一个在 tomcat 下的热部署管理工具,发布的时候不用停止 tomcat 服务,直接用这个管理工具就能直接部署应用了。

Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具。

官方网站


回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 16:05:32 | 显示全部楼层
yjg021 发表于 2017-9-11 10:08
推荐给楼主一个在 tomcat 下的热部署管理工具,发布的时候不用停止 tomcat 服务,直接用这个管理工具就能直 ...

有安全风险,我们考虑过,公司未采用,我们自己开发了监控系统,有兴趣可以聊聊哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-10 16:10:56 | 显示全部楼层
yjg021 发表于 2017-9-11 10:08
推荐给楼主一个在 tomcat 下的热部署管理工具,发布的时候不用停止 tomcat 服务,直接用这个管理工具就能直 ...


3.2 删除默认文件
删除TOMCAT默认示例文件、帮助文件、后台管理界面等,禁止使用manager/admin管理后台。需删除的文件和目录清单如下:
$CATALINA_BASE/server/webapps/manager
$CATALINA_BASE/server/webapps/host-manager
$CATALINA_BASE/webapps/balancer
$CATALINA_BASE/webapps/manager
$CATALINA_BASE/webapps/host-manager
$CATALINA_BASE/webapps/webdav
$CATALINA_BASE/webapps/tomcat-docs
$CATALINA_BASE/webapps/jsp-examples
$CATALINA_BASE/webapps/servlets-examples
$CATALINA_BASE/webapps/examples
$CATALINA_BASE/webapps/docs
$CATALINA_BASE/conf/tomcat-users.xml
3.3 启动帐号
建立独立用户,用户名和组名均为tomcat,不设置密码(即禁止SSH登录),tomcat进程以此帐号身份运行,严禁以root权限运行tomcat,禁止以个人帐号或其他有shell权限的帐号运行tomcat。可选如下方法之一来实现非ROOT启动tomcat:
3.3.1 修改启动脚本
在$CATALINA_BASE/startenv.sh里面export环境变量:
export TOMCAT_USER=tomcat
同时需要修改$CATALINA_HOME/bin/startup.sh
修改前
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
修改后
if [ -z "$TOMCAT_USER" ]; then
    exec "$PRGDIR"/"$EXECUTABLE" start "$@"
else
    exec su $TOMCAT_USER -c "$PRGDIR/$EXECUTABLE start $@"
fi
3.3.2 使用jsvc来启动tomcat
在jsvc配置文件里面指定参数
-u tomcat
3.4 禁止列目录
配置$CATALINA_BASE/conf/web.xml文件,防止直接访问目录时由于找不到默认主页而列出目录下所有文件。
<servlet>
        ......
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        ......
</servlet>
3.5 日志记录
必须打开access log记录功能,按小时或按天记录。prefix/fileDateFormat/pattern可自定义,但必须记录关键信息,例如:源IP,Host、时间、请求、状态码、数据大小、UA等。注意:如果前端是NG做反向代理,默认的pattern="combined"和pattern="common"不能记录用户的真实IP,必须自定义pattern,记录客户端真实IP(X-Real-IP)。access log应该定期压缩上传至中央日志服务器保存。$CATALINA_BASE/conf/server.xml配置示例:
<Valve className="org.apache.catalina.valves.AccessLogValve"
    directory="logs"  prefix="自定义" suffix=".log"
    fileDateFormat="yyyy-MM-dd-HH"
    pattern="%a %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot; %{X-Real-IP}i"
    resolveHosts="false"/>
特殊情况如不需要记录日志,请向运维组报备,运维组将记录在wiki。
3.6 禁止使用jmx
如之前已经启用,在启动脚本里面(catalina.sh或startenv.sh)删除CATALINA_OPTS变量里面jmxremote相关参数即可。
http://www.blogjava.net/happyy2k/archive/2009/04/22/266881.html
3.7 禁止使用AJP
配置$CATALINA_BASE/conf/server.xml文件,注释或删除如下部分。
注释前
<Connector port="*" maxThreads="*"
               enableLookups="false" redirectPort="*" protocol="AJP/**" />
注释后
<!--
<Connector port="*" maxThreads="*"
               enableLookups="false" redirectPort="*" protocol="AJP/**" />
-->
3.8 目录权限
默认情况下,tomcat启动用户对WEB目录下所有文件及子目录应无写权限。标准配置:文件属主为root.root,权限为0755。
日志文件及cache文件应放在WEB目录之外,

3.9 可写目录禁止执行
如tomcat需支持上传功能,或因其它原因需要对WEB目录有写权限,那么应该限制这些可写目录禁止执行jsp脚本。上传功能在代码实现中,通常会存在各种各样的安全漏洞,导致上传限制被绕过,被攻击者上传jsp文件进而获取web shell。设置可写目录禁止执行jsp,是一道非常重要的防线!注意:这里指的不是去除文件系统rwx权限中的x,文件系统权限中的x可以保留,无危害。
appdir路径有几种可能:
(1) 默认位置
appdir="$CATALINA_BASE/webapps/ROOT"
(2) 默认位置下指定了appname
appdir="$CATALINA_BASE/webapps/$appname"
(3)通过docBase参数指定的路径
appdir="$docBase"
以下是通过UrlRewriteFilter模块来限制的示例配置,如果WEB-INF及相关目录不存在,创建一个即可。
3.9.1 部署jar
http://tuckey.org/urlrewrite/获取最新版本的urlrewrite jar包,把"urlrewrite-x.x.x.jar"拷贝到"$appdir/WEB-INF/lib"目录下
3.9.2 修改web.xml加载filter
在"$appdir/WEB-INF/web.xml"增加如下配置项
<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
3.9.3 设置规则禁止上传目录执行jsp
新建配置文件"$appdir/WEB-INF/urlrewrite.xml",假设/upload/和/images/logo/目录需要设置为禁止执行jsp,配置如下:
<?xml version="1.0" encoding="utf-8"?>

<urlrewrite>
    <rule>
        <from>.*/[\.]*/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>
    <rule>
        <from>^/upload/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>
    <rule>
        <from>^/images/logo/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>
</urlrewrite>
第1条rule用于拦截/重写类似这样的非法请求,这条必不可少,否则其它规则会被绕过!
http://host//shell.jsp
http://host/dir/../shell.jsp
http://host/./shell.jsp
第2条rule用于拦截/重写类似这样的非法请求
http://host/upload/shell.jsp
http://host/upload/dir/shell.jsp
第3条rule用于拦截/重写类似这样的非法请求
http://host/images/logo/shell.jsp
http://host/images/logo/dir/shell.jsp
如果有其它目录需要禁止执行jsp,参照第2条和第3条进行配置即可。
如果根目录及子目录都禁止执行jsp,配置为
    <rule>
        <from>^/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>

设置完成并重启tomcat后,请用curl(如果用浏览器,某些特殊的请求会被浏览器净化,达不到测试目的)来验证设置是否生效:
curl -i http://host/upload/shell.jsp
curl -i http://host/upload/dir/../shell.jsp
具体的URL地址请做相应替换

回复 支持 反对

使用道具 举报

发表于 2017-11-15 10:56:28 | 显示全部楼层
踩踩,谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2018-10-19 20:20 , Processed in 0.083609 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表