当前位置:首页>Linux>SpringBoot 应用到 Linux 部署全攻略

SpringBoot 应用到 Linux 部署全攻略

  • 2026-10-11 08:41:40
SpringBoot 应用到 Linux 部署全攻略
开篇引言

很多自学Java的小伙伴,日常开发都习惯在Windows上完成,服务也都部署在本地,想把项目迁移到Linux服务器上实战一把,却被各种问题搞得头大:JDK版本不匹配、数据库远程连不上、项目启动报错、Nginx反向代理配置不通……

本文就以完整的前后端分离项目为例,手把手带你走完从Windows开发环境到Linux服务器的全量部署流程,把每一步的标准操作、高频踩坑点、对应的解决方案全给你讲明白。 本文适配技术栈:后端SpringBoot、MySQL、Redis、Minio、WebSocket;前端Vue;Nginx做反向代理,看完就能照着操作,顺利完成项目部署!


一、部署前核心说明

我们遇到的90%部署问题,根源都在于开发环境(Windows)与生产环境(Linux)不一致,所以整个部署流程,核心就是解决环境适配、服务连通、配置兼容三大问题。 整个部署流程分为5个核心步骤,按顺序操作即可:

  1. Linux服务器JDK环境配置
  2. MySQL远程访问权限配置
  3. 基础依赖服务(Redis/Minio)启动
  4. SpringBoot项目打包与服务启动
  5. Nginx反向代理与前端部署

二、完整部署分步操作指南

步骤1:Linux服务器JDK环境配置(最核心基础)

SpringBoot项目运行的核心是JDK环境,必须保证Linux上的JDK版本与Windows开发环境一致或更高,否则会出现版本不兼容、项目启动失败的问题。

1.1 标准安装操作

  1. 先查看Linux当前JDK版本,确认环境情况
    java -version
  2. 下载对应版本JDK安装包(本文以JDK17为例,适配绝大多数SpringBoot项目)
    wget --header="Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/java/17/archive/jdk-17.0.10_linux-x64_bin.tar.gz
  3. 解压安装包到指定目录
    # 先创建安装目录mkdir -p /usr/local/java# 解压安装包tar -zxvf jdk-17.0.10_linux-x64_bin.tar.gz -C /usr/local/java
  4. 配置全局环境变量
    # 编辑系统配置文件vim /etc/profile
    在文件末尾添加以下配置,保存退出:
    export JAVA_HOME=/usr/local/java/jdk-17.0.10export PATH=$PATH:$JAVA_HOME/bin
  5. 刷新配置,使环境变量生效
    source /etc/profile
  6. 验证安装是否成功,输出版本号即为配置完成
    java -version

1.2 高频踩坑&解决方案

坑:项目编译版本高,Linux的JDK版本低,环境变量改了不生效

  • 解决方案1:升级JDK版本后,直接指定JDK路径启动jar包,无需依赖全局环境变量
    /usr/local/java/jdk-17.0.10/bin/java -jar 你的项目jar包名.jar
  • 解决方案2:降低项目编译版本,使用Maven重新打包后再部署(生产环境慎用)

步骤2:MySQL远程访问配置

Windows开发时,数据库默认在本地运行,部署到Linux后,需要让Linux服务器能远程访问Windows上的MySQL数据库,核心是开通远程访问权限、配置网络连通。

2.1 标准配置操作

  1. 登录Windows本地的MySQL服务,创建允许远程访问的用户并授权
    -- 创建远程访问用户,%表示允许所有地址访问CREATEUSER'你的用户名'@'%'IDENTIFIEDBY'你的密码';-- 给用户授予数据库全量权限GRANTALLPRIVILEGESON 你的数据库名.* TO'你的用户名'@'%';-- 刷新权限,使配置生效FLUSHPRIVILEGES;
  2. 修改MySQL配置文件,允许远程连接 找到MySQL安装目录下的my.ini(Windows)/my.cnf(Linux)文件,在[mysqld]模块下添加以下配置:
    [mysqld]# 允许所有IP地址访问bind-address = 0.0.0.0
  3. 重启MySQL服务,使配置文件生效
  4. 配置Windows防火墙,放行MySQL端口 以管理员身份打开PowerShell,执行以下命令,放行默认3306端口:
    New-NetFirewallRule -DisplayName "MySQL Server" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow
  5. 在Linux服务器上测试网络连通性
    # 替换为你的Windows主机IP和MySQL端口telnet Windows主机IP 3306
    能正常连通即为配置完成,若失败可检查IP是否可ping通、端口是否正确、用户密码是否无误。

步骤3:基础依赖服务启动

项目正常运行,还需要Redis、Minio等基础服务,先确保这些服务在Linux上正常启动。

3.1 Redis服务启动

# 启动Redis服务,指定配置文件运行redis-server redis7.conf # 进入Redis客户端,验证服务是否正常redis-cli# 验证密码(若有设置)auth 用户名 密码# 测试连通性,返回PONG即为正常ping 

3.2 Minio服务启动

# 启动Minio服务,指定数据存储目录和控制台端口/usr/local/bin/minio server /mnt/data --console-address :9001

步骤4:SpringBoot项目打包与Linux部署

