引言
有一段時(shí)間沒有更新簡書了衅胀,今天遇到些后端運(yùn)維的問題滚躯,記錄一下掸掏。
需求如下:
需要在已經(jīng)部署了一個(gè)項(xiàng)目的linux 服務(wù)器上部署我自己的項(xiàng)目丧凤,互不干擾步脓。
有兩種解決方案:
① 一個(gè)容器 多個(gè)端口發(fā)布多個(gè)項(xiàng)目
② 多個(gè)容器 分別發(fā)布
linux下同一個(gè)tomcat用不同端口發(fā)布多個(gè)項(xiàng)目
一靴患、修改tomcat的conf目錄下的server.xml
配置service 節(jié)點(diǎn),有幾個(gè)項(xiàng)目就相應(yīng)的配置幾個(gè)service 節(jié)點(diǎn)农渊;
注意修改Service name; Connector port; Engine name; Host appBase這四項(xiàng)內(nèi)容
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina1">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina1" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps1"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="/route" reloadable="true" docBase="/home/develop/tomcat-7.0.54/flatrass"/>
</Host>
</Engine>
</Service>
<Service name="Catalina2">
<!--把port改成8081-->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="9543" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina2" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps2" ---這里要修改為修改后的webapps名稱
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="/route" reloadable="true" docBase="/home/develop/tomcat-7.0.54/flatrasweats"/>
</Host>
</Engine>
</Service>
</Server>
上面的配置文件需要直接復(fù)制server.xml中的Service節(jié)點(diǎn)囱挑。從本文復(fù)制可能會(huì)出現(xiàn)Tomact啟動(dòng)不了的坑!徽鼎!
二否淤、先依照此配置文件配置棠隐,完成后在tomcat根目錄下復(fù)制文件夾webapps助泽,粘貼重命名為webapps1嚎京,webapps2鞍帝,如下圖:此文件夾就是分別用來部署項(xiàng)目的帕涌。
三蚓曼、在tomcat根目錄下的conf文件中钦扭,復(fù)制conf文件夾下的Catalina文件夾客情,粘貼并重命名為Catalina1,Catalina2瑞凑,如圖:
配置完成籽御,現(xiàn)在可以把項(xiàng)目分別部署到配置好的兩個(gè)文件夾webapps1和webapps2中惰匙;
啟動(dòng)tomcat项鬼,分別用不同的端口號8080和8081測試;
http://127.0.0.1:8080/項(xiàng)目名
http://127.0.0.1:8081/項(xiàng)目名
linux 上多個(gè) tomcat 分別部署項(xiàng)目
一鸠真、下載 tomcat 解壓成多個(gè) 文件夾供使用吠卷,比如這里將 tomcat 下載到 /opt 下沦零,進(jìn)行解壓改名
tar -zxvf apache-tomcat-7.0.75.tar.gz
mv apache-tomcat-7.0.75 tomcat-8070
重復(fù)以上解壓改名步驟,新增多個(gè) tomcat疾渴,大致如下:
[root@vastio138 opt]# ls
apache-tomcat-7.0.75.tar.gz tomcat-8080
tomcat-8090 tomcat-8070
二、分別修改各個(gè) tomcat 目錄下的 config/server.xml 文件
server.xml 中修改如下三個(gè)端口:(vim 可以使用 / 進(jìn)行查找修改)
保證修改的端口號不重復(fù)!
另搔谴,如果防火墻開啟的話(service iptables status 查看)己沛,還需要修改 防火墻配置(centos 6.8),增加 tomcat 的端口號到配置文件中:
使用(yy 拷貝已有的端口號一行垮卓,然后 p 粘貼,最后 i 修改端口號)
[root@vastio138 /]# vim /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8070 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
~
保存退出后重啟防火墻service iptables restart
或者 直接關(guān)閉防火墻 : service iptables stop
當(dāng)然上面所說防火墻的IP白名單的問題其實(shí)也不太容易出現(xiàn),一般情況都會(huì)選擇Nginx作負(fù)載均衡灭将,無需開啟這么多端口。
附錄Spring Boot項(xiàng)目打包成war包空镜,并發(fā)布在tomact容器的示例吴攒。
步驟:
- 配置文件(本地部署)
- 啟動(dòng)類(war包部署)
- war包部署pom.xml添加
- maven命令生成war包(跳過測試)
- war部署到tomcat
配置文件(本地部署)
這里呢砂蔽,是我們springboot的配置文件需要做的一些配置,即使似乎跟打包沒有半毛錢關(guān)系镣隶,但是還是在這里強(qiáng)調(diào)一下安岂,大多數(shù)情況下稻爬,maven是默認(rèn)進(jìn)行項(xiàng)目測試的,請確保在打包成war前琉雳,數(shù)據(jù)庫配置正確,以免入坑翠肘。
user = name
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/mj
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql = true
啟動(dòng)類(war包部署)
接下來呢束倍,要想springboot項(xiàng)目知道我們的意圖,我們要引導(dǎo)我們的項(xiàng)目甥桂,告訴他我們要打包成war包黄选,在此我們需要繼承SpringBootServletInitializer類重寫他的configure方法婶肩。告訴他我們要怎樣啟動(dòng)它,生成war包需要的相關(guān)文件
package com.job;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
@ServletComponentScan
public class JobManagementApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(JobManagementApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(JobManagementApplication.class, args);
}
}
war包部署pom.xml添加
接下來,我們要為maven的pom.xml添加相關(guān)的依賴配置:
首先要把<packaging>jar</packaging>改為以下
<packaging>war</packaging>
必要的話可以選擇打包的名字
<build>
<finalName>demo</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
其次還有添加以下依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
maven命令生成war包(跳過測試)
mvn clean package -Dmaven.test.skip=true
war部署到tomcat
部署到tomcat的webapps文件目錄下(確保webapps目錄下沒有其他同名文件夾)
tips:云服務(wù)器上部署時(shí)確保連接數(shù)據(jù)庫配置正確制圈,否則項(xiàng)目跑不起來辱揭。
總結(jié)
介紹到這里问窃,應(yīng)該是整個(gè)部署流程都已走完。
衷心希望大家能少走一些彎路嵌戈。