CLion教程-概述:使用瘦客户端进行远程开发
远程开发允许您在瘦客户端上使用IDE界面,同时具有强大的远程主机来检查和加载项目、索引、分析、构建、运行、调试和测试代码。
远程主机是托管源代码并运行无头CLion实例的物理(Linux)或虚拟机。瘦客户端,例如笔记本电脑,连接到主机并透明地提供对所有IDE功能的完全访问权限。
架构和定义
为了更好地理解这个架构的各个部分,您需要熟悉以下定义:
工作流程
远程开发与瘦客户端有两种主要的工作流程:
- 服务器到客户端流程:当组织首次设置一个远程无头服务器,获得一个链接(定制或非定制),然后您可以在客户端(例如,您的笔记本电脑)上使用该链接连接到可用服务器。
- 客户端到服务器流程:当您从客户端UI使用SSH或其他连接设置来设置和安装远程服务器时。
手动连接到手动启动的远程IDE中的远程项目(服务器到客户端流程)
如果您已经在远程服务器上安装了CLion,您可以手动启动它并连接到在该IDE中启动的远程项目。这与从JetBrains Gateway中的方式相同。
如果您的公司有自定义的编排,或者您的远程IDE在其端口上自动启动,可以使用此方法。
该过程可以描述如下:
- 在远程IDE中启动一个后端项目。
- 选择后端生成的连接链接之一。
- 在本地机器上打开该链接。
运行远程IDE的主要脚本是remote-dev-server.sh
,位于解压后的IDE的bin
子目录中。
如果是由JetBrains Gateway先前安装的后端,路径默认为
/home/your_system_user/.cache/JetBrains/RemoteDev/dist/
。有关更多信息和可用参数,请运行
remote-dev-server.sh --help
。请注意,连接绑定到特定项目。要连接到另一个远程项目,您需要配置新的连接。
连接到远程IDE
- 确保您已经在本地机器上下载并安装了JetBrains Gateway或带有此捆绑插件的IDE。
- 确保您可以通过SSH连接到远程机器并在其上运行CLion IDE。
在远程服务器的终端中,运行以下命令:
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
检查以下示例:
~/ideaIU-213.3469/bin/remote-dev-server.sh run ~/spring-boot-example/ --ssh-link-host ec2-11-50-136-85.eu-north-1.compute.amazonaws.com --ssh-link-user ubuntu
- 如果不传递参数,脚本将使用默认值:端口22,系统用户的用户名和
hostname
命令的主机。
如果项目成功启动,您应该在终端中收到以下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
- 在本地浏览器中打开时,它会显示欢迎页面,并尝试使用预填充的连接设置值调用本地的Gateway应用程序。
- 如果在本地机器上找不到JetBrains Gateway应用程序,您将能够从欢迎页面上下载它。
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应用程序,而不需要欢迎页面。
- 复制生成的链接并粘贴到本地浏览器中,允许其启动Open JetBrains Gateway。
- 所有这些链接也可以在已启动的JetBrains Gateway中打开。
为此,在JetBrains Gateway的欢迎屏幕上,将链接粘贴到“连接到运行中的IDE”字段中,然后单击连接。
CLion将下载所需版本的JetBrains Client,并在其中打开远程项目。
注册先前安装的远程IDE
自版本221.5481以来,您可以手动注册远程服务器上的现有后端IDE,并使其对Gateway可见。
要注册已安装的IDE并使其出现在可用构建列表中,请按照以下步骤操作:
- 通过SSH输入远程服务器。
- 找到解压后的IDE的
bin
文件夹,进入bin
文件夹。 在命令行中执行以下命令:
remote-dev-server.sh registerBackendLocationForGateway
例如,
sh WebStorm-221.5591.52/bin/remote-dev-server.sh registerBackendLocationForGateway
您可以在不同的连接场景中使用这些链接,例如通过SSH连接、通过自定义连接或通过浏览器连接。
使用SSH连接
- 启动JetBrains Gateway。
- 选择通过SSH连接。
- 调用SSH设置,并配置已运行的后端的选项。
JetBrains Gateway通过SSH连接,从现有后端获取连接链接。JetBrains Gateway将连接链接的端口转发到本地机器,并准备一个包含本地到客户端端口的新连接链接。
它还下载并启动带有此链接的JetBrains Client。JetBrains Client的版本在链接中指定。JetBrains Gateway在后台运行并转发端口,而JetBrains Client仍然处于活动状态。
配置自定义连接
- 启动JetBrains Gateway。
- 选择JetBrains Gateway插件提供的自定义连接UI。
自定义插件可以连接到某个云服务,从该服务中获取后端列表,创建后端等等。
JetBrains Gateway从自定义插件获取连接链接(在大多数情况下,它指向本地主机和端口),并使用此链接下载并启动JetBrains Client。JetBrains Client的版本在链接中指定。JetBrains Gateway可能会保持在后台,以维护客户端和服务器之间的连接。
通过浏览器连接
- 在浏览器中,单击特定创建的描述后端位置的链接。
在SSH的情况下,它包含用户名、服务器名、SSH端口、服务器上的项目位置等信息。
该链接导向到一个着陆页面,建议打开JetBrains Gateway,或者如果JetBrains Gateway在客户端上缺失,则建议下载它。JetBrains Gateway处理从浏览器打开的链接,并连接到指定的后端。
客户端到服务器工作流
客户端到服务器工作流意味着您的远程服务器上没有安装任何IDE。在这种情况下,您首先需要下载并安装JetBrains Gateway。
通过SSH连接
- 下载并安装JetBrains Gateway。
- 在JetBrains Gateway向导中,选择通过SSH连接到远程服务器。
- 在向导的下一页中,选择要连接的服务器。如果远程服务器上没有IDE,JetBrains Gateway将会下载它。
根据用户的首选项,IDE可以从JetBrains服务器下载、从客户端机器上传,或从自定义位置下载。
RD协议对于IDE后端的每个版本都是特定的。需要在服务器上下载匹配版本的JetBrains Client。
之后,JetBrains Gateway会在远程机器上启动CLion服务器,建立TCP隧道,并使用适当的参数启动JetBrains Client以进行连接。
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,只是以特殊的无头无人值守模式启动。
后端可以通过以下方式使用各种CLion插件进行扩展:
- 将所需的插件解压缩到分发的
plugins/
文件夹中 运行以下代码(需要连接到JetBrains Marketplace的网络):
./bin/remote-dev-server.sh installPlugins <pathtoproject> <PLUGIN_ID1> <PLUGIN_ID2> ...
如果插件提供了新的检查和功能集,所有这些都将显示在JetBrains Client上。
唯一不会影响远程瘦客户端的插件是那些强烈修改UI的插件。这些插件应该安装在JetBrains Client侧。
JetBrains Gateway SDK
JetBrains Gateway可以像其他基于IntelliJ平台的产品一样进行扩展。
您可以使用以下方法之一:
- 使用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中查看可用的版本
JetBrains Gateway / 客户端上的Thick CLion
除了基本的SSH和Code With Me连接外,供应商可以根据其自己的编排服务定制JetBrains Gateway。这可以在JetBrains和供应商之间的自定义交易内完成。
JetBrains Gateway基于IntelliJ平台,具有与JetBrains Client的连接和交互的API。
查看以下示例:
一个大型组织希望编写自己的编排。基本的SSH流程出于安全原因不够。该组织编写了一个内部插件并提供给其开发人员。开发人员可以在JetBrains Gateway或其笔记本电脑上的CLion中安装此插件。
这只是API的一个非常简要的介绍(它们尚未最终确定,确实不是全部范围,但它们解释了整体思想)。
JetBrains Client
JetBrains Client不是为连接部分设计的可扩展部分。但是,您可以开发和安装各种修改UI、键盘快捷键、主题和触及IDE UI交互但不触及其功能的CLion插件。
已知限制
目前,您不能从CLion启动远程开发会话,但可以通过JetBrains Gateway执行此操作。
目前,此工作流中的远程主机仍然仅支持Linux。请确保您的Linux机器上有兼容的SSH服务器。Linux机器应该具有任何较新的Linux发行版,例如Ubuntu 16.04+或RHEL/Centos 7+。
需要注意以下几个与CLion相关的限制:
- 仅支持CMake项目;Makefile项目在远程模式下不支持。对于Makefile项目,建议使用JetBrains Gateway连接.
- 此功能目前不支持Windows客户端。
- 如果需要调试,需要在远程服务器上安装GDB。
- 对于JVM和Python项目,CLion将使用本地配置文件(在您的CLion上设置)作为模板。如果没有在服务器上创建配置文件,则将使用默认配置文件。注意,一些设置(例如,PATH环境变量)可能会因服务器不同而不同。
- 此功能在瘦客户端和服务器之间进行交互的性能不如在本地运行。由于可能涉及网络延迟,建议将本地计算迁移到服务器上。
- 调试节点不支持线程查看。
- JetBrains Gateway不支持使用JetBrains OAuth(基于IntelliJ的IDE和JetBrains Rider)进行SSO。
- 无法调试其连接不受信任的服务器的生产中的Web应用程序,因为调试器使用反向SSH隧道连接到该服务器。
- 远程服务器上的调试可能会导致性能下降。如果性能不足,可以尝试使用开发者工具包。
- 远程开发会话内不能访问本地硬件。
- JetBrains Gateway不支持本机Windows操作系统。
- 当许多项目使用相同的远程机器时,可能会在连接时导致各种问题。避免在生产上使用这种配置。
支持和反馈
如果您遇到任何问题或需要进一步的帮助,请参阅CLion支持和反馈页面,以获取支持选项。如果您在使用JetBrains Gateway时遇到问题,请向JetBrains支持报告问题。
如果您对CLion的远程开发功能有反馈或建议,也可以通过CLion的用户界面提供反馈。
远程开发服务的维护
为了使远程开发顺利工作,您需要维护远程服务器上的服务和工具。以下是一些关键任务:
- 定期更新JetBrains Gateway、JetBrains Client和远程服务器上的CLion IDE。
- 监视服务器上的资源使用情况。如果服务器的资源不足,您可能需要升级它或添加更多资源。
- 定期备份远程服务器上的项目和数据,以防止数据丢失。
- 确保服务器上的防火墙和安全设置是最新的,并遵循最佳安全实践。
- 处理远程服务器上的错误和问题,以确保远程开发服务的可用性。
结论
远程开发是一种强大的工具,可以让您在瘦客户端上使用CLion IDE,同时在远程服务器上执行项目。这使得开发变得更加灵活,可以在不同的环境中工作,同时仍然享受到CLion提供的强大功能。