在 IntelliJ IDEA 中远程部署 Java 程序

笔者的运行环境:

  • 客户端:

    • 部署成功过的客户端的 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

远程部署的步骤

  1. 相对于远程调试,远程部署仅仅提供了自动打包、部署、运行的功能。远程连接的原理其实是一样的。这里以 Spring Boot 为例,演示一下如何将 Spring Boot 项目远程部署到服务器。

    首先,读者需要知道如何查看远程服务器的 IP。关于这方面的内容,可见笔者的另一篇博客:

    如何在 Windows 主机上访问本地局域网中的 Linux 主机:
    https://blog.csdn.net/wangpaiblog/article/details/120052152

  2. 为了方便说明,笔者在 Spring 官网网站上下载了一个 Spring Boot 的 Demo 项目。

    官方下载网址:https://start.spring.io/

    在这里插入图片描述

  3. 现在开始简单改造一个这个项目。编写一个简单的控制器等等。这些内容过于简单,这里不作详细介绍。

    • 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;
        }
    }
    
  4. 使用 IntelliJ IDEA 打开该项目,IntelliJ IDEA 应该就会自动生成它的一些配置。如下图操作,填入远程服务器的一些配置信息。

    在这里插入图片描述

  5. 这里选择 SSH 协议来连接。


    【注意】

    • SSH 默认的端口号是 22。此端口号指的是与本地 IntelliJ IDEA 远程连接的端口号,不是此 Spring Boot 应用的端口号。
    • 下面显示的路径是这个 Spring Boot 项目的所有依赖的上传路径,不是此 Spring Boot 项目的上传路径。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  6. 上面的配置完成之后,会在配置中显示出来。不过要注意,下面显示的路径是此 Spring Boot 项目的上传路径,而上面配置的路径是这个 Spring Boot 项目的所有依赖的上传路径。

    在这里插入图片描述

  7. 不过,配置完成不要先急着运行。很多 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

  8. 现在,就可以尝试运行这个 Spring Boot 项目了。运行时,IntelliJ IDEA 会在上面填写的服务器的部署目录下上传 Spring Boot 的所有依赖 JAR 包。

    在这里插入图片描述

    在这里插入图片描述

  9. 运行之后,需要对接口进行测试。可以选择用 Postman 来测试这个 Spring Boot 应用。

    在这里插入图片描述

    在这里插入图片描述

  10. 可以看出,上面的测试很成功。但是,IntelliJ IDEA 远程部署的能力还不只如此。它还支持直接打断点和以调试的方式运行此应用。

    以这个方式运行实际上和前面介绍的远程调试没有区别,但这比远程调试方便太多。

    在这里插入图片描述

完整源代码

  已上传至 GitHub 中,可免费下载:https://github.com/wangpaiblog/remote_deployment

猜你喜欢

转载自blog.csdn.net/wangpaiblog/article/details/132820212