洋蔥

耳不闻人是非,目不视人之短,口不言人之过。

https://www.jetbrains.com/help/idea/tutorial-deployment-in-product.html

使用Win11的sftp命令

在 Windows 需要传输文件的目录下打开 cmd,然后执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

PS X:\workspaces\local-demo> sftp -P 8989 root@192.168.0.7
root@192.168.0.7's password:
Connected to 192.168.0.7.
sftp> pwd
Remote working directory: /root
sftp> cd /data/test/local-demo
sftp> put doc.txt
Uploading doc.txt to /data/test/local-demo/doc.txt
doc.txt 100% 5 0.0KB/s 00:00
sftp> get test.txt
Fetching /data/test/local-demo/test.txt to test.txt
test.txt 100% 4 0.0KB/s 00:00
sftp>

使用idea的sftp部署

image-20251219184719685

image-20251219184846610

image-20251219185032751

使用idea的WebDAV部署

remote-dev-server

在 JetBrains 的远程开发体系中,remote-dev-server.sh 是运行在远程服务器上的核心脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@localhost:/# ./remote-dev-server help

Usage: ./remote-dev-server [ij_command_name] [/path/to/project] [arguments...]
Examples:
./remote-dev-server installPlugins [arguments...]
./remote-dev-server status
./remote-dev-server dumpLaunchParameters
./remote-dev-server stop
./remote-dev-server run [arguments...]
./remote-dev-server printEnvVar [arguments...]
./remote-dev-server warm-up /path/to/project [arguments...]
./remote-dev-server cwmHostStatus
./remote-dev-server remoteDevStatus
./remote-dev-server serverMode
./remote-dev-server registerBackendLocationForGateway
./remote-dev-server warmup /path/to/project [arguments...]
./remote-dev-server invalidate-caches
./remote-dev-server help
Environment variables:
REMOTE_DEV_SERVER_TRACE set to any value to get more debug output from the startup script
REMOTE_DEV_SERVER_USE_SELF_CONTAINED_LIBS set to '0' to skip using bundled X11 and other Linux libraries from plugins/remote-dev-server/self-contained. Use everything from the system. by default bundled libraries are used
REMOTE_DEV_TRUST_PROJECTS set to any value to skip project trust warning (will execute build scripts automatically)
REMOTE_DEV_NEW_UI_ENABLED set to '1' to start with forced enabled new UI
REMOTE_DEV_NON_INTERACTIVE set to any value to skip all interactive shell prompts (set automatically if running without TTY)

常用子命令说明(官方)

命令 功能说明
status 查看 remote-dev-server 当前状态
remoteDevStatus 检查是否有远程开发实例正在运行
run 启动远程开发实例(最常用)
stop 停止当前远程开发会话
warm-up /path/to/project 预热索引(构建缓存)
invalidate-caches 清理缓存
serverMode 启动后台模式(长期监听 Gateway 连接)
registerBackendLocationForGateway 为 Gateway 注册本地 IDE 位置
installPlugins 安装插件(离线部署常用)

注册 IDE 后端

registerBackendLocationForGateway 命令用于将远端主机上已经解压/安装的 IDE 后端路径注册到 JetBrains Gateway 的“可用后端/构建”列表,使 Gateway 能发现并显示该已安装的后端 IDE(而不是让 Gateway 从网络下载它)。

1
2
3
4
5
./remote-dev-server.sh registerBackendLocationForGateway
# 手动注册路径:会在此目录下创建符号链接(指向实际的IDE安装位置),以便 Gateway 识别这些用户提供的IDE后端。
ll ~/.cache/JetBrains/RemoteDev/userProvidedDist/
# 自动下载路径:默认情况下,此目录存放 Gateway 自动下载的IDE后端。
ll ~/.cache/JetBrains/RemoteDev/dist

启动 IDE 后端(不常用)

角色:服务器端的启动脚本 / 后端服务(而非本地客户端)。

功能:启动并托管 IDE 后端(文件访问、索引、语言服务、运行/调试后端等)。

连接方式:由 JetBrains Gateway 或受支持的客户端发起连接到该后端。

目的:让本地 IDE 能够远程编辑、运行和调试项目,保持一致的开发体验。

(补充说明:它是服务器端的会话/代理组件,不是本地 IDE 本身。)

1
2
3
4
5
6
mkdir -p /logs/remote-dev-server
tail -f /logs/remote-dev-server/fresh.log

cd /data/local/JetBrains/idea-IU-252.23892.409/bin
# 启动后,会输出三个链接。
nohup ./remote-dev-server.sh run /data/local/workspaces/mars-test/ >/logs/remote-dev-server/fresh.log 2>&1 &

从 IntelliJ IDEA 连接到远程服务器

