当前位置: 首页 > news >正文

如何通过 IDEA 远程部署 Spring Boot 项目到 Linux 服务器?

最稳妥的方式是通过 Maven 打包成 Jar 包,上传至服务器后使用 java -jar 命令运行。若需调试,需配置远程 JDWP 端口并建议通过 SSH 隧道连接,避免直接暴露调试端口。

先说结论:IDEA 本身不直接“推送”部署,而是本地打包后上传至 Linux 服务器运行。远程调试需额外配置 JVM 参数,且生产环境严禁直接暴露调试端口。

  • 适合:常规 Spring Boot 项目上线、测试环境故障排查时的远程断点调试。
  • 先准备:服务器 JDK 环境(版本一致)、网络端口放行、普通用户权限、本地与服务器代码版本一致。
  • 验收:进程存活、端口监听正常、业务接口可访问、日志轮转配置生效。

核心命令速用

以下是核心操作命令,请根据实际环境修改用户和路径:

# 1. 本地打包(IDEA 终端或命令行)
mvn clean package -Dmaven.test.skip=true# 2. 上传 Jar 包到服务器(建议使用普通用户,禁止生产环境直接用 root)
scp target/your-app.jar user@server_ip:/home/user/deploy/# 3. 服务器后台运行(基础版)
nohup java -jar your-app.jar > std.out 2>&1 &# 4. 服务器调试模式运行(测试环境专用,绑定 localhost 更安全)
# JDK 8: address=5005
# JDK 9+: address=*:5005 (若需远程连接)
# 安全建议:绑定 127.0.0.1 并通过 SSH 隧道转发
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=127.0.0.1:5005 -jar your-app.jar

详细操作步骤

1. 本地打包与检查

在 IDEA 右侧 Maven 面板中,依次执行 clean 和 package 生命周期。完成后在 target 目录下确认 Jar 包已生成,并检查 pom.xml 中的 packaging 是否为 jar。

2. 上传文件

使用 scp、SFTP 工具将 Jar 包上传至服务器指定目录。上传后建议在服务器上使用 ls -lh 检查文件大小,确保传输完整。生产环境严禁使用 root 用户传输,应创建专用部署账号。

3. 服务器环境检查

确保服务器已安装 JDK,且版本与本地开发环境一致。使用 java -version 命令验证。若版本不一致,可能导致 UnsupportedClassVersionError

4. 配置服务器防火墙

仅放行业务端口,调试端口建议不放行公网。以 CentOS 7+ firewalld 为例:

# 放行业务端口(如 8080)
firewall-cmd `--zone`=public `--add-port`=8080/tcp `--permanent`
firewall-cmd `--reload`# 调试端口不建议直接放行,若必须放行请限制 IP
# firewall-cmd `--zone`=public `--add-port`=5005/tcp `--permanent`

5. 配置日志轮转(防止磁盘占满)

使用 nohup 输出日志时,需配置 logrotate 避免日志文件无限增长。创建 /etc/logrotate.d/java-app

/home/user/deploy/std.out {dailyrotate 7compressdelaycompressmissingoknotifemptycreate 0644 user user
}

6. 配置 IDEA 远程调试

在 IDEA 中打开 Run -> Edit Configurations,点击 + 号添加 Remote JVM Debug:

  • Host:填写服务器 IP。若使用 SSH 隧道,此处填 localhost。
  • Port:填写调试端口(如 5005)。
  • Command line arguments:复制服务器启动命令中的 jdwp 参数部分,确保一致。
  • Transport:默认 Socket 即可。

若使用 SSH 隧道,需在本地终端执行:ssh -L 5005:127.0.0.1:5005 user@server_ip,然后 IDEA 连接 localhost:5005。

怎么验证是否生效

1. 进程检查

在服务器执行 ps -ef | grep java,确认进程是否存在且启动参数正确。

2. 端口监听

使用 netstat -aptn | grep 端口号ss -lntp 检查应用端口及调试端口是否处于 LISTEN 状态。调试端口应仅监听 127.0.0.1。

3. 日志观察

查看控制台输出或 nohup 生成的 std.out 文件,确认有无 Started Application 字样。同时检查 logrotate 是否按预期切割日志。

4. 调试连接

在 IDEA 点击 Debug 按钮,若底部状态栏显示 Connected,且打断点后能暂停程序,即表示调试通道畅通。

常见风险与排查

1. 调试端口暴露风险(高危)

JDWP 调试端口若绑定 address=*:5005 且对公网开放,攻击者可直接利用该端口执行代码。生产环境严禁开启调试模式,测试环境建议绑定 127.0.0.1 并通过 SSH 隧道连接。

