本地JavaWeb项目部署到个人服务器,实现公网访问

本文最后更新于 2021年3月21日 凌晨

实现逻辑

主要是网上教程太乱,而且很碎片;我这边做一个整体教程和演示。
主要有两种形式:带tomcat的jar包、不带tomcat的war包
简述一下逻辑:

本次教程,Tomcat项目打包成war包到服务器上发布,Springboot项目打包为jar或war包到服务器上发布:

  • war:Tomcat/Springboot项目打包
  • jar:Spring web项目(Springboot)打包

前提

服务器前提

既然要部署到服务器,给公网用户访问,肯定是需要一台服务器的(Linux系统比较推荐,Windows Server占用系统资源过高)。如果你不会操作Linux,可以使用宝塔面板
推选服务器:

1.腾讯云服务器
2.阿里云服务器

个人项目,推荐使用轻量应用服务器

如果你是学生,可以10元/月一个月租一个1 CPU 2G内存的服务器推荐腾讯云的学生轻量级服务器,服务器带宽5M。

1.腾讯学生服务器
2.阿里学生服务器

如果你并不知道买什么服务器,可以关于页面联系我,我提供服务器参考,避免买了服务器却搭建不了的情况出现,但是请事先阅读:博客条例说明

本地前提

可上传文件至服务器的工具(可以本地用WinSCP,或者服务器安装宝塔等)

视频演示教程

觉得视频有用,可以投币点赞嗷~

Tomcat项目打包部署

Spring项目打包部署

构建JavaWeb项目

首先,我们要区分你本地的JavaWeb项目

Tomcat工程

Tomcat项目打包为.war结尾的war文件其实很简单,但是IDEA上要提前配置:

这一步,其实也是本地IDEA启动Tomcat的前提条件。如果图开不清,可以点开查看嗷;步骤是:

打开Project Structure – Artifacts – 点+号 – Web Application: Exploded – Apply

Spring工程

以Springboot项目为例

打包为jar

这个过于简单,以至于前期无需准备步骤,如果真的要说,Maven里不要设置打包war即可。

打包为war

相对于打包出jar,打包为war会复杂点:
Maven的pom.xml里设置:

1
<packaging>war</packaging>


然后,在spring-boot-starter-web依赖节点中移除tomcat相关外部包:

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>


最后,在依赖包内添加Servlet的包:

1
2
3
4
5
6
<!--        打包成war包,添加Servlet依赖-->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.43</version>
</dependency>

打包项目为war文件

适用于Tomcat项目、Spring项目。

构建准备

war文件,实际上就是一自压缩文件;我们的服务器上Tomcat会解析war文件为工程项目。
如果你的项目是Tomcat项目,IDEA首先添加打包的Archive

如果图开不清,可以点开查看嗷;步骤是:

打开Project Structure – Artifacts – 点+号 – Web Application: Archive – For name – Apply
其中,name为你本地构建JavaWeb项目设置的Web Application: Exploded名字。

如果你的项目是Spring项目,需要设置启动主类SpringBootServletInitializer,创建一个SpringBootStartApplication类,同时继承SpringBootServletInitializerl类:

1
2
3
4
5
6
7
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(ToolApplication.class);
}
}

正式构建

如果你的项目是Tomcat项目:

如果图开不清,可以点开查看嗷;步骤是:

打开Build – Build Artifacts – Build name
其中,name为你刚刚构建准备设置的Web Application: Archive名字。构建成功,会在out–artifacts文件夹的子目录内找到一个.war结尾的文件,这就是我们要上传服务器的文件。

而基于Maven骨架的Spring项目,只需要打包IDEA自带的Maven工具,进行打包操作:

当然,你也可以直接到项目目录下,使用Maven命令打包:

1
2
mvn clean
mvn package

之后,在target目录下生成.war结尾的文件,这就是我们要上传到服务器的文件。

服务器安装配置Tomcat(War)

对于war包,内部是什么Tomcat服务器的,需要我们手动在服务器上配置一个。如果你打包成jar则不需要。

下载Tomcat镜像文件到服务器

首先去官网下载Tomcat镜像文件:https://tomcat.apache.org/download-80.cgi
因为是给服务器配置,我们需要下载的tar.gz的core版本。

这边下载方法很多,比如你可以直接wget下载到服务器,也可以本地WinSCP上传到服务器,甚至还可以用宝塔下载。

解压文件

解压刚刚下载的文件,比如我下载下来,文件是apache-tomcat-8.5.55.tar.gz,解压后是apache-tomcat-8.5.55文件夹;为了方便配置;我重命名apache-tomcat-8.5.55文件夹为Tomcat,并移动到根目录。

配置JDK

考虑到这个过于简单,建议自己配置JDK,推荐OpenJDK
如果你重来没用过Linux,可以参考图文教程:
Linux的JDK和Jenv(JAVA_HOME管理器)的详细配置使用教程
我配置的JDK的JAVA_Home地址: /usr/java/jdk

配置Tomcat环境变量

服务器终端输入(若未实现配置zsh,一般Linux默认为Bash):

1
2
3
4
# 如果你使用Bash
vim /etc/profile
# 如果你使用zsh
vim ~/.zshrc

按 i 进入编辑并在最底部添加:

1
2
3
#tomcat 
CATALINA_HOME=/Tomcat
export CATALINA_HOME

随后按ESC输入 :wq保存并退出。
最好,重载一次,使环境变量文件生效:

1
source /etc/profile

配置tomcat的catalina.sh文件

进入tomcat的bin目录

