第一步:检查application.properties文件中启用生产环境的配置。
第二步:在项目启动入口文件中添加配置,此配置只有在打war包时需要配置,jar包不需要
public class LotPlatformApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(LotPlatformApplication.class, args);
}
// 将项目打成war包时需要加此配置
// 先将启动类继承自 SpringBootServletInitializer,然后重写configure方法,外部tomcat才能找到入口
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(LotPlatformApplication.class);
}
}
第三步:配置pom文件,如下配置
- 先修改打包方式为war包形式,添加如下
<!-- 下面的配置打包形式,war或jar包,springboot默认是jar包形式 --> <packaging>war</packaging>
- 移除内置tomcat,并添加javax.servlet-api
<!-- 当项目打war包时添加下面两个依赖。将内置tomcat修改为外置,使用 provided; 添加servlet-api依赖(因为项目中某些工具会用到时,如果缺失会报错,打jar包时将其移除--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
- 在<build>中添加资源路径,否则发布后可能访问不了
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <!-- 手动指定资源文件路径,否则找不到 --> <resources> <!-- 指定java路径下的xml文件为资源文件 --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <!-- 下面这个指定resources下的,在本地时不指定可以正常运行,但是打包后发布,若没指定则访问不到,这里直接指定所有**/** --> <resource> <directory>src/main/resources</directory> <includes> <include>**/**</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
第四步:前面全部配置好后,接下来点击进行打包生成,如下图:先点击红框中的按钮点亮除去 test代码的打包。接着点击clean,完成后再进行点击package即可完成打包,此时在target目录下有个.war的打包好的文件。
第五步:到云服务器的tomcat目录下新建一个webapps2目录作为项目上传目录,并将webapps目录下的四个文件copy到webapps2中再将刚才打包好的war文件上传到webapps2目录下。然后继续在webapps目录下新建项目目录,目录名称可与项目名称相同,这里我新建lotplatform目录。将war手动解压到lotplatform目录中。此时项目文件已准备好了。
第六步:创建数据库,将本地的数据库文件导入到创建好的数据库中 。
第七步:创建站点,在创建站点前,域名的解析和端口的开放配置不赘述了,只需要在云服务器上安全组开放相应的端口即可,但是同时记住需要在防火墙中也开放相应的端口即可。
- 这里我使用的宝塔lunix面板管理的,点击网站栏目,选择PHP项目点击添加站点
- 填写域名和选择根目录(刚才解压的项目目录)即可,其它默认。
- 进行站点的默认首页设置,如下我的默认首页是login.html所以需要添加login.html
- 启用tomcat,勾选按钮即可,等待启用完成
- 启用完成后,在tomcat的conf文件下有个server.xml文件。我这里配置的同一个tomcat端口运行多个项目并保证定时任务只运行一次,所以默认生成的站点设置是不行的,需要改进才能做到同一个tomcat端口运行多个项目时保证定时任务不会重复执行。改进如下配置即可。若没有此需求可以无需修改。
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" /> </GlobalNamingResources> <Service name="Catalina"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine defaultHost="localhost" name="Catalina"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> </Realm> <!--<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt" /> </Host>--> <Host appBase="" autoDeploy="true" name="as.nani.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt" /> <Context crossContext="true" docBase="/www/server/tomcat/webapps/sdfr" path="" reloadable="true" /> </Host> <Host appBase="" autoDeploy="true" name="sr.nani.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt" /> <Context crossContext="true" docBase="/www/server/tomcat/webapps1/remotede" path="" reloadable="true" /> </Host> <Host appBase="" autoDeploy="true" name="aw.nani.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"> <Context crossContext="true" docBase="/www/server/tomcat/webapps2/lotplatform" path="" reloadable="true" /> </Host> </Engine> </Service> </Server>
- 修改完server.xml文件后,重启tomcat,此时项目可以通过域名访问了。但是会发现springboot的静态资源文件无法正常访问,我们需要继续在网站设置中进行设置,进入到网站的配置文件中进行nginx代理配置。
在配置文件中添加如下代理配置,此时静态文件即可正常访问了
location ^~ /assets/
{
root /www/server/tomcat/webapps2/lotplatform/WEB-INF/classes/static/;
}
location ^~ /plugins/
{
root /www/server/tomcat/webapps2/lotplatform/WEB-INF/classes/static/;
}
到此整个项目发布完成并可正常运行访问了。