{channel.title!channel.name} - 楚淮公司周东林

Tomcat下多应用部署

黔东南州某个项目延伸至各县区,不知道开发是怎么想的每个县区一个项目。总共就一台16G内存的服务器,十六个县市区。


1.项目背景

贵州省黔东南州某个项目,延伸至十六个县市区,每个县区一个APP。只有4核心一台16G内存的虚拟机。因为项目都是 spring+mvc+mybatis 架构,暂时能想到最节省资源的方法就是把几个项目放到同一个 Tomcat 下共用相同的 JAR 包。因为项目都需要绑定域名,所以 Tomcat 下还不能有项目名文件只能放在 ROOT 下或者是修改 server.xml 。前端通过 squid 或者 NGINX 来绑定域名(我用的 squid)。

2.Tomcat 配置

给出主要配置

    <Service name="kaili">
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
    <Connector port="800" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="kaili" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="kaili"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
    <Service name="cengong">
    <Connector port="81" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
    <Connector port="801" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="cengong" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="cengong"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
<Service name="shibing">
    <Connector port="82" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
    <Connector port="802" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="shibing" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="shibing"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
<Service name="sansui">
    <Connector port="83" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
    <Connector port="803" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="sansui" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="sansui"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
<Service name="danzhai">
    <Connector port="84" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
    <Connector port="804" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="danzhai" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="danzhai"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>

我这里 Tomcat 下面放了五个项目,用了80,81,82,83,84五个端口作为 HTTP 端口。然后在 Tomcat 下分别建了 kaili、cengong、shibing、sansui、danzhai五个目录用来存放项目。并且把所有项目 WEB-INF\lib 目录下的 jar 文件移动到 Tomcat 目录下的 lib 文件夹里。

3.注意事项

为了绑定域名,也就是不想访问路径带有项目名,项目文件需要放在 ROOT 里面(记得必须是大写的);项目 WEB-INF\lib 目录下的 jar 包,别忘了移动到 Tomcat 的 lib 目录;当然修改 Tomcat 内存、安装 native等优化还是要做的;项目本身配置文件还要做修改 比如 WEB-INF下的 web.xml 命名不要都一样、WEB-INF\classes 中 ehcache.xml 命名空间别名也不能设置一样。

总之可能还有其他杂七杂八的报错,根据 Tomcat 日志报错信息细心排查总会成功的。


浏览.发表于:2017-06-16 23:21:09