从代码到公网:Spring Boot部署实战

YC 47 次阅读 发布于 13 天前 无~


AI智能摘要
本地 localhost:8080 一切正常,可代码一旦丢上服务器就报错不断,想让朋友或答辩现场访问却卡在内网这道墙前。文章以雨云 2核2G 服务器与宝塔面板为例,完整走通从安全组放行 22、8080、80、443 端口,到安装 OpenJDK 11、用 mvn clean package -DskipTests 打包上传、再以 Systemd 配置开机自启的全过程,并整理端口未放行、JDK 版本不匹配、端口占用等常见坑。从"能跑"到"能被访问",究竟差了哪几步?
— AI 生成的文章内容摘要

前言

本地运行得好好的项目,一部署到服务器就各种报错?这篇文章带你从零开始,在雨云服务器上完成Spring Boot项目的完整部署。
为什么需要一台云服务器?
很多Java初学者会遇到这样的场景:在本地写好的Spring Boot项目,自己用localhost:8080访问一切正常,但想让朋友看看、或者在课程设计答辩时演示,就卡住了。
问题的本质是: 你的代码跑在本地电脑上,别人无法访问你的内网地址。
解决方案很简单: 把项目部署到一台有公网IP的云服务器上。只要是能联网的设备,都可以访问你的应用。
云服务器相对于本地电脑的优势很明显:

对于个人开发者、学生群体来说,雨云等国产云服务商的入门级配置(2核2G)已经足够支撑小型Spring Boot项目的部署需求。雨云成立于2018年,是国内具有自主知识产权的云计算服务提供商,持有国家工信部颁发的ISP证、IDC证、CDN证。

雨云优惠注册地址: 雨云 - 老一代云服务提供商

优惠码:Nzc0OTI0

部署前的准备工作



注册雨云账号并购买服务器

  1. 注册账号:访问雨云官网,完成注册。新用户通常可以获得首月优惠券。

  2. 注册完账号后进到雨云控制台,云服务器入口可以在后台的 总览云产品 部分找到:

点击购买云服务器,接着选择服务器区域,建议选择国外机房,无需ICP备案,省去等待时间

配置方面选择2核2G一般够用了。

操作系统这一栏选择 宝塔面板10.0 [Ubuntu24.04/LNMP] 安装

都选好后就可以点击立即购买了,也可以选择1元试用1天。

购买后即可在我的云服务器这里看到你买的云服务器

这里以我购买过的服务器来演示

点击管理。

接着就可以看到云服务器的信息了,在这里重装/切换系统,可以升级配置。

安全组配置:部署前的第一道防线


很多新手拿到服务器的第一件事就是SSH登录,然后开始装软件——这个顺序是错误的。安全组是云服务器的虚拟防火墙,必须先配置再部署。

登录雨云控制台,进入服务器管理页,找到「安全组」或「防火墙」设置,在入方向放行以下端口:

端口用途建议
22SSH远程连接建议限制为你的个人IP,避免被暴力破解
8080Spring Boot默认端口部署测试时开放
80HTTP网站访问Nginx代理时使用
443HTTPS(SSL证书)生产环境必备
3306MySQL数据库不要暴露在公网,仅内网访问

服务器环境配置

点击管理页面的宝塔面板

注意首次点击会出现默认用户名和密码,登陆成功后请及时修改

修改指令参考宝塔面板官方资料宝塔linux面板命令大全 - 宝塔面板

登录完成后点击终端按钮

开始安装JDK(Java运行环境)
Spring Boot项目必须依赖Java环境。在服务器终端执行以下命令:

Ubuntu系统:

# 1. 更新软件包列表
sudo apt update
2. 安装 OpenJDK 11
sudo apt install openjdk-11-jdk -y

验证安装:

java -version

本地项目打包
回到你的本地电脑,打开Spring Boot项目。

使用Maven打包
在项目根目录(有pom.xml的地方)打开终端,执行:

mvn clean package -DskipTests

mvn clean package -DskipTests
-DskipTests表示跳过测试用例,加快打包速度。执行成功后,在target目录下会生成一个.jar文件,例如myapp-0.0.1-SNAPSHOT.jar。

确认打包结果

在本地先运行一下,确保jar包可以正常启动:

java -jar target/xxx.jar
看到Spring Boot的启动横幅(Spring标志ASCII Art),说明打包成功。按Ctrl+C停止。

上传并部署项目


上传JAR包到服务器
点击左边导航栏中的文件按钮

进入路径/www/wwwroot/default创建一个专门放应用的目录,管理更清晰:

进入以后点击新建按钮创建一个文件夹,名字随便但是不要有中文

进入文件夹点击上传上传电脑本地打包的文件

手动启动测试
上传完成后进入上传的文件夹中,点击页面中上方的终端按钮,输入以下命令确认服务器环境没问题:

java -jar xxx.jar --server.port=8080
在浏览器访问 http://你的服务器IP:8080,如果能看到你的应用页面或接口返回数据,说明部署成功!

排障提示:如果访问不了,检查以下几点:

配置Systemd服务(实现开机自启)
生产环境不能一直挂着终端窗口,需要让Java进程在后台持续运行,并且服务器重启后自动恢复。

先按Ctrl+C停止刚才手动启动的进程,然后回到上一个文件夹创建服务文件:

粘贴以下内容(根据实际情况修改路径和端口):

[Unit]
Description=My Spring Boot Application
After=syslog.target network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /opt/myapp/xxx.jar --server.port=8080
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target


保存后执行:

重新加载服务配置
sudo systemctl daemon-reload
启动服务
sudo systemctl start myapp
设置开机自启
sudo systemctl enable myapp
查看运行状态
sudo systemctl status myapp
看到 active (running) 说明服务已成功运行。


下面整理几个部署过程中最常见的坑,以及对应的解决方案:

常见问题与避坑指南

问题原因解决方案
访问不了8080端口安全组/防火墙未放行检查云控制台安全组和服务器防火墙
JAR包无法启动JDK版本不匹配检查java -version,确保与项目编译版本一致
端口被占用有其他程序在用8080lsof -i:8080查占用进程,kill掉或换端口
数据库连不上MySQL只允许localhost在MySQL中创建允许远程连接的用户(开发测试用,生产不推荐)

写在最后

从本地localhost到公网可访问,是每个Java开发者从“学习”走向“交付”的必经之路。云服务器的价值不在于配置多高,而在于它能让你写的代码真正跑在互联网上,被其他人看到、使用。

后续你可以继续探索:配置Nginx反向代理隐藏8080端口、绑定自己的域名、启用HTTPS……每多走一步,你的项目就离“正规军”更近一点。

如果你在部署过程中遇到具体问题,欢迎在评论区交流讨论!