前言

我有一个jar包,我通过FinalShell软件,将jar包部署到阿里云服务器中(linux),假如想在本地用idea远程调试jar包应该怎么做?

(我本地用于连接阿里云服务器用的软件是FinalShell)

1、更改pom.xml

在pom.xml中,添加如下代码:

<jvmArguments>-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n</jvmArguments>

记住5005这个端口,后面要用(这个端口可以改成其它,只要不是已经占用了的就行)

在这里插入图片描述

2、配置RemotDebug

idea中,点击Edit Configurations---->点击新增---->选择Remote

在这里插入图片描述

点ok保存。

3、开放端口

在阿里云控制台首页,点云服务ECS,去配置安全组规则

在这里插入图片描述

在规则中开放5005端口(也就是项目里pom.xml中配置的端口)

在这里插入图片描述

如果这么配置了,还是访问不了5005端口,可以在linux中执行下面几个命令:

sudo iptables -L -n | grep 5005
sudo iptables -I INPUT -p tcp --dport 5005 -j ACCEPT
sudo iptables-save

不管是5005端口也好,还是nginx代理的端口也好,如果在阿里云配置了安全组还是访问不了,就试试上面三个命令。

一开始我按照百度找的阿里云部署项目教程一步步去做,把项目部署上去用nginx代理,阿里云也配置开放了端口,但就是没用访问不了,死活找不出问题在哪。教程都只提到了配置安全组规则,没提到这几个命令,排查了我一天,后面执行这三个命令就可以了,我也不知道是为啥。

4、项目部署和启动

上面改配置的都配置好了,那我们就可以打包部署了。

打包完上传到服务器中,使用nginx代理,要注意nginx配置,server里的listen端口如果是80,这个是nginx默认端口,不需要执行我说上面说到的三个命令应该也是可以的。如果是其它端口,比如8080,就需要。

参考如下配置:

server
{
    listen 8080;
    server_name localhost;

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
	# web端
    location /{
	    root /home/admin-web/;
	    index  index.html;
	    try_files $uri $uri/ /index.html;
	}
	
	# h5端
	location /h5/ {
		alias /home/admin-app/;
		index index.html
		try_files $uri $uri/ /index.html;
    }

    # 后端管理系统
    location /admin-api {
      proxy_pass http://localhost:7070/admin-api;
      proxy_redirect off;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      client_max_body_size 10m;                             # 允许客户端请求的最大单文件字节数
      client_body_buffer_size 128k;                         # 缓冲区代理缓冲用户端请求的最大字节数,
      proxy_connect_timeout 90;                             # nginx跟后端服务器连接超时时间(代理连接超时)
      proxy_send_timeout 90;                                # 后端服务器数据回传时间(代理发送超时)
      proxy_read_timeout 90;                                # 连接成功后,后端服务器响应时间(代理接收超时)
      proxy_buffer_size 4k;                                 # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
      proxy_buffers 4 32k;                                  # proxy_buffers缓冲区,网页平均在32k以下的设置
      proxy_busy_buffers_size 64k;                          # 高负荷下缓冲大小(proxy_buffers*2)
      proxy_temp_file_write_size 64k; 
    }


    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }
    access_log  /www/wwwlogs/localhost.log;
    error_log  /www/wwwlogs/localhost.error.log;
}

注意nginx的listen端口8080,和前面我们pom.xml配置的5005端口是不同的,8080是我们访问页面或者调接口用的端口,5005是我们远程监听的端口。

部署好后,我们就可以启动jar包了,使用如下命令启动:

java -agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n -jar /home/admin-server/admin-server.jar
或者是:
nohup java -agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n -jar /home/admin-server/admin-server.jar > /home/admin-server/logs/admin-server.out 2>&1 &

/home/admin-server/admin-server.jar 这个是jar包路径

/home/admin-server/logs/admin-server.out 这个是日志输出路径

这两个命令的区别在于:第一个命令如果远程服务器连接断开,则jar运行也会关掉;第二个命令则可以让jar一直在后台运行,即使远程连接断开也不影响。第一个就和我们平时启动jar是一样的,控制台会输出日志;第二个启动之后输出一个进程就没有了,日志需要去 admin-server.out 文件中查看。

5、本地测试是否能连接远程5005

服务器部署和启动项目后,我们可以测试下本地是否能连接到5005端口,打开cmd,执行如下命令:

telnet 远程ip 5005

测试能不能连接其它端口也是一样的,比如测试8080端口:telnet 远程ip 8080

如果执行后,提示“telnet 既不是内部命令也不是外部命令”,则按照以下步骤安装telnet:

在这里插入图片描述

6、idea开始调试

最后,打开idea,debug启动我们第二步配置的RemotDebug,如果控制台出现这句话,就表示连接成功,那么我们就可以愉快地进行调试啦!

在这里插入图片描述

在需要的地方打上断点,然后去浏览器访问前端页面也好、在postman直接调用接口也好。

最后

用idea进行远程调试,需要保证要调试的代码和服务器上的jar包一致。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