SpringBoot 本地项目部署云服务器 + 公网域名流程

SpringBoot 本地项目部署云服务器 + 公网域名流程

一、前言

很多 Java 初学开发者写完 SpringBoot 项目,只能在本地localhost运行,无法让外网其他人访问。想要真正项目上线、公网可访问、绑定域名、不带端口直接访问,必须完成 Linux 云服务器部署 + 端口放行 + Nginx 反向代理 + 域名解析全套流程。

本文全程使用MobaXterm工具,一站式完成:服务器连接、文件上传、项目部署、后台常驻、日志排查、Nginx 配置、域名绑定、公网正式上线。适配 CentOS7/8、阿里云 / 腾讯云所有云服务器,纯新手向、零废话、可直接跟着实操上线项目。

为什么推荐 MobaXterm 部署项目

  • 自带SFTP可视化文件面板,直接拖拽上传 Jar 包,无需 FTP、无需传输命令
  • 终端 + 文件管理二合一,不用切换软件
  • 免费够用、轻量稳定、适配所有 Linux 远程操作
  • 支持实时日志监控、进程查看,非常适合 Java 项目部署排查

二、部署整体流程总览

本地打包 → 云服务器环境检查 → MobaXterm 连接服务器 → 上传 Jar 包 → 后台启动 SpringBoot 项目 → 防火墙放行端口 → 安装配置 Nginx 反向代理 → 域名购买与解析 → 域名无端口公网访问

三、部署前期准备

1. 所需环境与资源

  • 本地环境:Windows、IDEA、Maven、MobaXterm
  • 服务器:阿里云 / 腾讯云 CentOS Linux 云服务器(已安装 JDK1.8+)
  • 项目:可正常本地启动的 SpringBoot 项目,端口默认 8080
  • 额外资源:完成备案的域名(国内云服务器强制备案)

2. 服务器前置检查

连接服务器后,确认 JDK 环境正常:

bash

java -version

输出版本号说明环境正常,无输出则先安装 JDK。

四、第一步:IDEA 本地打包 SpringBoot 项目

1. 确认打包插件

项目pom.xml必须拥有 SpringBoot 官方打包插件,用于打包可执行 Jar:

xml

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

2. Maven 打包操作

IDEA 右侧 Maven 工具栏:

  1. clean:清除旧打包文件
  2. package:打包生成可执行 Jar

打包成功后,项目target目录生成xxx.jar即为部署包。

上线重要修改

打包前必须修改项目配置:

  • 数据库、Redis、RocketMQ 地址改为服务器内网 IP
  • 禁止使用 localhost、127.0.0.1,防止上线后中间件连接失败

五、第二步:MobaXterm 连接云服务器

  1. 打开 MobaXterm → 点击 Session → 选择 SSH
  2. Remote host 填写云服务器公网 IP
  3. 勾选 Specify username,填写服务器用户名
  4. 输入服务器密码,完成远程连接

创建项目统一存放目录

bash

mkdir -p /home/ningzh/springboot-project cd /home/ningzh/springboot-project

六、第三步:拖拽上传 Jar 包

  1. MobaXterm 左侧为服务器可视化文件目录,右侧为命令终端
  2. 左侧文件夹定位到刚刚创建的/home/ningzh/springboot-project
  3. 打开本地项目 target 文件夹,直接将 xxx.jar 文件拖拽到左侧面板
  4. 等待传输进度条走完,终端执行ls,能看到 jar 包即上传成功

七、第四步:云服务器后台启动 SpringBoot 项目

1. 两种启动方式

前台启动(仅本地测试,关闭 MobaXterm 窗口项目直接停止)

bash

java -jar 项目名.jar

后台守护启动(正式上线使用,断开终端不关闭程序)

bash

nohup java -jar 项目名.jar > app.log 2>&1 &

参数详细说明:

  • nohup:让进程脱离终端,后台永久运行
  • app.log:把程序正常运行日志输出到 app.log 文件

  • 2>&1:将报错、异常日志统一写入同一个日志文件
  • &:命令放入后台执行,终端可继续输入其他指令

2. 实时查看启动日志,判断是否启动成功

bash

tail -f app.log

日志输出Started XxxApplication in xxx seconds代表项目启动完成,监听 8080 端口。