https://www.jetbrains.com/zh-cn/help/idea/remote-development-starting-page.html

远程开发常见问题解答

https://www.jetbrains.com/help/idea/faq-about-remote-development.html

IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。

概述

原理:本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。 被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。 调试程序的本地虚拟机:IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。

设置

IDEA 中指定 Debug 服务器

  • 点击主窗口菜单 Run -> Edit Configurations...,打开 Run/Debug Configurations 窗口;
  • 点击工具栏上的 + 按钮,下拉菜单中选择 Remote
  • 设置 Host 为远程服务器的域名或IP,保持 Port=5005 无需调整;
  • 选择 JDK 版本并复制命令行参数 Command line arguments for remote JVM, 形如 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,具体参数内容由 JDK 版本决定。

远程服务中开启 Debug 服务

对于 SpringBoot: 命令行添加选项,并重启:

1
2
# 注意新参数必须在 -jar 之前
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar test.jar

对于 Tomcat: 启动脚本中添加选项,并重启:

1
2
# sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

远程服务器防火墙端口放行

1
2
3
# sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
# 重启生效: sudo systemctl restart iptables

开始调试

  • 要求:双方代码一致,否则远程调试无法启动;
  • 本地启动刚刚配置的 Remote Server,正常时会看到日志: Connected to the target VM, address: 'localhost:5005', transport: 'socket'
  • 本地 IDEA 代码中设置断点
  • 浏览器或手机 HTTP 访问服务器
  • IDEA 即可在断点暂停并跟踪

关闭调试

服务器上多开放个端口是不安全的,调试完毕后可恢复防火墙设置。 而 Java 服务器开启 Debug 服务器的功能可以保留,以便之后再次调试。

IDEA 远程调试的细节

1、细节1:停在本地断点,关闭程序后会继续执行吗 如果远程调试在自己的断点处停下来了,此时关闭IDEA中的项目停止运行,则还会继续运行执行完剩下的逻辑吗? 会的,这点比较不容易记住

以下面的代码为例,在第一行停住了。然后IDEA中停掉,发现停掉之后控制台还是打印了剩下的日志。 2、细节2:jar包代码和本地不一致会怎么样? IDEA 里的代码如果不和jar包的一致,会怎么样。

结论:要保证和远程启动的代码一致。

否则你debug的时候的行数会对不上。报错抛异常倒是不会。像这种还是能对得上行数的

比如你调试test1方法,test2方法在test1下面,在test2里加代码,这样并不影响test1中的行号,这种是可以在调试的时候准确反应行号的 3、细节3:日志打印在哪里? 日志不会打印在IDEA的控制台上。即System.out 以及 log.info 还是打印在远程的。

1
2
3
4
5
6
7
8
@GetMapping("/test1")
public String test1() {
System.out.println("第一行");
System.out.println("第二行");
log.info("log 第一行");
log.info("log 第二行");
return "ok";
}

4、细节4:调试时其他人会不会卡住? 远程调试的时候,打了断点,停住后会不会导致页面的请求卡住。 比如你使用远程调试,别的QA在测试这个页面,结果他们看到的结果是怎么样的? 会卡住吗?会的,已经实际遇到过这种情况了。

5、细节5:本地代码修复bug远程调用的时候 如果在远程调试过程自己发现了bug,本地改好后重新启动IDEA里的项目,再到页面调用一次,能修复吗? 不能,运行的还是远程部署的jar中的代码

这个直接击碎了远程页面点一点触发本地代码进行debug的梦想。如果可以的话那调试代码就方便太多。

6、细节6:当开发者计算机无权访问数据库时,可使用远程调试查看数据处理过程

推荐链接:

超文本传输协议 (HTTP) - 维基百科

超文本传输安全协议 (HTTPS) - 维基百科

HTTP状态码 - 维基百科

HTTP持久连接 - 维基百科

HTTP | MDN

HTTP 基础 - HTTP | MDN

数据 URI (Data URLs) - HTTP | MDN

HTTP 教程 | 菜鸟教程

HTTP状态码 | 菜鸟教程

HTTP 方法:GET 对比 POST | 菜鸟教程

Http GET请求缓存问题

漫画:什么是 HTTPS 协议?

四种常见的 POST 提交数据方式

postman中 form-data、x-www-form-urlencoded、raw、binary的区别

目标URL存在跨站漏洞和目标URL存在http host头攻击漏洞处理方案

阅读全文 »

考勤接口说明

获取 AccessToken

接口描述

  • 获取 AccessToken。正常情况下AccessToken有效期为604800秒,出于系统维护需要,可能提前使AccessToken失效开发者应实现AccessToken失效时重试获取的逻辑。
阅读全文 »
0%