使用IDEA进行远程开发

前言

之前写项目进行调试测试。因为里面使用了websocket协议,而内网穿透又不支持websocket协议,所以需要将项目部署到云服务器中,供小伙伴进行调试测试,测试出了问题又要下线改代码,重复很多次。

循环:

上传jar包->docker部署->看日志改bug->docker下线删镜像删容器

这个方法来自视频:https://www.bilibili.com/video/BV1h94y1k7Jf/?spm_id_from=333.1007.top_right_bar_window_history.content.click

文字版:https://mp.weixin.qq.com/s/zOvx89QBhIPj5Cicbo90sA


具体实现

方式1-远程部署

第一种远程开发方式是 远程部署,就像我们真实做项目时,先在本地用代码编辑器完成开发,再把代码放到 Linux 服务器上去部署一样。远程部署的思路是在本地编写代码,然后把本地的代码文件定期同步到 Linux 服务器,再用本地电脑操作远程服务器完成部署和运行。

如下图:

图片

这种方式更多地是为了提高将代码放到服务器部署的效率,不算是真正意义上的远程开发,但可以达到接近的效果。

远程开发主要分为 6 个阶段:编码、文件同步、运行、编译构建、部署、调试。接下来让我们以一个最简单干净的 Spring Boot 项目为例,实战上述几个操作。

0)编码

假设我们本地已经有了一个示例项目,仅提供一个 checkHealth 接口,用于测试服务能否正常访问,端口为 8080。

核心代码如下:

@RestController("/")
public class MainController {

    @GetMapping("/health")
    public String checkHealth() {
        return "ok";
    }
}
1)文件同步

打开 JetBrains IDEA 开发工具,点击 Tools => Development => Configuration:

图片

进入到如下操作界面,需要先来配置 SSH,和服务器建立连接:

图片

进入 SSH 配置,输入自己实际的服务器 IP!不一定和下图的 IP 地址相同!

图片

点击测试连接,能看到连接成功的弹窗;如果报错,可能是 IP 地址、用户名或密码输错了。

图片

回到部署界面,点击 Mappings 来配置路径映射,就是把本地电脑的文件同步到远程服务器的指定路径:

图片

保存,在 IDEA 右侧就能看到我们虚拟机的所有文件列表啦:

图片

然后点击 Tools => Development => Automatic Upload,开启自动同步:

图片

现在,尝试在自己电脑的代码文件夹中新建一个文件,该文件就会自动同步到 Linux 虚拟机~

但目前如果你删除了自己电脑的文件,Linux 虚拟机的对应文件不会删除,所以我们还要进入 Options 配置:

图片

勾选上文件删除的同步:

图片

至此,你在本地编写的代码都会自动同步到服务器上了。

2)运行项目

可以直接在 IDEA 的终端中快速创建一个能够远程访问远程服务器的终端:

图片

然后使用 cd 命令进入到代码目录:

图片

输入 Maven 命令来运行项目:

mvn clean
mvn spring-boot:run

能够看到项目成功启动:

图片

然后访问远程服务器的接口地址(比如 http://192.168.170.132:8080/health),能够看到如下输出:

图片

表示我们已经能够正常访问到 Linux 服务器上运行的项目了。

还可以在 Deployment 界面中配置 web server url,相当于一个快捷访问方式:

图片

3)构建项目

和上面运行项目的方式相同,在自己的电脑打开终端访问远程虚拟机,然后执行 Maven 打包命令:

mvn package

看到如下输出,表示打包成功:

图片

图片

然后在服务器上就能看到生成的可执行 jar 包:

图片

4)部署项目

现在项目可执行 jar 包已经放到了服务器上,我们只需启动即可。

输入下列命令,以生产环境运行 jar 包:

java -jar /home/yupi/code/target/yuoj-code-sandbox-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

看到如下信息,启动成功:

图片

5)远程调试

现在程序已经在 Linux 虚拟机上启动了,那么我们如何调试远程的程序呢?比如打断点、查看变量信息等。

首先强调一点,远程调试不要乱用,可以在开发时调试,但千万别给线上打断点!影响正常用户的访问。

开启远程调试的方法很简单,首先在 IDEA 右上角找到编辑配置:

图片

然后新建一个远程 JVM Debug 配置:

图片

更改配置,修改自己虚拟机的 IP、希望占用的远程调试端口、JDK 版本等,IDEA 会自动生成一段远程调试参数:

图片

在启动项目时,给启动命令追加上述界面生成的 command line 参数,注意要加到 jar 包路径之前

示例命令如下:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /home/yupi/code/target/yuoj-code-sandbox-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

启动项目后,在右上角开启 Debug:

图片

然后给代码打个断点:

图片

再访问对应的端口,可以看到 Debug 已经生效:

图片

现在,你就可以把 Linux 虚拟机当做自己的电脑进行远程开发啦~

方式2-远程开发

除了上面的方式外,还有一种更简单的远程开发方法。

使用 IDEA 自带的远程开发功能,可以直接将本地的编译、构建、调试、运行等工作全部都放在远程服务器上执行!而本地仅运行客户端软件连接服务器,像之前一样编写代码、进行其他开发操作即可。

这种方式就很像云游戏,自己的电脑不存放代码、不负责程序的运行,只需要运行一个操作界面即可,而 “脏活累活”都交给服务器。适合本地电脑性能差(服务器性能强)、开发环境多人协作开发、需要统一开发环境的场景。

如下图:

图片

这种方式也更简单,进入 IDEA 主页,找到 SSH 选项,点击新建项目:

图片

配置 SSH 连接:

图片

指定远程开发的代码路径:

图片

首次使用时,需要等待下载 JetBrains Client 客户端:

图片

服务器上也会自动安装对应的远程开发后端:

图片

然后进入远程开发:

图片

打开任务管理器,可以看到 JetBrains 的 client 非常 “轻量”:

图片

进入客户端界面,软件会自动加载 Maven 项目,但是需要手动指定服务器上已安装的 JDK:

图片

然后直接以 Debug 模式启动项目:

图片

还可以配置请求转发,像访问本地服务一样访问远程端口:

图片

图片

接下来访问本机地址 http://127.0.0.1:8080/health,就能够访问到项目啦,而且直接支持 Debug!无须做任何多余的配置!

图片


END

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