1
2
cd $CATALINA_HOME/bin
vim catalina.sh

找到 # OS specific support,然后在这行下面添加以下配置

1
2
3
# OS specific support.  $var _must_ be set to either true or false.
CATALINA_HOME=
JAVA_HOME=

(其中,CATALINA_HOME、JAVA_HOME要根据自己前面配置路径,自己填写)

保存退出

上传打包好的war包

将刚刚打包好的.war文件,上传到tomcat里的/webapps内;因为我的tomcat8,重命名了并且放在根目录下(/Tomcat),所以我只需要上传到:/Tomcat/webapps

配置server.xml文件

为了方便项目访问,我们还需要配置tomcat里/conf/server.xml文件。因为我的tomcat8,重命名了并且放在根目录(/Tomcat),所以我只需要修改:/Tomcat/conf/server.xml

1
vim /Tomcat/conf/server.xml

在前,添加:

1
<Context path="" docBase="/Tomcat/webapps/MintimateAll.war" debug="0" reloadable="true" />


path:你希望用什么访问地址到你项目文件
docBase:项目地址(可以是绝对路径,也可相对路径)
保存,退出即可。

配置tomcat服务

这里有两种方式,一种是注册为系统服务:

1
2
3
4
# 进入Tomcat安装目录下的bin目录
cd $CATALINA_HOME/bin
# 移动Tomcat配置文件到系统Service文件内
cp catalina.sh /etc/systemd/system/tomcat

之后,启动或关闭Tomcat服务器:

1
2
3
4
# 启动
service tomcat start
# 停用
service tomcat stop

如果都没有报错,则说明配置成功了。

另外一种是不注册为系统服务器,手动开启或关闭Tomcat:

1
2
# 进入Tomcat安装目录下的bin目录
cd $CATALINA_HOME/bin

之后,启动或关闭Tomcat:

1
2
3
4
# 启动Tomcat
bash startup.sh
# 关闭Tomcat
bash shutdown.sh

以上方法二选一即可。

删除初始ROOT文件夹

因为Tomcat自带一个演示文件,所以想通过浏览器:IP:8080直接访问到你项目,需要删除ROOT文件夹。该文件夹在刚刚上传项目文件夹内。

1
rm -rf /Tomcat/webapps/ROOT

这样,当你只配置了一个项目时,这个项目或默认替换ROOT项目。当然,如果你有多个项目需要配置不同一级目录,那么需要在打包时,注意命名。

启动/重启Tomcat

要让Tomcat重新编译,我们只需要重启Tomcat服务即可:

1
2
3
4
5
6
7
8
9
10
11
12
# 如果你注册Tomcat为系统服务:
## 停用
service tomcat stop
## 启动
service tomcat start

# 如果你没有注册Tomcat为系统服务:
cd $CATALINA_HOME/bin
## 关闭Tomcat
bash shutdown.sh
## 启动Tomcat
bash startup.sh

访问成功

这个时候,就可以通过服务器公网IP+8080端口公网IP+8080端口+项目地址,访问到我们的项目了。(如果你不希望是8080端口,可以在conf/server.xml文件内更改)。

打包项目为jar文件

这个适用于Spring项目,尤其是Springboot项目,以一个主类启动项目且集成了Tomcat内建服务器。

构建准备

Maven上无需额外操作

正式构建

只需要打包IDEA自带的Maven工具,进行打包操作:

当然,你也可以直接到项目目录下,使用Maven命令打包:

1
2
mvn clean
mvn package

之后,在target目录下生成.jar结尾的文件,即为打包后的文件。之后上传服务器即可。

服务器运行带Tomcat的jar(Jar)

配置JDK

考虑到这个过于简单,建议自己配置JDK,推荐OpenJDK
如果你重来没用过Linux,可以参考图文教程:
Linux的JDK和Jenv(JAVA_HOME管理器)的详细配置使用教程
我配置的JDK的JAVA_Home地址: /usr/java/jdk

上传打包好的jar包

jar因为自带Tomcat环境,相对来说简单很多。为方便管理,我们创建一个myWeb文件夹,在里面放我们的jar包:

1
2
3
cd /
mkdir myWeb
cd myWeb

之后上传本地jar包

启动/关闭Jar

为了方便管理,我们以前台运行方式,运行java程序,先创建screen虚拟终端:

1
screen -R Web

启动服务器:

1
java -jar -Xmx128M YouJarName.jar

这个时候,就运行我们的网站了。而因为我们使用screen的原因,我们可以按ctrl+a再按d,退出虚拟终端,使其保存后台运行。
如果要关闭Web服务:

1
2
# 重新进入虚拟终端
screen -R Web

之后按ctrl+c,即可关闭。

访问成功

这个时候,就可以通过服务器公网IP+端口即可访问,记得到运营商后台放行端口嗷

配置Nginx反向代理(可选)

如果你配置好项目,往往需要IP+端口形式访问,但是如果你用域名,如何使用纯粹的域名访问呢?
很简单,使用Nginx,设置反向代理即可。为方便操作,我们使用宝塔面板进行操作(主要是篇幅受限):
宝塔官网,根据自己服务器系统,即可安装宝塔面板
在宝塔面板内安装好Nginx后,创建新网站:

点击创建的网站,设置方向代理:

之后就可以使用域名访问了。



本地JavaWeb项目部署到个人服务器,实现公网访问
https://www.mintimate.cn/2020/05/25/Tomcat-Server/
作者
Mintimate
发布于
2020年5月25日
许可协议