结合你全程操作,补充服务器初始创建、WinSCP使用、前端部署完整流程,所有敏感信息统一打码,适配 CSDN 发布,整合为一篇完整文章。

从服务器初始化到前后端全套部署:Spring Boot + 前端 完整上线踩坑记录(CentOS7 + Java17 + Redis + MySQL)

本文从零开始,记录阿里云 CentOS 7 服务器初始化、工具使用、环境搭建、后端打包部署、前端部署全流程,包含版本不兼容、端口占用、依赖缺失等各类问题及解决方案,新手可直接照着操作。

一、整体架构与环境说明

  • 后端项目:career-assistant-server,技术栈:Spring Boot 3.2.5 + Java 17 + MySQL + Redis
  • 前端项目:Vue3/Vite 项目
  • 服务器:阿里云 CentOS 7 系统
  • 核心流程:服务器购买初始化 → WinSCP 工具使用 → 服务端环境搭建 → 后端打包部署 → 前端部署上线

二、第一步:阿里云服务器初始配置

2.1 服务器购买与系统选择

  1. 登录阿里云控制台,选择云服务器 ECS,根据需求选购配置。
  2. 操作系统选择CentOS 7.x 64位(本文全程基于该系统操作)。
  3. 实例创建完成后,进入实例详情页,记录两个关键信息:
    • 公网IP:***.***.***.***(对外访问地址,后文统一打码)
    • 登录账号:默认 root,也可自行创建普通用户 admin
  4. 重置服务器登录密码,牢记账号密码,用于后续远程连接。

2.2 安全组放行端口(前置必做)

安全组相当于服务器的防火墙,不放行端口则外网无法访问服务

  1. 进入 ECS 实例 → 安全组 → 配置规则。
  2. 添加入方向规则,本文需要放行端口:
    • 22:远程连接端口(SSH 连接、WinSCP 上传文件必备,默认已开启)
    • 9000:后端服务端口
    • 80/443:前端网页访问端口(HTTP/HTTPS)
  3. 授权策略:允许,授权对象:0.0.0.0/0(临时全网开放,生产环境建议限制本机IP)。

三、第二步:WinSCP 工具使用(文件上传/下载必备)

3.1 工具介绍

WinSCP 是 Windows 端图形化 SFTP 工具,用来本地 ↔ 服务器互传文件、在线编辑配置文件,操作简单,替代命令行上传。

3.2 连接服务器

  1. 下载安装 WinSCP,打开软件,新建会话:
    • 协议:SFTP
    • 主机名:服务器公网IP ***.***.***.***
    • 端口号:22
    • 用户名:admin / root
    • 密码:服务器登录密码
  2. 点击「登录」,连接成功后界面分为两部分:
    • 左侧:本地电脑文件目录
    • 右侧:远程服务器文件目录

3.3 基础操作

  1. 新建文件夹:右键空白处 → 新建 → 目录,本文后端统一存放目录:/home/admin/app
  2. 上传文件:左侧选中本地文件/文件夹,直接拖拽到右侧服务器目录,弹出提示选择「覆盖」即可。
  3. 下载文件:右侧服务器文件拖拽到左侧本地目录,常用于下载配置文件修改。
  4. 编辑文件:右键服务器配置文件 → 编辑,修改后保存自动同步到服务器。

小技巧:Redis、Nginx 等配置文件,优先用 WinSCP 下载到本地修改,再上传覆盖,比命令行编辑更直观。


四、第三步:服务器后端环境搭建

4.1 离线安装 Java 17(CentOS 7 专用)

问题描述

Spring Boot 3.x 强制要求 Java 17 及以上,CentOS 7 官方 YUM 源无 Java17 安装包,执行 yum install java-17-openjdk-devel 会提示 No package available

解决步骤(离线安装 OpenJDK 17)

  1. 登录服务器终端(阿里云网页终端 / Xshell),清理系统原有旧 Java 环境(可选)
yum remove -y java*
rm -rf /usr/local/jdk*
  1. 下载 OpenJDK 17 安装包
cd /root
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
  1. 解压到系统目录
tar -zxf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/
  1. 配置全局环境变量
echo 'export JAVA_HOME=/usr/local/jdk-17.0.2' > /etc/profile.d/jdk17.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk17.sh
source /etc/profile
  1. 验证是否安装成功
java -version
javac -version

正常输出示例:

openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)

4.2 Redis 安装与配置

1. 在线安装 Redis

yum install -y redis
systemctl enable redis  # 设置开机自启
systemctl start redis   # 启动服务

2. 修改 Redis 核心配置

配置文件路径:/etc/redis.conf
使用 WinSCP 将文件下载到本地修改,再上传覆盖,关键配置修改如下

# 允许所有网段连接
bind 0.0.0.0
# 关闭保护模式
protected-mode no
# 后台运行
daemonize yes
# 设置 Redis 访问密码(已脱敏)
requirepass ******
  1. 重启 Redis 使配置生效
systemctl restart redis
  1. 简单验证 Redis
redis-cli
AUTH ******
set test_key hello
get test_key

五、第四步:后端项目打包 + 服务器部署

5.1 本地项目打包(解决普通 Jar 无法运行问题)

问题现象

直接默认打包生成的 Jar 包体积很小,上传服务器运行报错:NoClassDefFoundError
原因:普通 Jar 仅包含自身代码,不包含项目依赖包

解决方案:配置 Spring Boot 打包插件

在项目 pom.xml<build> 节点内添加打包插件,生成可执行胖 Jar(Fat Jar)

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.2.5</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行打包命令:

mvn clean package

