在 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/

    在 IntelliJ IDEA 中远程部署 Java 程序_第1张图片

  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 应该就会自动生成它的一些配置。如下图操作,填入远程服务器的一些配置信息。

    在 IntelliJ IDEA 中远程部署 Java 程序_第2张图片

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


    【注意】

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

    在 IntelliJ IDEA 中远程部署 Java 程序_第3张图片

    在 IntelliJ IDEA 中远程部署 Java 程序_第4张图片

    在 IntelliJ IDEA 中远程部署 Java 程序_第5张图片

    在 IntelliJ IDEA 中远程部署 Java 程序_第6张图片

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

    在 IntelliJ IDEA 中远程部署 Java 程序_第7张图片

  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 包。

    在 IntelliJ IDEA 中远程部署 Java 程序_第8张图片

    在 IntelliJ IDEA 中远程部署 Java 程序_第9张图片

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

    在 IntelliJ IDEA 中远程部署 Java 程序_第10张图片

    在 IntelliJ IDEA 中远程部署 Java 程序_第11张图片

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

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

    在 IntelliJ IDEA 中远程部署 Java 程序_第12张图片

完整源代码

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

你可能感兴趣的:(教程/入门使用,Java,IDE,java,intellij-idea,远程部署,远程调试)