美文网首页
阿里云生产服务器迁移及应用部署(tomcat容器及自定义shel

阿里云生产服务器迁移及应用部署(tomcat容器及自定义shel

作者: 许俊贤 | 来源:发表于2018-12-05 23:43 被阅读0次

    声明:因属于生产服务器,仅作操作记录。(部分涉及公司信息将替换或隐藏)

    镜像备份

    由于使用阿里云的服务器故使用了镜像备份,具体操作很简单,可阿里云查看即可。

    迁移前准备

    因使用旧镜像,故仅需测试所需软件即可。
    SSH工具:SecureCRT、SecureFX(可替换其他工具,Puttty、SSH Secure)
    应用:java(1.6、1.7、1.8)、tomcat(8.0.50)、nginx、redis、LibreOffice、cronolog、ELK等。(本人其他文章有另外介绍)

    阿里云安全组策略:入栈规则:正常开放80、443端口即可。出站规则根据实际需求,通常默认全开。

    迁移

    阿里云新服务器使用之前备份的镜像即可,只需等待一定的时间即可登录新的服务器了。

    检查iptables状态

    如果无安装可使用:yum install -y iptables安装或yum update iptables 升级。

    设置iptables规则

    #查看iptables现有规则
    iptables -L -n
    #先允许所有,不然有可能会杯具
    iptables -P INPUT ACCEPT
    #清空所有默认规则
    iptables -F
    #清空所有自定义规则
    iptables -X
    #所有计数器归0
    iptables -Z
    #允许来自于lo接口的数据包(本地访问)
    iptables -A INPUT -i lo -j ACCEPT
    #开放22端口
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    #开放21端口(FTP)
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    #开放80端口(HTTP)
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    #开放443端口(HTTPS)
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    #允许ping
    iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
    #允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    #其他入站一律丢弃
    iptables -P INPUT DROP
    #所有出站一律绿灯
    iptables -P OUTPUT ACCEPT
    #所有转发一律丢弃
    iptables -P FORWARD DROP
    

    保存iptables规则

    service iptables save
    

    注:也可以修改/etc/sysconfig/iptables文件,以上规则可以根据实际需要开放。

    重启iptables

    service  iptables restart
    

    角色创建

    创建用户组

    groupadd -g 500 tomcat
    groupadd -g 501 nginx
    groupadd -g 502 redis
    groupadd -g 503 app
    

    以上仅供参考,非实际数据。

    创建用户组,及用户组标识号(非系统工作组大于等于500,系统工作组的组小于500)。

    创建用户

    useradd –d /usr/tomcat -m tomcat -g tomcat
    

    仅作为实例。

    创建tomcat用户属于tomcat组,并且指定home目录为/usr/tomcat ,无则创建该目录。
    可直接用root用户设置用户密码.
    passwd tomcat (根据步骤输入两次即可)

    文件授权

    创建相应文件夹或已有的文件夹

    mkdir  /usr/tomcat
    

    更改文件夹和文件拥有者

    chown -R 777 tomcat:tomcat /usr/tomcat
    

    授权tomcat用户组下tomcat用户,/usr/tomcat下所有文件及文件夹的所有权限(777,读、写、执行),-R为遍历根目录。

    注:需在/usr/tomcat/XXX/bin目录下为*.sh执行授权 chmod u+x *.sh

    安装软件

    以安装Liberoffice为例。

    以root安装则很简单

    sudo yum install ./LibreOffice_4.x.x_Linux_x86_rpm/RPMS/*.rpm
    

    以非root安装(推荐)

    需要先Yum install授权,编辑/etc/sudoers。

    vi /etc/sudoers
    

    在root用户下面增加一条如以下示例

    root ALL=(ALL) ALL
    app ALL=(ALL) ALL
    

    则可使用app用户安装所需软件,

    yum install ./LibreOffice_5.x.x_Linux_x86_rpm/RPMS/*.rpm
    

    部署应用

    本文以tomcat为例,nginx、redis、oracle、cronolog、ELK等有其他文章专门介绍。

    因迁移时,已经具备java环境故此处默认已有,linux配置java环境也很简单可自行查阅、部署。

    部署方式1

    官网下载相应版本即可:下载地址 。 推荐从官网下载相应版本中的最新小版本,因官方会修复一些已知的漏洞后发布出来且删除旧的有漏洞的版本。

    也可以wget下载。

    wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz
    

    然后解压即可

    tar -xzvf apache-tomcat-8.0.53.tar.gz
    

    修改./conf/server.xml 文件

    vi ./conf/server.xml
    

    修改Connector标签的port端口根据实际需求即可。此处部署是带证书的,所以需要增加一条Connector。因项目原因会屏蔽一些字眼。

    <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
      <Connector URIEncoding="UTF-8" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150" minSpareThreads="15" port="443" redirectPort="1889" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="keystore/www.xxx.com.jks" keystorePass="xxx" clientAuth="false" sslProtocol="TLS" ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,SSL_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />
      <Engine defaultHost="localhost" name="localhost">
      <Host name="localhost" appBase="webapps" autoDeploy="true" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 
        <Context docBase="/usr/local/webapps/example1" path="/example1" reloadable="false" />
        <Context docBase="/usr/local/webapps/example2" path="/example2" reloadable="false" />
      </Host>
    </Engine>
    

    注:以上示例需以root运行tomcat,因非root用户无法监听1024以下的端口。reloadable线上环境记得设置成false。

    当然,规范肯定是以其他用户启动的,可以使用iptables做端口转发的策略绕过此限制。

    如80-8081 443-8443 ;

    Iptables需增加端口转发(80->8081/443->8443)
    *nat 下面增加

    -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081
    -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
    

    部署方式2(推荐)

    此方式以一份tomcat实例,通过修改配置文件、环境变量、脚本来实现。(开发工具也是使用此形式实现的。)

    官网下载相应版本即可:下载地址 。 推荐从官网下载相应版本中的最新小版本,因官方会修复一些已知的漏洞后发布出来且删除旧的有漏洞的版本。

    wget下载。

    wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz
    

    然后解压即可

    tar -xzvf apache-tomcat-8.0.53.tar.gz
    

    然后编写如下脚本(仅作示例)

    setenv : 用于配置环境变量

    /bin/sh
    TOMCAT_USER=tomcat
    export JAVA_HOME=/usr/java/jdkxxx
    export CATALINA_HOME=/usr/tomcat/apache-tomcat-xxx
    export JAVA_OPTS="-server -XX:PermSize=128m -XX:MaxPermSize=256m -Xms512m -Xmx1024m"
    

    starup:启动脚本

    #!/bin/sh
    export CATALINA_BASE=$(cd `dirname $0`; pwd)
    . $CATALINA_BASE/setenv.sh $*
     
    WHO=`whoami`
    COUNT=$(ps -ef|grep "^$WHO"|grep $JAVA_HOME|grep $CATALINA_HOME|grep "$CATALINA_BASE "|grep -v 'grep'|wc -l)
     
    if [[ $WHO == root ]];then
      echo "切换到 $TOMCAT_USER 执行.."
      su - $TOMCAT_USER -c "$CATALINA_BASE/startup.sh"
      #|awk '{printf "..."}END{print "Finished"}'
      exit 1;
      elif [[ $WHO == $TOMCAT_USER ]];then
      
      echo "*******************************************************"
      echo "当前配置目录:$CATALINA_BASE"
      echo "*******************************************************"
      if [[ $COUNT -ge 1 ]];then
      echo "服务正在运行,请先 shutdown."
      else
      $CATALINA_HOME/bin/catalina.sh start|awk '{printf "..."}END{print "启动完毕"}'
      if [[ $? == 0 ]];then
      echo "TOMCAT 启动成功 @$CATALINA_BASE"
      fi
      fi
      echo "进程信息:"
      ps -ef|grep "^$WHO"|grep $JAVA_HOME|grep $CATALINA_HOME|grep "$CATALINA_BASE "|grep -v 'grep'
      
      fi
    

    shutdown:关闭脚本

     #!/bin/sh
     export CATALINA_BASE=$(cd `dirname $0`; pwd)
     . $CATALINA_BASE/setenv.sh $*
     
     WHO=`whoami`
     
     GetPid(){
     PS_ID=$(ps -ef|grep "^$WHO"|grep $JAVA_HOME|grep $CATALINA_HOME|grep "$CATALINA_BASE "|grep -v 'grep'|awk '{print $2}')
     }
     
     ShowPid(){
     echo "进程信息:"
     ps -ef|grep "^$WHO"|grep $JAVA_HOME|grep $CATALINA_HOME|grep "$CATALINA_BASE "|grep -v 'grep'
     }
     
     CountPid(){
     COUNT=$(ps -ef|grep "^$WHO"|grep $JAVA_HOME|grep $CATALINA_HOME|grep "$CATALINA_BASE "|grep -v 'grep'|wc -l)
     }
     
     StopTomcat(){
     STOP_RESULT=`$CATALINA_HOME/bin/catalina.sh stop >/dev/null 2>&1|grep "Connection Refused"|grep -v grep|wc -l`
     }
     
     if [[ $WHO == root ]];then
     echo "切换到 $TOMCAT_USER 执行.."
     su - $TOMCAT_USER -c "$CATALINA_BASE/shutdown.sh"
     exit 1;
     elif [[ $WHO == $TOMCAT_USER ]];then
     
    CountPid
     
     if [[ $COUNT == "0" ]];then
     echo "服务没有启动."
     else
     
     ShowPid
     StopTomcat
    
     for((i=1;i<=30;i++));do
     for((j=1;j<=5;j++));do
     sleep 0.5
     printf "."
     done
     CountPid
     if [[ $COUNT -gt 0 ]];then
     StopTomcat
     elif [[ $COUNT -eq 0 ]];then
     break;
     fi
     done
     for((i=1;i<=120;i++));do
     if [[ $COUNT -gt 0 ]];then
     sleep 0.5 
     printf ".."
     CountPid 
     fi
     done
     #如果超时,直接杀死
     if [[ $COUNT -gt 0 ]];then
     GetPid
     kill -9 $PS_ID
     fi
     if [[ $? == 0 ]];then
     echo "TOMCAT 服务已停止 @$CATALINA_BASE"
     fi
     fi 
     fi
    

    jc:查看当前tomcat进程

     #!/bin/sh
     export CATALINA_BASE=$(cd `dirname $0`; pwd)
     . $CATALINA_BASE/setenv.sh $*
     
     echo "进程信息:"
     ps -ef|grep "^$TOMCAT_USER"|grep $JAVA_HOME|grep $CATALINA_HOME|grep "$CATALINA_BASE "|grep -v 'grep'
    

    rz:查看日志脚本

     #!/bin/sh
     
     CATALINA_BASE=$(cd `dirname $0`; pwd)
     tail -n 100 -f $CATALINA_BASE/logs/catalina.out
    

    相应的脚本编写完后进行打包,制作成模版,部署其他应用时直接使用,修改部分配置信息文件后即可。

     tar -zcvf tomcat-tmpl.tar.gz --exclude=tomcat/lib  tomcatxx
    

    注:排除了lib包,因所有tomcat示例都共享这个lib的jar包。

    后续部署时将当前模版解压后修改server.xml的端口、应用地址即可。

    优点:tomcat版本升级时只需升级tomcat文件即可,不用每个应用都去修改。

    备注:个人博客同步至简书。

    相关文章

      网友评论

          本文标题:阿里云生产服务器迁移及应用部署(tomcat容器及自定义shel

          本文链接:https://www.haomeiwen.com/subject/bzigcqtx.html