4.1 标准部署操作

  1. Windows开发环境中,使用Maven完成项目打包,得到可执行的jar包
  2. 在Linux服务器上创建项目目录,通过XFTP等工具将jar包上传到该目录
    # 创建项目目录mkdir -p /root/app# 切换到jar包所在目录cd /root/app
  3. 启动SpringBoot项目
    # 基础启动命令java -jar 你的项目jar包名.jar# 后台常驻启动命令(关闭终端不停止服务)nohup java -jar 你的项目jar包名.jar > app.log 2>&1 &
  4. 项目启动成功后,可通过Postman访问接口,测试后端服务是否正常运行,测试地址格式:http://Linux服务器IP:项目端口/接口地址

4.2 高频踩坑&解决方案

坑:打包/启动报错ServerEndpointExporter相关异常这个报错是因为项目使用了WebSocket,ServerEndpointExporter依赖Servlet容器环境,通常是容器缺失或配置错误导致。

解决方案:

  1. 检查pom.xml,确保引入了Web容器依赖(SpringBoot Web默认集成Tomcat)
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
  2. 若非Web环境,需替换容器依赖,排除默认Tomcat并引入Undertow
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency>
  3. 非Web环境下,给WebSocket配置添加条件化加载注解
    @ConfigurationpublicclassWebSocketConfig{@Bean@ConditionalOnWebApplicationpublic ServerEndpointExporter serverEndpointExporter(){returnnew ServerEndpointExporter();    }}
  4. 执行mvn dependency:tree命令,排查容器依赖的版本冲突,确保仅保留一个有效容器依赖。

步骤5:Nginx反向代理与前端部署

后端服务正常运行后,通过Nginx完成前端部署和反向代理,实现前端页面访问、接口请求转发、WebSocket长连接支持。

5.1 核心配置说明

Nginx的核心配置文件为nginx-1.x.x/conf/nginx.conf,我们需要配置3个核心模块:

  1. 前端页面访问配置:支持Vue等单页应用(SPA)路由
  2. 反向代理配置:将前端接口请求转发到Linux上的SpringBoot后端服务
  3. WebSocket配置:支持后端WebSocket长连接服务

5.2 完整可直接复用的Nginx配置

worker_processes1;events {worker_connections1024;}http {include       mime.types;default_type  application/octet-stream;sendfileon;keepalive_timeout65;# WebSocket升级适配配置map$http_upgrade$connection_upgrade{default upgrade;        '' close;    }# 后端服务地址配置,替换为你的Linux服务器IP和SpringBoot项目端口upstream backend_servers {server192.168.1.11:8080 weight=100;    }upstream webservers{server192.168.1.11:8080 weight=90;    }server {# 监听端口,默认80端口listen80;server_name  localhost;# 前端页面配置location / {# 支持Vue单页应用路由,刷新页面不404try_files$uri$uri/ /index.html;# 前端代码存放路径,替换为你的实际目录root   html/sky;# 默认首页index  index.html index.htm;        }# 错误页配置error_page500502503504  /50x.html;location = /50x.html {root   html;        }# 反向代理-管理端接口请求转发location /api/ {# 转发到后端服务,注意末尾/的匹配规则proxy_pass http://backend_servers/admin/;# 请求头配置,传递客户端真实信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_http_version1.1;# 超时时间配置proxy_connect_timeout30s;proxy_send_timeout60s;proxy_read_timeout60s;        }# 反向代理-用户端接口请求转发location /user/ {proxy_pass   http://webservers/user/;        }# WebSocket长连接支持location /ws/ {proxy_pass http://backend_servers/ws/;proxy_http_version1.1;# WebSocket升级配置proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 长连接超时时间延长proxy_read_timeout3600s;        }    }}

5.3 配置生效与验证

  1. 修改完配置文件后,重载Nginx配置使其生效
    # 测试配置文件是否有语法错误nginx -t# 重载配置nginx -s reload
  2. 浏览器访问http://Linux服务器IP,即可打开前端页面,测试接口请求、WebSocket连接是否正常。

至此,基于Windows开发的SpringBoot前后端分离项目,就完整迁移到Linux服务器上了!


三、部署高频避坑指南(90%的人都踩过)

  1. 环境版本问题
    :必须保证Linux的JDK、MySQL、Redis等服务版本,与Windows开发环境兼容,优先保证大版本一致,这是避免绝大多数问题的核心。
  2. 网络连通问题
    :所有服务启动后,先通过ping、telnet测试端口连通性,再排查配置问题;同时注意Linux防火墙、云服务器安全组是否放行对应端口。
  3. 路径配置问题
    :Windows和Linux的文件路径格式不同,Linux区分大小写,项目中的文件路径、配置文件路径必须适配Linux系统规则。
  4. 权限问题
    :Linux上运行服务时,注意文件和目录的访问权限,避免因权限不足导致服务启动失败、文件读写异常。
  5. API前缀匹配问题
    :Nginx反向代理时,注意proxy_pass末尾的/,路径匹配错误会导致接口404,务必和后端接口前缀保持一致。

结尾

从Windows本地开发到Linux服务器部署,是Java开发工程师必备的基础能力,看似复杂的流程,核心就是做好环境适配、配置正确、网络连通这三件事。

大家在部署过程中遇到了什么问题,欢迎在评论区留言,我会一一解答~如果这篇文章对你有帮助,别忘了点赞、在看、转发,让更多小伙伴少走弯路!

    最新文章

    随机文章