项目部署在多个服务器上,多个SpringBoot项目部署在Tomcat服务器上
引言
有一段时间没有更新简书了,今天遇到些后端运维的问题,记录一下。
需求如下:
为了在现有Linux服务器上实现自己项目的部署而不影响其他服务。
有两种解决方案:
① 一个容器 多个端口发布多个项目
② 多个容器 分别发布
linux下同一个tomcat用不同端口发布多个项目
一、修改tomcat的conf目录下的server.xml
配置service 节点,有几个项目就相应的配置几个service 节点;
请对以下四个内容进行调整:更换Service名称、指定连接器端口、更新引擎名称以及配置应用Base地址。
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" />
connectionTimeout="20000"
redirectPort="8443" />
resourceName="UserDatabase"/>
unpackWARs="true" autoDeploy="true">
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
connectionTimeout="20000"
redirectPort="9543" />
resourceName="UserDatabase"/>
unpackWARs="true" autoDeploy="true">
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
构建配置文件时必须完全复制server.xml中的Service节点。从本文中进行复制操作可能会遇到Tomact启动失败的问题。
按照所述配置文件进行设置后,在 tomcat 根目录中复制并重命名名为 webapps 的文件夹为 webapps1 和 webapps2,并将其重命名为 webapps1 和 webapps2(如图所示)。这些新创建的文件夹即用于部署项目。
第三步:将项目配置文件拖拽到Tomcat安装目录下的conf文件夹中。随后,请将conf文件夹中的Catalina目录拖拽至临时区域进行拷贝操作。完成后,请将拷贝后的Catalina目录重新命名为Catalina1和Catalina2,并标记为[图]。
配置完成后, 现在可以将项目分别部署到已经配置好的两个文件夹webapps1和webapps2中
启动tomcat,分别用不同的端口号8080和8081测试;
linux 上多个 tomcat 分别部署项目
一、将 tomcat 软件解压至多个 目录以供使用;例如,在本例中我们将 tomcat 服务器部署至 /opt 目录,并完成相应的解压与重命名操作。
tar -zxvf apache-tomcat-7.0.75.tar.gz
mv apache-tomcat-7.0.75 tomcat-8070
重复以上解压改名步骤,新增多个 tomcat,大致如下:
[root@vastio138 opt]# ls
apache-tomcat-7.0.75.tar.gz tomcat-8080
tomcat-8090 tomcat-8070
二、分别修改各个 tomcat 目录下的 config/server.xml 文件
server.xml 中修改如下三个端口:(vim 可以使用 / 进行查找修改)
保证修改的端口号不重复!
此外,在防火墙已打开的状态下(通过命令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
或者 直接关闭防火墙 : service iptables stop
对此前提到的防火墙IP白名单问题而言其出现频率并不高对此前提到的防火墙IP白名单问题而言其出现频率并不高通常情况下默认配置下会采用Nginx来进行负载均衡通常情况下默认配置下会采用Nginx来进行负载均衡无需配置过多入口地址无需配置过多入口地址
附录Spring Boot项目打包成war包,并发布在tomact容器的示例。
步骤:
配置文件(本地部署)
启动类(war包部署)
war包部署pom.xml添加
maven命令生成war包(跳过测试)
war部署到tomcat
配置文件(本地部署)
此处是我们springboot项目的配置文件所需的设置。即便看似与打包无关的重要事项也需提前做好规划。但无论如何需要强调的是,在生成war包之前必须完成必要的数据库配置工作。通常情况下,默认会执行项目测试,请务必确保在打包生成war包前完成必要的数据库配置工作。
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
启动类(war包部署)
接下来,请让Spring Boot项目了解我们的意图。为此,请指导我们的项目,并使其打包为war包。在此基础上,请确保我们继承Spring BootServletInitializer类并重写其configure方法以实现功能目标。同时,请说明如何启动该应用服务以及所需构建的war包相关文件的信息。
package com.job;
import org.springframework.boot.SpringApplication;
Import the default applications configuration from the downloads directory using Spring Boot.
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
This method is designed to have access to the Spring configuration. It will be used to set up the application's settings and integrate it with other components.
return application.sources(JobManagementApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(JobManagementApplication.class, args);
}
}
war包部署pom.xml添加
接下来,我们要为maven的pom.xml添加相关的依赖配置:
首先要把jar改为以下
war
必要的话可以选择打包的名字
demo
org.springframework.boot
spring-boot-maven-plugin
其次还有添加以下依赖
org.springframework.boot
spring-boot-starter-tomcat
provided
maven命令生成war包(跳过测试)
mvn clean package -Dmaven.test.skip=true
war部署到tomcat
请将WebApps配置到Tomcat中的WebApps文件夹中,并避免在WebApps目录中有与现有名称相同的子文件夹出现。
tips:云服务器上部署时确保连接数据库配置正确,否则项目跑不起来。
总结
介绍到这里,应该是整个部署流程都已走完。
衷心希望大家能少走一些弯路。