3. 查看 Java 运行进程

bash

# 简洁查看所有java进程 jps # 完整查看进程详情 ps -ef | grep java

八、第五步:服务器放行端口(公网访问基础)

SpringBoot 项目占用 8080,Nginx 占用 80(http 标准端口),两个端口都需要放行。

1. Linux 防火墙放行端口

bash

# 永久放行80、8080端口 firewall-cmd --add-port=80/tcp --permanent firewall-cmd --add-port=8080/tcp --permanent # 重载防火墙规则生效 firewall-cmd --reload # 校验已开放端口列表 firewall-cmd --list-ports

2. 云服务器控制台放行安全组

阿里云 / 腾讯云服务器,防火墙放行端口后还需要在后台安全组配置入站规则:

  1. 登录云服务器控制台,找到实例对应的安全组
  2. 添加入站规则,放行协议 TCP,端口 80、8080,授权对象 0.0.0.0/0(全网可访问)
  3. 保存规则,规则即时生效

此时访问公网IP:8080已经可以打开项目,但是带有端口,下面配置 Nginx 实现不带端口域名访问。

九、完整 Nginx 安装 + 反向代理详细教程

9.1 Nginx 作用说明

  1. 反向代理:外网访问 80 端口(域名默认端口,浏览器可省略),Nginx 接收请求转发给本地 8080 端口的 SpringBoot 程序
  2. 负载均衡(多服务扩展)、静态资源缓存、请求限流、SSL 证书 HTTPS 加密
  3. 隐藏后端真实服务端口,提升项目安全性

9.2 CentOS 系统安装 Nginx 完整命令

1. 安装 epel 软件源(CentOS 默认无 nginx 安装包)

bash运行

yum install -y epel-release

2. 安装 Nginx

bash

yum install -y nginx

3. Nginx 基础系统命令(启动 / 停止 / 重启 / 开机自启)

bash

# 启动nginx systemctl start nginx # 停止nginx systemctl stop nginx # 修改配置后重载(不中断访问) systemctl reload nginx # 重启nginx systemctl restart nginx # 设置开机自启(服务器重启自动运行nginx) systemctl enable nginx # 查看nginx运行状态 systemctl status nginx

4. 验证 Nginx 是否正常启动

浏览器直接访问服务器公网 IP,出现 Nginx 默认欢迎页面代表安装成功。

9.3 Nginx 核心目录结构(必须了解)

plaintext

# 主配置文件(我们主要修改这个文件) /etc/nginx/nginx.conf # 站点配置存放目录(推荐拆分配置,便于管理) /etc/nginx/conf.d/ # Nginx静态资源默认目录 /usr/share/nginx/html/ # Nginx日志目录 /var/log/nginx/

9.4 两种反向代理配置方案

方案一:推荐,拆分配置(conf.d 新建站点文件,便于多项目管理)

  1. 新建域名专属配置文件(替换为你的域名,例如school-market.com)

bash

vim /etc/nginx/conf.d/school-market.conf
  1. 完整配置粘贴进去,注释有详细讲解

nginx