打包成功后,target 目录会生成 70MB+ Jar 包,内置所有依赖,可直接使用 java -jar 运行。

5.2 上传 Jar 包到服务器

  1. 打开 WinSCP,本地找到 target 目录下的 career-assistant-server-1.0.0.jar
  2. 拖拽上传至服务器目录:/home/admin/app

5.3 启动项目 & 踩坑处理

1. 赋予 Jar 执行权限

cd /home/admin/app
chmod +x career-assistant-server-1.0.0.jar

踩坑 1:端口占用 8080

报错信息:

Web server failed to start. Port 8080 was already in use.

原因:项目默认 8080 端口被占用,线上配置文件未生效。

解决方案:启动命令手动指定运行端口、指定环境配置,后台运行:

# 先查询并杀死残留 Java 进程
ps -ef | grep java
kill -9 进程ID

# 后台启动项目(指定环境 + 指定端口,日志输出到文件)
nohup java -jar career-assistant-server-1.0.0.jar --spring.profiles.active=prod --server.port=9000 > app.log 2>&1 &

踩坑 2:JDK 版本不匹配

报错:类加载异常、java: command not found
原因:服务器默认 JDK 8,Spring Boot 3.x 不兼容,前文已通过安装 Java 17 解决。

5.4 查看启动日志

tail -f app.log

出现以下日志代表项目正常启动:

Tomcat initialized with port 9000 (http)
Started XXXApplication in X seconds

5.5 后端服务验证

浏览器访问:http://***.***.***.***:9000
页面出现 Whitelabel Error Page(Spring Boot 默认 404 页面),并非部署失败

  • ✅ 服务已正常启动,Tomcat 监听 9000 端口
  • ✅ 外网可以正常访问服务器端口
  • ❗ 仅根路径 / 未配置接口控制器,所以返回 404

正确验证:访问项目实际业务接口,例如:

http://***.***.***.***:9000/api/xxx

只要有接口响应(正常数据/参数报错/未登录提示),后端部署完成。


六、第五步:前端 Vue 项目部署(Nginx 方式)

前端采用 Vue3/Vite 开发,使用 Nginx 部署静态资源,是主流部署方案。

6.1 前端本地打包

  1. 进入前端项目根目录,执行打包命令(Vite 项目):
npm run build
  1. 打包完成后,项目会生成 dist 文件夹,该文件夹内就是所有前端静态资源(html、js、css、图片)。

6.2 服务器安装 Nginx

# 在线安装 Nginx
yum install -y nginx

# 设置开机自启、启动服务
systemctl enable nginx
systemctl start nginx

# 查看 Nginx 运行状态
systemctl status nginx

6.3 上传前端静态资源

  1. 使用 WinSCP,在服务器新建前端目录,示例:/home/admin/web
  2. 将本地打包好的 dist 文件夹整体拖拽上传/home/admin/web 目录下。

6.4 修改 Nginx 配置文件

  1. Nginx 默认配置文件路径:/etc/nginx/nginx.conf,使用 WinSCP 下载到本地编辑。
  2. 核心配置(静态资源 + 后端接口代理,解决跨域):
server {
    listen 80;
    server_name ***.***.***.***;  # 服务器公网IP

    # 前端静态资源目录
    root /home/admin/web/dist;
    index index.html;

    # 解决 Vue 路由 history 模式刷新 404
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 接口代理:转发请求到后端 9000 端口,解决跨域问题
    location /api/ {
        proxy_pass http://xxxxxx:9000/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. 编辑完成后,将 nginx.conf 上传覆盖服务器原文件。

6.5 重启 Nginx 生效

# 检查配置文件语法是否有误
nginx -t

# 重启 Nginx
systemctl restart nginx

6.6 前端访问验证

浏览器直接访问服务器公网IP:

http://***.***.***.***

正常打开前端页面,且页面可以正常调用后端接口,代表前后端全套部署完成


七、服务器常用运维命令汇总

7.1 后端相关

# 查看 Java 进程
ps -ef | grep java

# 实时查看后端日志
tail -f /home/admin/app/app.log

# 停止后端项目
kill -9 进程ID

# 重启后端项目
nohup java -jar career-assistant-server-1.0.0.jar --spring.profiles.active=prod --server.port=9000 > app.log 2>&1 &

7.2 Nginx 前端相关

# 启动 Nginx
systemctl start nginx

# 停止 Nginx
systemctl stop nginx

# 重启 Nginx
systemctl restart nginx

# 检查 Nginx 配置
nginx -t

7.3 Redis 相关

systemctl start redis
systemctl stop redis
systemctl restart redis

八、全套部署总结 & 避坑要点

  1. 服务器前置操作
    购买 ECS 后第一时间配置安全组放行端口,22、80、9000 等必需端口不要遗漏。

  2. WinSCP 使用技巧
    优先用图形化工具上传文件、修改配置,新手不用强行记忆命令行编辑命令。

  3. 版本强制匹配
    Spring Boot 3.x 必须搭配 Java 17+,CentOS 7 建议离线安装 JDK,放弃系统自带 JDK8。

  4. 后端打包要求
    必须配置 spring-boot-maven-plugin 生成 Jar,否则必然报类缺失异常。

  5. 端口统一规范
    后端端口、Nginx 代理端口、安全组放行端口三者保持一致。

  6. 前端部署重点
    Vue history 路由必须配置 try_files 解决刷新 404;通过 Nginx 反向代理接口,彻底解决跨域问题。

  7. 敏感信息防护
    公网IP、服务器密码、Redis/数据库密码、密钥等,发布博客、文档时务必打码,保障服务器安全。

Logo

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

更多推荐