Spring Boot项目如何上传云服务器
一、部署前准备
1.1 云服务器与安全组
可以在阿里云服务平台(阿里云免费试用 - 阿里云)领取一个免费试用的云服务器ECS【也可以选择其他的自己喜欢的云服务平台】,建议使用Ubuntu操作系统,最低内存建议2核4GB。同时安全组只开放下表端口:
| 协议端口 | 用途 | 授权对象 |
| TCP 22 | Xshell SSH 登录 | 本人当前公网 IP /32 |
| TCP 80 | HTTP 网站访问 | 0.0.0.0/0 |
| TCP 443 | HTTPS 网站访问 | 0.0.0.0/0 |
1.2 使用Xshell连接ECS
下载安装Xshell,新建SSH对话,协议选择SSH,主机输入你的云服务器公网IP

然后点击用户身份验证,用户名通常为root,密码为你设置的云服务器密码,点击连接

二、安装Docker
连接到服务器后,依次输入以下命令安装docker
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
docker --version
docker compose version
systemctl status docker --no-pager
最后一条命令应显示 Docker 为 active running
三、配置镜像加速器
中国大陆网络访问 Docker Hub 可能超时。若 docker pull 失败,搜索进入阿里云容器镜像服务 ACR,在镜像工具中的镜像加速器页面复制专属加速地址。

然后回到Xshell中输入以下代码将示例地址替换为控制台中显示的专属地址。
mkdir -p /etc/docker
nano /etc/docker/daemon.json
{
"registry-mirrors": [
"https://xxxxxxxx.mirror.aliyuncs.com" //改为你刚刚复制的加速器地址
]
}
systemctl restart docker
docker info | grep -A 3 "Registry Mirrors"
四、本地项目准备与打包
本节说明如何将Spring Boot项目打包成可部署的JAR包,完成后docker会把JAR复制到镜像中并启动,因此打包成功是后续部署的前提
4.1 确认本地开发环境
在Windows PowerShell进入pom.xml的项目目录,以本项目为例,本项目实际目录为sm-salary/sm-salary。
cd "E:\springboot薪资系统源码\sm-salary\sm-salary"
依次检查 Java 和 Maven 是否可用。本项目 pom.xml 指定 Java 8,因此 java -version 应显示 1.8 或 8;Maven 3.6 及以上均可使用。
java -version
mvn -version
如果 PowerShell 提示 java 或 mvn 不是命令,需要先安装 JDK 8 和 Apache Maven,并在系统环境变量 Path 中加入 JDK 的 bin 目录与 Maven 的 bin 目录。配置完成后需重新打开 PowerShell
4.2 确认项目结构
在项目根目录中,至少应看到 pom.xml、src、db、Dockerfile 与 docker-compose.yml。pom.xml 描述 Java 版本、Spring Boot、MyBatis Plus、MySQL 驱动等依赖;Maven 会按照它下载依赖并构建程序。
Get-ChildItem
Get-Item .\pom.xml
Get-ChildItem .\src\main\resources\application.yml
部署前不要把生产数据库密码写回 application.yml。当前项目通过 DB_URL、DB_USERNAME、DB_PASSWORD、SERVER_URL 和 UPLOAD_PATH 等环境变量接收生产配置,这些变量由服务器上的 Docker Compose 与 .env 文件提供。
4.3 执行Maven打包
先执行 clean 清除上一次构建遗留的 target 文件,再执行 package 编译源代码、复制页面和静态资源、跳过测试并生成可运行 JAR。
mvn clean package -DskipTests
命令执行期间 Maven 会依次完成清理、资源复制、Java 编译、测试编译检查、JAR 生成,以及 Spring Boot repackage。最后必须看到 BUILD SUCCESS;若显示 BUILD FAILURE,不要上传 target 中的旧 JAR,应先根据末尾错误修复后重新执行。
4.4 确认JAR文件
成功打包后,JAR 的固定位置为 target/web-0.0.1-SNAPSHOT.jar。使用下面命令确认文件存在、大小大于零,并检查 JAR 内是否包含登录模板
Get-Item .\target\web-0.0.1-SNAPSHOT.jar
jar tf .\target\web-0.0.1-SNAPSHOT.jar | Select-String "BOOT-INF/classes/templates/login.html"
第二条命令应输出 BOOT-INF/classes/templates/login.html。该检查能确认Thymeleaf 页面已经被打入JAR,避免部署后出现模板文件缺失
4.5 本地可选启动验证
若本地 MySQL 已启动且配置了对应数据库,可在打包后用 JAR 做一次启动验证。以下命令中的数据库账号和密码仅用于本地测试,不要填写生产密码
java -jar .\target\web-0.0.1-SNAPSHOT.jar --DB_URL="jdbc:mysql://127.0.0.1:3306/bs_salary?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=GMT%2B8" --DB_USERNAME=root --DB_PASSWORD=本地数据库密码
日志出现 Started WebApplication 后,浏览器访问 http://127.0.0.1:8080。验证完毕后,在 PowerShell 按 Ctrl+C 停止程序。此步骤不是上传前的强制要求,但能更早发现代码或资源错误
4.6 JAR包上传
最终需要上传的是新生成的 target/web-0.0.1-SNAPSHOT.jar,而不是整个 target 目录。每次改动 Java、HTML、CSS、application.yml 或 Docker 相关配置后,都应重新执行 Maven 打包,再通过 Xftp 覆盖服务器上的同名JAR
本地文件:target\web-0.0.1-SNAPSHOT.jar
服务器文件:/opt/sm-salary/target/web-0.0.1-SNAPSHOT.jar
上传新 JAR 后,在服务器 /opt/sm-salary 目录执行 docker compose up -d --build app。该命令仅重建应用容器,不会删除 MySQL 数据卷和上传文件
五、上传部署文件
在Xshell 中创建服务器部署目录,以本项目为例:
mkdir -p /opt/sm-salary/db
mkdir -p /opt/sm-salary/nginx
mkdir -p /opt/sm-salary/target
点击 Xshell 工具栏的 Xftp 按钮,使用当前 SSH 会话上传下列文件:
| 本地文件 | 服务器路径 |
| Dockerfile | /opt/sm-salary/Dockerfile |
| docker-compose.yml | /opt/sm-salary/docker-compose.yml |
| target/web-0.0.1-SNAPSHOT.jar | /opt/sm-salary/target/web-0.0.1-SNAPSHOT.jar |
| db/bs_salary.sql | /opt/sm-salary/db/bs_salary.sql |
| nginx/default.conf | /opt/sm-salary/nginx/default.conf |
具体操作如下:

六、创建生产密码文件
在服务器创建 .env。该文件仅保留在服务器中,不能上传、提交 Git 或发送给他人:
cd /opt/sm-salary
nano .env
MYSQL_ROOT_PASSWORD=填写MySQL_root随机强密码
MYSQL_PASSWORD=填写salary_app随机强密码
SERVER_URL=http://服务器公网IP或域名
设置好后按Ctrl+o → 回车 → Ctrl + x保存
七、首次启动与验证
cd /opt/sm-salary
docker compose pull
docker compose up -d --build
docker compose ps
正常时 sm-salary-mysql 显示 healthy,sm-salary-app 显示 Up,sm-salary-nginx 显示 Up 且映射 80 端口
curl -sS -o /dev/null -w "HTTP 状态:%{http_code}\n" http://127.0.0.1/
返回 HTTP 状态 200 后,在电脑浏览器访问 http://服务器公网IP
八、部署过程中可能会出现的问题
8.1 Docker daemon未运行
现象:Cannot connect to the Docker daemon
处理:systemctl enable --now docker
8.2 拉取镜像超时
处理:按第三章配置 ACR 镜像加速器,然后重新执行 docker compose pull
8.3 首页返回500模板找不到
现象:日志中出现 TemplateInputException: Error resolving template [/login]
处理:将 FrameController 中的 /login、/index、/reg、/welcome 改为无斜杠模板名,重新打包上传 JAR 后执行:
docker compose up -d --build app
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)