2. 防火墙拦截

云服务器安全组和本地防火墙需放行应用端口。若无法访问,优先检查安全组入站规则及服务器内部 firewall/ufw 状态。

3. 代码版本不一致

远程调试时,若本地代码与服务器运行的 Jar 包版本不一致,断点可能无法命中或变量显示错误。部署前请确认 Git Commit ID 或 Maven 版本号一致。

4. JDK 版本差异

JDK 8 与 JDK 9+ 在 JDWP 参数上略有差异。JDK 8 使用 address=5005,JDK 9+ 推荐使用 address=*:5005 允许远程连接,但出于安全考虑,建议统一绑定具体 IP 或 localhost。

5. 磁盘空间占满

未配置日志轮转的 nohup 输出文件可能增长至数十 GB,导致服务器磁盘满。务必配置 logrotate 或在应用内配置日志滚动策略(如 logback-spring.xml)。

原文链接:https://www.zjcp.cc/ask/11662.html

http://www.jsqmd.com/news/856008/

相关文章:

  • 别再只会拖模块了!用Simulink S-Function把C++算法集成到模型里的保姆级教程
  • 别再自己造轮子了!手把手教你用LwRB环形缓冲区搞定嵌入式数据流(附DMA零拷贝实战)
  • 不只是跑通Demo:用Isaac Gym和Legged_Gym训练四足机器人,我遇到的5个实战问题与调优心得
  • 废水监测设备哪家强?江苏做监测设备运维的公司有哪些?COD氨氮重金属水质监测设备厂家盘点,认准江苏卓正 - 栗子测评
  • 别再只读原始值了!MPU6050数据滤波与姿态解算入门:用STM32实现简易角度估算
  • 用FPGA的DDS IP核做个信号发生器:从Vivado配置到ILA抓波形实战
  • 从Simulink到C代码:手把手教你移植一阶ESO到嵌入式MCU(附完整工程)
  • 别再为画图发愁了!手把手教你用开源神器draw.io搞定流程图和数学公式
  • Linux开发内功:高效工具链与项目布局实战指南
  • 保姆级教程:用YOLOv8和公开数据集(UA-DETRAC/BIT-Vehicle)快速搭建车辆检测系统
  • 2026年知名的浙江生产线/插件生产线/生产线/倍速生产线可靠供应商推荐 - 品牌宣传支持者
  • 告别降级!PyTorch 1.13.1 + CUDA 11.6 下搞定 Mask R-CNN/Faster R-CNN 的 THC 依赖报错(保姆级修复)
  • 从MVC到DDD:微服务架构下应对业务复杂性的实战演进
  • 从原理图到PCB:手把手教你设计一个支持CAN总线的程控电阻箱(STM32方案)
  • 华为eNSP实验避坑指南:搞定MSTP+VRRP+OSPF多协议联动时最常见的5个报错
  • 保姆级教程:用PlatformIO给ESP32刷Marlin固件,搞定WiFi配置和Web界面
  • 别再傻傻分不清!GDT、TSS、TVS、ESD这四种保护器件,到底怎么选?(附选型速查表)
  • Perplexity概念解释功能终极手册(含PyTorch/TensorFlow原生实现+Hugging Face源码级调试技巧)
  • 2026年4月市场优秀的滚轮轴承供应商推荐,滚针轴承/不锈钢滚针轴承/连铸机耐高温轴承/单向轴承,滚轮轴承厂商哪家好 - 品牌推荐师
  • 2026年抗静电的PVC型材/电器用PVC型材/PVC异型材厂家推荐与选型指南 - 品牌宣传支持者
  • ARMv8-A架构LDP与LDR内存加载指令详解
  • 2026年靠谱的广东复合牛皮纸/广东牛皮纸主流厂家对比评测 - 品牌宣传支持者
  • 嵌入式系统开发实战:从硬件选型到软件编程的完整指南
  • 避坑指南:树莓派4B + PCA9685驱动舵机,电源供电和I2C报错‘Remote I/O error’的完整解决方案
  • 2026年靠谱的复合床垫牛皮纸/家具沙发牛皮纸与床垫编织袋/广东牛皮纸/复合牛皮纸多家厂家对比分析 - 行业平台推荐
  • Linux网络编程实战:从Socket基础到高并发服务器设计
  • 别再只打包AppImage了!在银河麒麟V10上为Electron应用制作专业deb安装包的完整流程
  • 避开这些坑:CSI指纹定位中,为什么大家都不用相位信息?从硬件偏差到数据处理全解析
  • 别再死记硬背流程图了!用Python从零实现一个遗传算法(附完整代码)
  • 射电终端部署中的射频干扰测试与抑制技术