远程开发概述
最后修改时间:2023 年 9 月 8 日远程开发允许您在瘦客户端上使用 IDE 界面,同时拥有强大的远程主机来检查和加载您的项目、索引、分析、构建、运行、调试和测试您的代码。
远程主机是托管源代码并运行无头 PyCharm 实例的物理 (Linux) 或虚拟机。瘦客户端(例如笔记本电脑)连接到主机并透明地提供对所有 IDE 功能的完全访问。
架构和定义
为了更好地理解此架构的各个部分,您需要熟悉以下定义:
- JetBrains 客户端
这是启动 JetBrains Gateway 并建立与远程服务器的连接后看到的瘦客户端。它连接到 IDE 后端,使您能够像在本地一样进行远程开发。
与远程桌面解决方案相比,JetBrains Client 具有基于 JetBrains Rider RD 协议的高级编辑器,使打字感觉即时。此外,在 PyCharm 服务器上实现的高级代码智能以一种看起来就像在本地运行的方式呈现。
JetBrains Client 基于 IntelliJ 平台,因此,它导入本地计算机(客户端)上找到的任何本地 IDE 设置。例如,如果客户端上安装了PyCharm 2021.3版本,则下载并刚刚启动的JetBrains客户端将导入其设置,因此将为您提供个性化的远程开发体验。
JetBrains 客户端的版本始终等于后端 IDE 的版本。
- JetBrains 网关
这是远程开发的切入点。它在客户端上运行,并允许您创建新的远程环境或连接到现有的远程环境。在 JetBrains Gateway 中请求环境后,它会启动特定于该环境的 JetBrains 客户端。
JetBrains Gateway 负责以下任务:
允许您设置与您拥有的任何类型的远程后端的远程连接
探索现有的近期远程项目
连接到新的或最近的项目
从指定存储下载适当版本的 JetBrains 客户端
启动 JetBrains 客户端
维持连接。JetBrains Gateway 进程配置并建立与服务器的连接(SSH 或端口转发或任何其他自定义连接),并针对打开的连接或端口启动 JetBrains 客户端。此外,JetBrains Gateway 负责保持连接、处理重新连接(无论是否经过 UI 同意)以及指示有关当前连接的状态信息。
工作流程
远程开发有两种类型的主要工作流程:
服务器到客户端流程:当组织首次设置远程无头服务器时,会获取一个链接(自定义或非自定义),然后您可以在客户端(例如您的笔记本电脑)上使用该链接来连接到可用的服务器。
客户端到服务器流程:当您使用 SSH 或其他连接从客户端UI设置和安装远程服务器时。
连接到手动启动的远程 IDE 上的远程项目(服务器到客户端流程)
如果您已在远程服务器上安装了 PyCharm,则可以手动启动它并连接到在该 IDE 中启动的远程项目。它的工作方式与JetBrains Gateway相同。
如果您的公司有自定义编排或者您的远程 IDE 自动启动,请使用此方法。
该过程可以描述如下:
在远程 IDE 中启动后端项目。
选择后端生成的连接链接之一。
在本地计算机上打开链接。
运行远程 IDE 的主脚本是remote-dev-server.sh
,位于bin
解压的 IDE 的子目录中。
笔记
如果后端安装了 JetBrains Gateway,则默认路径为
/home/your_system_user/.cache/JetBrains/RemoteDev/dist/
。
笔记
有关更多信息和可用参数,请运行
remote-dev-server.sh --help
笔记
请记住,该连接绑定到特定项目。要连接到另一个远程项目,您需要配置新的连接。
连接到远程 IDE
确保您已下载并安装 JetBrains Gateway ,或者本地计算机上有带有JetBrains Gateway插件的 IDE。
确保您已通过 SSH 使用 PyCharm 连接到远程计算机。
在远程服务器的终端中,运行以下命令:
remote-dev-server.sh run /path_to_project/ --ssh-link-host host_server_address --ssh-link-user remote_side_user --ssh-link-port ssh_connection_port
检查以下示例:
如果不传递参数,脚本将使用默认参数:22 端口、系统用户的用户名和命令中的主机
hostname
。~/PY-213.5744.248/bin/remote-dev-server.sh run ~/home/jetbrains/PythonProjects/SampleApp/ --ssh-link-host ec2-13-50-136-85.eu-north-1.compute.amazonaws.com
如果项目成功启动,作为输出,您应该在终端中收到以下 3 个链接:
加入链接: tcp://127.0.0.1:5990...[ ]:包含远程 IDE 现在正在侦听的本地地址和端口。
例子:
tcp://127.0.0.1:5991#jt=71e779a1-070e-4fd3-a4e6-83c1f8cb65a5&p=IU&fp=A42F6041C2878D7A22339ECABF4A9C294F643BG05E91E3DFC06035E03DB71BF8&cb=222.4167.29&jb=17.0.4b469.53
要使用它,请确保远程计算机可以通过此本地地址访问。例如,对于具有转发/开放端口的内部 Docker IDE。
提示
ssh -L
有关详细信息,请参阅命令行中命令的输出。HTTP 链接:https://code-with-me.jetbrains.com/remoteDev...[ ]:包含有关您的主机端口用户、IDE 及其版本的信息。
例子:
https://code-with-me.jetbrains.com/remoteDev#idePath=%2Fhome%2Fubuntu%2F.cache%2FJetBrains%2FRemoteDev%2Fdist%2F3e4cd27bfbb95_ideaIU-2022.2.2&projectPath=%2Fhome%2Fubuntu%2Fdevelopment%2Fspring-petclinic&host=ec2-xx-xx-xxx-xx.eu-north-1.compute.amazonaws.com&port=22&user=ubuntu&type=ssh&deploy=false
在本地浏览器中打开时,它会显示欢迎页面,并尝试使用预填充的连接设置值调用本地网关应用程序。
如果在本地计算机上找不到 JetBrains Gateway 应用程序,您可以从欢迎页面下载它。
网关链接:jetbrains-gateway://connect#idePath... [ ]:还包含有关您的主机端口用户、IDE 及其版本的信息。
例子:
jetbrains-gateway://connect#idePath=%2Fhome%2Fubuntu%2F.cache%2FJetBrains%2FRemoteDev%2Fdist%2F3e4cd27bfbb95_ideaIU-2022.2.2&projectPath=%2Fhome%2Fubuntu%2Fdevelopment%2Fspring-petclinic&host=ec2-xx-xx-xxx-xx.eu-north-1.compute.amazonaws.com&port=22&user=ubuntu&type=ssh&deploy=false
在本地浏览器中打开时,它会直接启动本地 JetBrains Gateway 应用程序,而无需显示欢迎页面。
复制生成的链接并将其粘贴到本地浏览器中,以允许其打开 JetBrains Gateway。
所有这些链接也可以在已经启动的 JetBrains Gateway 中打开。
为此,在 JetBrains Gateway 欢迎屏幕上,将链接粘贴到连接到正在运行的 IDE字段中,然后单击连接。
PyCharm 下载所需版本的 JetBrains Client 并打开其中的远程项目。
注册先前安装的远程 IDE
从版本221.5481开始,您可以在远程服务器上手动注册现有后端 IDE 并使其对 Gateway 可见。
要注册已安装的 IDE 并使其显示在可用版本列表中,请执行以下步骤:
通过 SSH 连接到远程服务器。
找到解压后的IDE文件夹并打开该
bin
目录。使用命令行运行以下命令:
remote-dev-server.sh registerBackendLocationForGateway
例子:
sh WebStorm-221.5591.52/bin/remote-dev-server.sh registerBackendLocationForGateway
您可以在不同的连接场景中使用这些链接,例如通过 SSH 连接、通过自定义连接或通过浏览器连接。
有关启动远程开发会话的更多信息,请参阅连接并使用 JetBrains Gateway。
使用 SSH 连接
选择通过 SSH 连接。
调用 SSH 设置并为已运行的后端配置选项。
JetBrains Gateway 通过 SSH 连接,从现有后端获取连接链接。JetBrains Gateway 将端口从连接链路转发到本地计算机,并准备与该本地到客户端端口的新连接链路。
它还通过此链接下载并启动 JetBrains 客户端。链接中指定了 JetBrains 客户端版本。JetBrains Gateway 在后台运行并在 JetBrains Client 仍处于活动状态时转发端口。
配置自定义连接
选择 JetBrains Gateway 插件提供的一些自定义连接 UI。
自定义插件可以连接到某些云服务,从该服务获取后端列表,创建后端等。
JetBrains Gateway 从自定义插件获取连接链接(在大多数情况下它指向本地主机和端口),并通过此链接下载并启动 JetBrains 客户端。链接中指定了 JetBrains 客户端版本。JetBrains Gateway 可能会留在后台,以维持客户端和服务器之间的连接。
通过浏览器连接
在浏览器中,单击专门创建的描述后端位置的链接。
对于 SSH,它包含用户名、服务器名称、SSH 端口、服务器上的项目位置等。
此链接会指向一个登陆页面,如果客户端上缺少 JetBrains Gateway,则建议打开 JetBrains Gateway 或下载它。JetBrains Gateway 处理从浏览器打开的链接并连接到指定的后端。
客户端到服务器的工作流程
客户端到服务器的工作流程意味着您没有在远程服务器上安装任何 IDE。在这种情况下,您首先需要下载并安装 JetBrains Gateway。有关更多信息,请参阅启动 JetBrains Gateway 并连接到远程服务器。
通过 SSH 连接
下载并安装 JetBrains Gateway。
在JetBrains Gateway向导中,选择通过 SSH 连接以连接到远程服务器。
在向导的下一页上,选择要连接的服务器。如果远程服务器上没有 IDE,JetBrains Gateway 将下载它。
根据用户偏好,IDE 可以从 JetBrains 服务器下载、从客户端计算机上传或从自定义位置下载。
RD 协议特定于 IDE 后端的每个版本。需要在服务器上下载匹配版本的JetBrains Client。
此后,JetBrains Gateway 启动远程计算机上的 PyCharm 服务器,建立 TCP 隧道,并使用适当的参数启动 JetBrains 客户端以进行连接。
TCP连接链接格式如下:
tcp://127.0.0.1:PORT#jt=ONE_TIME_CONNECTION_TOKEN fp=SERVER_FINGERPRINT cb=THIN_CLIENT_BUILD jb=THIN_CLIENT_RUNTIME_VERSION
检查以下示例:
tcp://127.0.0.1:5990#jt=3f2f2471-84f2-4d8b-ac67-c1698f5a1be7 fp=ABC88C383B0A62654C4EF75052C60D4D475885075DCA5B85733BD8D4B9E28CC
0 cb=213.2667 jb=11_0_11b1620.1
可扩展性
IDE 后端
IDE 后端是成熟的 JetBrains IDE,它刚刚以特殊的无头无人值守模式启动。
后端可以通过以下方式使用各种 PyCharm 插件进行扩展:
通过将所需的插件解压到
plugins/
发行版的文件夹中通过运行以下代码(需要网络连接到JetBrains Marketplace):
./bin/remote-dev-server.sh installPlugins <pathtoproject> <PLUGIN_ID1> <PLUGIN_ID2> ...
如果插件提供了一组新的检查和功能,所有这些都将显示在 JetBrains 客户端上。
唯一不会对远程开发产生任何影响的插件是那些会主动修改 UI 的插件。此类插件应安装在 JetBrains 客户端上。
JetBrains 网关 SDK
JetBrains Gateway 可以像任何其他基于 IntelliJ 平台的产品一样进行扩展。
您可以使用以下方式之一:
使用https://github.com/JetBrains/gradle-intellij-plugin/设置一个新项目(
gradle-intellij-plugin
应该 >= 1.1.4)使用以下设置针对 JetBrains Gateway 构建插件:
intellij { version.set("213.2667-CUSTOM-SNAPSHOT") type.set("GW") instrumentCode.set(false) }
您可以在https://www.jetbrains.com/intellij-repository/snapshots上看到可用版本(请参阅 com.jetbrains.gateway 组)
客户端上的 JetBrains Gateway/Thick PyCharm
除了基本的 SSH 和 Code With Me 连接之外,供应商还可以为其自己的编排服务定制 JetBrains Gateway。这可以在 JetBrains 和供应商之间的定制交易中完成。
JetBrains Gateway 基于 IntelliJ 平台,它具有用于与 JetBrains Client 连接和交互的 API。
检查以下示例:
一个大组织想要编写自己的编排。由于安全原因,基本的 SSH 流程还不够。该组织编写一个内部插件并将其交付给开发人员。开发人员可以在笔记本电脑上的 JetBrains Gateway 或 PyCharm 中安装此插件。
这是对 API 的非常简短的介绍(它们还不是最终版本,实际上这不是完整的范围,但它们解释了总体思路)。
JetBrains 客户端
JetBrains Client 的连接部分并未设计为可扩展。但是,您可以开发和安装各种 PyCharm 插件,这些插件会修改 UI、键盘快捷键、主题以及涉及 IDE UI 交互的其他部分,但不会修改其功能。
感谢您的反馈意见!