
🌈 个人主页: Hygge_Code
🔥 热门专栏:从0开始学习Java | Linux学习| 计算机网络
💫 个人格言: "既然选择了远方,便不顾风雨兼程"

文章目录
- [Spring Boot项目四种部署方式](#Spring Boot项目四种部署方式)
-
- 一、部署前通用准备📋
-
- [1.1 服务器与本地环境](#1.1 服务器与本地环境)
- [1.2 必备环境依赖](#1.2 必备环境依赖)
- [1.3 项目打包](#1.3 项目打包)
- 二、方式一:原始命令部署(无可视化,纯命令行)🥝
-
- [2.1 服务器环境搭建](#2.1 服务器环境搭建)
- [2.2 项目上传与启动](#2.2 项目上传与启动)
- [2.3 项目维护](#2.3 项目维护)
- [2.4 优缺点](#2.4 优缺点)
- 三、方式二:宝塔Linux部署(可视化,新手友好)🚀
-
- [3.1 使用宝塔面板](#3.1 使用宝塔面板)
- [3.2 搭建基础环境](#3.2 搭建基础环境)
- [3.3 项目部署与启动](#3.3 项目部署与启动)
- [3.4 优缺点](#3.4 优缺点)
- 四、方式三:Docker容器化部署(标准化,可移植性强)🍂
-
- [4.1 服务器安装Docker](#4.1 服务器安装Docker)
- [4.2 构建Docker镜像](#4.2 构建Docker镜像)
- [4.3 启动Docker容器](#4.3 启动Docker容器)
- [4.4 优缺点](#4.4 优缺点)
- 六、三种部署方式对比
- 补充: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、apache、tomcat
后端 部署需要的java、maven、git【以上都需要自行在连接了服务器的Linux上安装】
- 基础依赖:JDK 1.8(与本地开发环境一致即可)、MySQL 8.0(项目数据库)。
- 端口开放:服务器防火墙(腾讯云控制台)和本地安全组开放8080(项目)、3306(MySQL)、8888(宝塔,仅宝塔部署需)端口。
- 数据库配置:创建项目所需数据库(如
yupi),执行建表语句(下面的url最后面附带的是时区设置,不然我的Idea连接会报错,自己看需要设置)。
1.3 项目打包
- 配置
application-prod.yml生产环境参数:
yaml
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
- 执行Maven打包命令(跳过测试类)/ 或使用Idea中的图形化按钮:
bash
mvn clean package -Dmaven.test.skip=true
- 打包成功后,在
target目录获取Jar包(如user-center-0.0.1-SNAPSHOT.jar)。

二、方式一:原始命令部署(无可视化,纯命令行)🥝
适合熟悉Linux命令、追求轻量化部署的场景,无需额外安装面板工具,直接通过命令行操作。
2.1 服务器环境搭建
- 远程连接服务器,安装JDK 1.8:
bash
# 安装JDK
yum install -y java-1.8.0-openjdk-devel
# 验证安装
java -version
- 安装MySQL 8.0(参考官方文档或执行一键安装脚本),启动并设置开机自启:
bash
systemctl start mysqld
systemctl enable mysqld
2.2 项目上传与启动
- 创建项目目录并上传Jar包(后端):
方式一:使用Linux命令
bash
# 创建目录
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啥的...)
- 启动项目(两种方式可选):
- 临时启动(关闭终端后项目停止):
bash
java -jar /www/wwwroot/user-center-backend/user-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
- 后台启动(推荐,不受终端影响,不会一直占用Linux的命令行,而是后台运行):
bash
nohup java -jar user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &
这样就部署成功了:
1. 临时启动:
2.后台启动
- 验证启动:查看日志或端口占用:
bash
# 查看日志
tail -f app.log
# 查看8080端口
netstat -ntlp | grep 8080
2.3 项目维护
- 停止项目:
bash
# 查找进程PID
ps -ef | grep java
# 终止进程
kill -9 进程PID
- 更新项目:替换旧Jar包后,重复启动命令即可。
2.4 优缺点
- 优点:轻量化、无额外依赖、操作灵活。
- 缺点:无可视化界面,需手动输入命令,非常的麻烦,巨麻烦!!!!。

三、方式二:宝塔Linux部署(可视化,新手友好)🚀
通过宝塔面板简化服务器操作,无需复杂命令,点击鼠标即可完成环境搭建、项目部署,适合新手或追求高效部署的场景。
重装系统,方式一用的是CentOS系统,这次用宝塔Linux系统

3.1 使用宝塔面板
我们可以安装宝塔Linux,也可以选择使用腾讯云服务器自带的宝塔Linux。【这里我使用服务器自带的】
- 在防火墙中可以添加自己的ip地址,仅限自己访问(端口默认
8888)

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

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

3.2 搭建基础环境
- 在宝塔面板左下的 软件商店 搜索安装:
- 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(附加额外参数)指定运行容器时默认执行的命令
- 在后端项目根目录创建
Dockerfile文件(本地创建后上传到服务器项目目录):
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"]
- 上传
Dockerfile(我使用git上传),然后构建镜像:
bash
cd user-center-backend
docker build -t user-center-backend:v1.0 .
- 查看镜像:
bash
docker images

**前端:**前端的dockerFile和nginx.conf,这些也是需要上传到git仓库里,然后clone过去就行,构建镜像命令:先进入上传的前端项目目录中cd user-center-frontend,再构建docker build -t user-center-frontend:v0.0.1 .(跟后端的操作都大差不差)
在Docker管理器里也可以看到制作成功的docker镜像:

4.3 启动Docker容器
- 直接启动容器:
bash
后端: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(端口映射,主机端口:容器端口)。
若启动后端时出现这这个报错的话(因运存不足无法给进程分配更多的文件句柄数而异常退出):
bash
[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
我们可以改为执行:
bash
docker run --ulimit nofile=1024 -p 8080:8080 user-center-backend:v1.0
这样便启动成功了(我们的后端启动代码没有加-d,所以是在前台启动)(成就感满满啊~)😆😆😆

4.4 优缺点
- 优点:环境隔离、可移植性强、部署标准化、支持集群扩展。
- 缺点:需学习Docker基础命令,初次配置稍复杂。
六、三种部署方式对比
| 部署方式 | 核心优势 | 适用场景 | 操作难度 |
|---|---|---|---|
| 原始命令部署 | 轻量化、无额外依赖 | 熟悉Linux命令、小型项目 | 难+麻烦 |
| 宝塔Linux部署 | 可视化、新手友好、部署高效 | 新手、快速部署需求、中小型项目 | 低 |
| Docker容器部署 | 环境隔离、可移植性强、支持集群 | 多环境部署、大型项目、集群化场景 | 中 |
补充:Docker容器平台托管
额外提一嘴:还有一种 Docker容器平台托管 的方式(如微信云托管):
特点:傻瓜式部署🤣🤣,只需上传对应的文件即可(平台帮忙部署),巨方便。(这里就不展开了)

如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!


