SpringBoot项目部署的四种方式详解

 更新时间:2026年04月24日 09:29:04   作者:青衫码上行  
本文详细介绍了SpringBoot项目的四种部署方式,包括原始命令部署、宝塔Linux可视化部署、Docker容器化部署和Docker容器平台托管,每种方式都有其特点和适用场景,需要的朋友可以参考下

Spring Boot项目四种部署方式

项目开发完成后,部署是实现代码落地可用的关键环节,有以下四种方式,其中前三种详细讲解。
原始命令部署
宝塔Linux可视化部署
Docker容器化部署
Docker容器平台托管

一、部署前通用准备

无论选择哪种部署方式,以下基础准备工作必不可少:

1.1 服务器与本地环境

服务器:我使用的是腾讯云轻量应用服务器(2核2G+5M带宽),操作系统选择CentOS 7/8或OpenCloudOS。

本地环境:项目无编译错误,可通过mvn clean package成功打包;安装远程连接工具(Xshell / FinalShell)并连接,我这里使用的是Xshell。(使用 free -h可以查看你的服务器信息)

其中,连接的账户和密码在此处查看【不管是不是宝塔Linux部署方式,都是在这】:

核心信息:记录服务器公网IP、登录密码,提前准备生产环境配置文件(application-prod.yml)。

1.2 必备环境依赖

前端 部署需要的 web 服务器:nginx 、apachetomcat

后端 部署需要的 javamavengit 【以上都需要自行在连接了服务器的Linux上安装】

  • 基础依赖:JDK 1.8(与本地开发环境一致即可)、MySQL 8.0(项目数据库)。
  • 端口开放:服务器防火墙(腾讯云控制台)和本地安全组开放8080(项目)、3306(MySQL)、8888(宝塔,仅宝塔部署需)端口。
  • 数据库配置:创建项目所需数据库(如yupi),执行建表语句(下面的url最后面附带的是时区设置,不然我的Idea连接会报错,自己看需要设置)。

1.3 项目打包

  1. 配置application-prod.yml生产环境参数:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/yupi?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: 数据库用户名
    password: 数据库密码
server:
  port: 8080
  servlet:
    context-path: /api
  1. 执行Maven打包命令(跳过测试类)/ 或使用Idea中的图形化按钮:
mvn clean package -Dmaven.test.skip=true
  1. 打包成功后,在target目录获取Jar包(如user-center-0.0.1-SNAPSHOT.jar)。

二、方式一:原始命令部署(无可视化,纯命令行)

适合熟悉Linux命令、追求轻量化部署的场景,无需额外安装面板工具,直接通过命令行操作。

2.1 服务器环境搭建

  1. 远程连接服务器,安装JDK 1.8:
# 安装JDK
yum install -y java-1.8.0-openjdk-devel
# 验证安装
java -version
  1. 安装MySQL 8.0(参考官方文档或执行一键安装脚本),启动并设置开机自启:
systemctl start mysqld
systemctl enable mysqld

2.2 项目上传与启动

  1. 创建项目目录并上传Jar包(后端):

方式一:使用Linux命令

# 创建目录
mkdir -p /www/wwwroot/user-center-backend
# 将本地打包好的后端 Jar 包上传到服务器指定目录(可通过scp命令或FTP工具) 
scp 本地Jar包路径 root@服务器公网IP:/www/wwwroot/user-center-backend

方式二:使用git直接上传到服务器,然后自行转移位置,再使用maven打包构建
 

方式三:直接在Idea中用maven生成jar包后直接拖进Linux里面就行

  • 前端:打开前端项目,build运行一下,然后找到dist文件所在位置,压缩,之后拖进Xshell。
    解压后,挪到存放前端文件夹的位置后。我们需要打开Nginx,cd conf 去修改一下nginx.conf的配置(其中可能遇到非常多的问题,比如需要修改权限然后重新加载nginx -s reload啥的…)
  1. 启动项目(两种方式可选):
  • 临时启动(关闭终端后项目停止):
java -jar /www/wwwroot/user-center-backend/user-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
  • 后台启动(推荐,不受终端影响,不会一直占用Linux的命令行,而是后台运行):
nohup java -jar user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &

这样就部署成功了:

1. 临时启动:

2.后台启动

  1. 验证启动:查看日志或端口占用:
# 查看日志
tail -f app.log
# 查看8080端口
netstat -ntlp | grep 8080

2.3 项目维护

  • 停止项目:
# 查找进程PID
ps -ef | grep java
# 终止进程
kill -9 进程PID
  • 更新项目:替换旧Jar包后,重复启动命令即可。

2.4 优缺点

  • 优点:轻量化、无额外依赖、操作灵活。
  • 缺点:无可视化界面,需手动输入命令,非常的麻烦,巨麻烦!!!!。

三、方式二:宝塔Linux部署(可视化,新手友好)

通过宝塔面板简化服务器操作,无需复杂命令,点击鼠标即可完成环境搭建、项目部署,适合新手或追求高效部署的场景。

重装系统,方式一用的是CentOS系统,这次用宝塔Linux系统

3.1 使用宝塔面板

我们可以安装宝塔Linux,也可以选择使用腾讯云服务器自带的宝塔Linux。【这里我使用服务器自带的】

  1. 在防火墙中可以添加自己的ip地址,仅限自己访问(端口默认8888

  • 访问对应的网址进入宝塔Linux控制面板

输入账号和密码登录进去:

3.2 搭建基础环境

  1. 在宝塔面板左下的 软件商店 搜索安装:
  • Tomcat(下载这个只是为了java,它里面包含java的)
  • MySQL 8.0(数据库)
  • Nginx

3.3 项目部署与启动

前端部署:

去添加站点,域名暂时是自己的公网(宝塔左上角那个地址)

打开新建的站点,把里面的文件全删掉,再把自己的前端dist里的文件全选拖进去上传

启动项目

后端部署:

上传Jar包:「文件」→ 进入/www/wwwroot,创建user-center-backend目录(自行创建存放后端文件的目录),上传本地Jar包。

在站点添加java项目,特别注意端口。(我们项目的运行端口是8080,这里如果显示8080被占用,可能是Tomcat,去软件商店停止他)

启动项目:点击「启动」

记得在服务器放行8080端口,不然是无法成功启动的

查看状态变为「运行中」,并且有CPU占用(刚启动可能会很高,过一会就会降下来了)

3.4 优缺点

  • 优点:可视化操作、新手友好(是真的方便)、环境搭建快、支持进程守护和日志查看。
  • 缺点:依赖面板工具,占用少量服务器资源。

四、方式三:Docker容器化部署(标准化,可移植性强)

通过Docker容器封装项目及依赖环境,实现“一次构建、到处运行”,解决环境不一致问题,适合多环境部署、集群化场景。

4.1 服务器安装Docker

远程连接服务器,安装Docker / 或使用宝塔Linux的服务商店下载Docker
这里我使用宝塔下载:

4.2 构建Docker镜像

制作镜像
Dockerfile 用于指定构建 Docker 镜像的方法,Dockerfile 一般情况下不需要完全从 0 自己写,建议去 github、gitee 等托管平台参考同类项目(比如 springboot)

Dockerfile 编写内容总览:
 ● FROM 依赖的基础镜像
 ● WORKDIR 工作目录
 ● COPY 从本机复制文件
 ● RUN 执行命令
 ● CMD / ENTRYPOINT(附加额外参数)指定运行容器时默认执行的命令

  1. 在后端项目根目录创建Dockerfile文件(本地创建后上传到服务器项目目录):
# 基础镜像(JDK 1.8)
FROM openjdk:8-jdk-alpine
# 作者信息
LABEL maintainer="your-name"
# 复制Jar包到容器
COPY target/user-center-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
  1. 上传Dockerfile(我使用git上传),然后构建镜像:
cd user-center-backend
docker build -t user-center-backend:v1.0 .
  1. 查看镜像:
docker images

前端:前端的dockerFilenginx.conf,这些也是需要上传到git仓库里,然后clone过去就行,构建镜像命令:先进入上传的前端项目目录中cd user-center-frontend,再构建docker build -t user-center-frontend:v0.0.1 .(跟后端的操作都大差不差)

在Docker管理器里也可以看到制作成功的docker镜像:

4.3 启动Docker容器

  1. 直接启动容器:
后端:docker run -p 8080:8080 user-center-backend:v0.0.1
前端:docker run -p 80:80 -d user-center-frontend:v0.0.1
  • 参数说明:-d(后台运行)、-p 8080:8080(端口映射,主机端口:容器端口)。

若启动后端时出现这这个报错的话(因运存不足无法给进程分配更多的文件句柄数而异常退出):

[root@VM-0-5-opencloudos user-center-frontend]# docker run -p 8080:8080 user-center-backend    v1.0
Unable to find image 'user-center-backend:latest' locally

我们可以改为执行:

docker run --ulimit nofile=1024 -p 8080:8080 user-center-backend:v1.0

4.4 优缺点

  • 优点:环境隔离、可移植性强、部署标准化、支持集群扩展。
  • 缺点:需学习Docker基础命令,初次配置稍复杂。

五、三种部署方式对比

部署方式核心优势适用场景操作难度
原始命令部署轻量化、无额外依赖熟悉Linux命令、小型项目难+麻烦
宝塔Linux部署可视化、新手友好、部署高效新手、快速部署需求、中小型项目
Docker容器部署环境隔离、可移植性强、支持集群多环境部署、大型项目、集群化场景

补充:Docker容器平台托管

额外提一嘴:还有一种 Docker容器平台托管 的方式(如微信云托管):

特点:傻瓜式部署,只需上传对应的文件即可(平台帮忙部署),巨方便。(这里就不展开了)

以上就是SpringBoot项目部署的四种方式详解的详细内容,更多关于SpringBoot项目部署方式的资料请关注脚本之家其它相关文章!

相关文章

  • 通过jxl.jar 读取、导出excel的实例代码

    通过jxl.jar 读取、导出excel的实例代码

    通过jxl.jar 读取、导出excel的实例代码,需要的朋友可以参考一下
    2013-03-03
  • 利用java实现二叉搜索树

    利用java实现二叉搜索树

    这篇文章主要介绍了利用java实现二叉搜索树,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Component-Scan 不扫描jar里面的类问题

    Component-Scan 不扫描jar里面的类问题

    这篇文章主要介绍了Component-Scan 不扫描jar里面的类问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot3实现优雅停机的完整流程

    SpringBoot3实现优雅停机的完整流程

    在现代微服务架构中,优雅停机(Graceful Shutdown)是一项重要功能,可以确保服务在关闭时处理完所有当前请求,避免突然终止连接或丢失数据,Spring Boot 3 提供了对优雅停机的内置支持,本文给大家介绍了SpringBoot3怎样优雅停机,需要的朋友可以参考下
    2024-10-10
  • Spring示例讲解条件注入方法

    Spring示例讲解条件注入方法

    Spring支持按照条件来注入某些特定的bean,这也是Spring Boot实现自动化配置的底层方法,文中的示例代码讲解详细,需要的可以参考一下
    2022-06-06
  • Java集合框架的Collection分支详解

    Java集合框架的Collection分支详解

    本文主要介绍了Java集合框架中的Collection接口及其三个核心子接口List、Set和Queue,分别详细介绍了ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet等实现类的特性和用法,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • SpringBoot 使用 Curator 操作 ZooKeeper

    SpringBoot 使用 Curator 操作 ZooKeeper

    本文主要介绍使用 Curator 访问 ZooKeeper 的一些基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12
  • MyBatis-Plus联表查询及分页代码举例

    MyBatis-Plus联表查询及分页代码举例

    本文介绍了mybatis-plus-join工具的使用,该工具可以简化mybatis-plus的联表查询,使得开发者可以以类似QueryWrapper的方式进行联表查询,无需手动编写xml文件,感兴趣的朋友跟随小编一起看看吧
    2025-03-03
  • Java的字符串常量池StringTable详解

    Java的字符串常量池StringTable详解

    这篇文章主要介绍了Java的字符串常量池StringTable详解,JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化,为 了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,需要的朋友可以参考下
    2023-11-11
  • Java微服务Nacos Config配置中心超详细讲解

    Java微服务Nacos Config配置中心超详细讲解

    配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散 在各个微服务中,不好统一配置和管理。每一个环境所使用的配置理论上都是不同的,一旦需要修改,就需要我们去各个微服务下手动维护
    2023-02-02

最新评论