server { # 监听80标准http端口,浏览器访问域名默认走80,无需填写端口 listen 80; # 绑定你的域名,多个域名空格分隔,@代表不带www,www代表带www前缀 server_name school-market.com www.school-market.com; # 日志配置,区分项目日志,方便排错 access_log /var/log/nginx/school-market-access.log; error_log /var/log/nginx/school-market-error.log; # 所有请求转发给本地SpringBoot 8080端口 location / { # 反向代理地址,指向本机运行的springboot项目 proxy_pass http://127.0.0.1:8080; # 以下配置固定复制,解决后端获取真实客户端IP、跨域、header丢失问题 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_connect_timeout 60s; proxy_read_timeout 60s; } }

方案二:直接修改主配置 nginx.conf

bash运行

vim /etc/nginx/nginx.conf

找到 http {} 内部,删除默认 server 块,替换为下面内容:

nginx

server { listen 80; server_name school-market.com www.school-market.com; access_log /var/log/nginx/school-market-access.log; error_log /var/log/nginx/school-market-error.log; location / { proxy_pass http://127.0.0.1:8080; 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_connect_timeout 60s; proxy_read_timeout 60s; } }

9.5 配置校验 + 重载生效

1. 检查 Nginx 配置语法是否错误(非常关键,错字符会导致 Nginx 启动失败)

bash运行

nginx -t

输出test is successful代表配置无错误。

2. 重载 Nginx,配置立即生效,不中断用户访问

bash

systemctl reload nginx

9.6 Nginx 常用排错命令

bash

# 实时查看访问日志 tail -f /var/log/nginx/school-market-access.log # 实时查看错误日志(502/404报错全部在这里) tail -f /var/log/nginx/school-market-error.log # 查看nginx运行状态 systemctl status nginx

9.7 502 Bad Gateway 报错常见原因(反向代理高频问题)

  1. SpringBoot 项目未启动,8080 端口无服务
  2. SpringBoot 启动崩溃,查看项目 app.log 日志排查异常
  3. 防火墙拦截本地回环,极少出现,关闭防火墙测试
  4. proxy_pass 地址写错,端口、IP 填写错误

十、第六步:域名购买 + 域名解析(正式公网上线)

1. 域名购买

前往阿里云万网、腾讯云 DNSPod 平台注册域名,国内服务器必须完成 ICP 备案,否则无法使用 80/443 端口。

2. 域名解析操作步骤

  1. 进入域名管理控制台,找到「解析」功能
  2. 添加两条 A 记录:
  • 主机记录:@,记录类型:A,记录值:云服务器公网 IP,TTL 默认 10 分钟
  • 主机记录:www,记录类型:A,记录值:云服务器公网 IP,TTL 默认 10 分钟
  1. 保存解析记录,等待 1-10 分钟全球 DNS 生效

3. 访问方式对比

未配置 Nginx:http://公网IP:8080配置 Nginx 反向代理 + 域名解析后:http://school-market.comhttp://www.school-market.com无需加任何端口,直接域名访问项目,项目正式全网上线。

十一、项目迭代更新流程(后续改代码重新上线)

  1. 一键停止旧 SpringBoot 项目进程

bash运行

kill -9 $(jps | grep jar | awk '{print $1}')
  1. 本地修改业务代码,IDEA 执行 clean、package 重新打包
  2. MobaXterm 拖拽新 jar 包覆盖服务器旧文件
  3. 后台启动项目

bash

nohup java -jar 项目名.jar > app.log 2>&1 &
  1. 查看 app.log 确认项目启动正常,Nginx 无需改动,自动转发新服务

十二、线上部署全套常见报错解决

1. 端口占用

SpringBoot8080 被占用

bash

netstat -tanlp | grep 8080 kill -9 进程PID

Nginx80 端口被占用

bash

netstat -tanlp | grep 80 systemctl stop nginx

2. RocketMQ / 数据库配置读取失败、connect to null

配置文件 key 书写不规范、线上地址未替换服务器内网 IP、使用localhost导致外部服务无法连接。 标准 mq 配置示例:

properties

rocketmq.name-server=192.168.117.128:9876 rocketmq.producer.group=school-market-producer-group rocketmq.consumer.group=school-market-consumer-group

3. 外网无法访问页面

双重检查:①云服务器安全组放行 80、8080 ②Linux 防火墙放行端口 ③SpringBoot 正常启动 ④Nginx 运行正常

4. Nginx 访问报 502 Bad Gateway

后端 SpringBoot 未启动、启动报错崩溃,优先查看项目 app.log 日志定位代码异常。

5. 访问域名 403/404

Nginx 配置 server_name 域名填写错误、proxy_pass 后端地址写错、项目接口路径错误。

十三、完整上线流程总结

本地 IDEA Maven 打包 → MobaXterm 远程连接 Linux 服务器 → 拖拽上传 Jar 包 → nohup 后台常驻启动 SpringBoot → 防火墙 + 云安全组放行 80、8080 端口 → 安装 Nginx、编写反向代理配置、重载生效 → 域名购买备案 + DNS 解析绑定服务器公网 IP → 纯域名无端口公网访问,项目正式上线。

整套流程覆盖 Java 后端从本地开发到公网域名上线全链路,包含 SpringBoot 部署、进程守护、日志排查、Nginx 反向代理核心知识点,适用于课程项目、毕业设计、小型商用系统上线部署。