一、部署前准备

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
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