文章目录
- 远程调试与远程部署的区别
- 远程部署的步骤
- 完整源代码
笔者的运行环境:
客户端:
部署成功过的客户端的 Java 版本:
- Java 17.0.7
部署成功过的客户端的 Java 程序:
- Spring Boot 3.1.0
部署成功过的客户端的 IntelliJ IDEA 版本:
- IntelliJ IDEA 2022.3.1 (Ultimate Edition)
部署成功过的客户端的 Windows:
- Windows 10 教育版
服务端:
部署成功过的服务端的 Java 版本:
- Java 17.0.7
部署成功过的服务端的 Linux:
- RedHat Enterprise Linux 9 x86_64
远程调试与远程部署的区别
在 IntelliJ IDEA 中进行远程调试与远程部署是不同的。
远程调试指的是事先以其它方法将 Java 应用打包并放在远程服务器中,然后以调试模式运行该 Java 应用,最后使用本地的 IntelliJ IDEA 进行远程连接该应用。
远程部署指的是直接使用本地的 IntelliJ IDEA 将本地的 Java 应用打包、部署到远程服务器,并远程运行该应用。
可以看出,远程部署要比远程调试方便很多。
关于在 IntelliJ IDEA 中远程调试 Java 程序,可见笔者的另一篇博客:
在 IntelliJ IDEA 中远程调试 Java 程序:
https://blog.csdn.net/wangpaiblog/article/details/120376176
远程部署的步骤
-
相当于远程调试,远程部署仅仅提供了自动打包、部署、运行的功能。远程连接的原理其实是一样的。这里以 Spring Boot 为例,演示一下如何将 Spring Boot 项目远程部署到服务器。
首先,读者需要知道如何查看远程服务器的 IP。关于这方面的内容,可见笔者的另一篇博客:
如何在 Windows 主机上访问本地局域网中的 Linux 主机:
https://blog.csdn.net/wangpaiblog/article/details/120052152 -
为了方便说明,笔者在 Spring 官网网站上下载了一个 Spring Boot 的 Demo 项目。
官方下载网址:https://start.spring.io/
-
现在开始简单改造一个这个项目。编写一个简单的控制器等等。这些内容过于简单,这里不作详细介绍。
- Spring Boot 配置
server: port: 12345 spring: application: name: remote_deployment management: endpoints: web: exposure: # 公开所有端点 include: '*'
- 控制器
/** * @since 2023-7-10 */ @Controller @RequestMapping("/remote_deployment") public class RemoteDeploymentController { /** * @since 2023-7-10 */ @GetMapping("/test") @ResponseBody public String remoteDeploymentTest(String para) { System.out.println(para); return para; } }
-
使用 IntelliJ IDEA 打开该项目,IntelliJ IDEA 应该就会自动生成它的一些配置。如下图操作,填入远程服务器的一些配置信息。
-
这里选择 SSH 协议来连接。
【注意】
- SSH 默认的端口号是 22。此端口号指的是与本地 IntelliJ IDEA 远程连接的端口号,不是此 Spring Boot 应用的端口号。
- 下面显示的路径是这个 Spring Boot 项目的所有依赖的上传路径,不是此 Spring Boot 项目的上传路径。
-
上面的配置完成之后,会在配置中显示出来。不过要注意,下面显示的路径是此 Spring Boot 项目的上传路径,而上面配置的路径是这个 Spring Boot 项目的所有依赖的上传路径。
-
不过,配置完成不要先急着运行。很多 Linux 系统上面都有防火墙,默认会阻止所有的远程访问。对于笔者的
RedHat Enterprise Linux 9 x86_64
,默认的防火墙为 firewalld,而不是 iptables。(很多早期的 Linux,使用的防火墙是 iptables,但 RedHat 从 RHEL 7 开始就用 firewalld 取代了 iptables。)-
一个偷懒的方法就是,永久地关闭防火墙。关闭的方法如下:
systemctl stop firewalld
systemctl mask firewalld
firewall-cmd --reload
-
另一个方法是,在防火墙中永久开放上述 Spring Boot 应用的端口号。开放的方法如下:
firewall-cmd --zone=public --add-port=5005/tcp --permanent
firewall-cmd --reload
单独开放完端口 5005 之后,可以输入以下命令查看是否生效:
firewall-cmd --zone=public --query-port= Spring Boot 应用的端口号
/tcp
实际上,也可以输入以下命令查看所有开放的端口:
firewall-cmd --zone=public --list-ports
-
-
现在,就可以尝试运行这个 Spring Boot 项目了。运行时,IntelliJ IDEA 会在上面填写的服务器的部署目录下上传 Spring Boot 的所有依赖 JAR 包。
-
运行之后,需要对接口进行测试。可以选择用 Postman 来测试这个 Spring Boot 应用。
-
可以看出,上面的测试很成功。但是,IntelliJ IDEA 远程部署的能力还不只如此。它还支持直接打断点和以调试的方式运行此应用。
以这个方式运行实际上和前面介绍的远程调试没有区别,但这比远程调试方便太多。
完整源代码
已上传至 GitHub 中,可免费下载:https://github.com/wangpaiblog/remote_deployment