远程开发概述
远程开发允许您使用远程服务器作为开发环境。SSH 连接允许您快速连接到远程服务器并充分利用 PhpStorm 功能。
架构和定义

为了更好地理解这个架构的点点滴滴,您需要熟悉以下定义:
- 服务器
- 这是托管源代码并运行无头 PhpStorm 的物理机或虚拟机。它执行大多数 IDE 功能。 - 要求:Linux(macOS 和 Windows 稍后推出) 
- 客户
- 这是您用来连接服务器并提供瘦客户端工作的物理机。例如,这可能是您的笔记本电脑。但是,对客户的规格没有限制。 - 要求:macOS、Linux、Windows 
- IDE 后端
- 这是在服务器上运行的兼容 JetBrains IDE。它作为服务器进程运行,因此没有可见的用户界面——它是无头的。这与您当前为 JetBrains IDE 运行的可执行文件相同。 
- JetBrains 客户端
- 这是您在启动 JetBrains Gateway 并与远程服务器建立连接后看到的瘦客户端。它连接到 IDE 后端,让您能够像在本地一样进行远程开发。 - 与远程桌面解决方案相比,JetBrains Client 有一个基于 JetBrains Rider RD 协议的高级编辑器,让打字感觉即时。此外,在 PhpStorm 服务器上实现的高级代码智能以一种看起来好像在本地运行的方式呈现。 - JetBrains Client 基于 IntelliJ 平台,因此它会导入在本地机器(客户端)上找到的任何本地 IDE 设置。例如,如果客户端安装了 PhpStorm 2021.3 版本,下载并启动的 JetBrains Client 将导入其设置,从而为您提供个性化的远程开发体验。 
- JetBrains 网关
- 这是远程开发的入口点。它在客户端上运行,并允许您创建新的远程环境或连接到现有的环境。在 JetBrains Gateway 中请求环境后,它会启动特定于该环境的 JetBrains Client。 - JetBrains Gateway 负责以下任务: - 允许您设置与您拥有的任何类型的远程后端的远程连接 
- 探索现有的近期远程项目 
- 连接到新的或最近的项目 
- 从指定的存储下载适当版本的 JetBrains Client 
- 启动 JetBrains 客户端 
- 保持连接。JetBrains Gateway 进程配置并建立与服务器的连接(SSH 或端口转发或任何其他自定义连接),并针对打开的连接或端口启动 JetBrains Client。此外,JetBrains Gateway 负责保持连接、处理重新连接(无论是否经过 UI 同意),并指示有关当前连接的状态信息。 
 
工作流程
远程开发中有两种主要的工作流程:
- 服务器到客户端流程:当组织首次设置远程无头服务器时,获取一个链接(自定义或非自定义),然后您可以在客户端(例如,您的笔记本电脑)上使用该链接连接到可用服务器。 
- 客户端到服务器流程:当您使用 SSH 或其他连接从客户端UI设置和安装远程服务器时。 
服务器到客户端工作流程
您需要使用以下命令在服务器上运行 IDE 后端:
您可以为浏览器流指定其他 ssh 链接连接选项:
- --ssh-link-user
- --ssh-link-port
检查以下示例:
- remote-dev-server.sh run <path/to/project> --ssh-link-host remote.server.com
- --ssh-link-user adam --ssh-link-port 42
在输出中,您应该收到以下连接链接:
您可以在不同的连接场景中使用此链接,例如通过 SSH 连接、通过自定义连接或通过浏览器连接。
有关如何启动远程开发会话的详细信息,请参阅远程开发入门。
使用 SSH 连接
- 启动JetBrains 网关。 
- 选择通过 SSH 连接。 
- 调用 SSH 设置并为已运行的后端配置选项。 - JetBrains Gateway 通过 SSH 连接,从现有后端获取连接链接。JetBrains Gateway 将连接链路中的端口转发到本地计算机,并准备与该本地到客户端端口的新连接链路。 - 它还通过此链接下载并启动 JetBrains Client。JetBrains 客户端版本在链接中指定。JetBrains Gateway 在后台运行并在 JetBrains Client 仍处于活动状态时转发端口。 
配置自定义连接
- 启动JetBrains 网关。 
- 选择 JetBrains Gateway 插件提供的一些自定义连接 UI。 - 自定义插件可以连接到某个云服务、从该服务获取后端列表、创建后端等等。 - JetBrains Gateway 从自定义插件获取连接链接(在大多数情况下它指向本地主机和端口),并通过此链接下载并启动 JetBrains Client。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 在远程计算机上启动 PhpStorm 服务器,建立 TCP 隧道,并使用适当的参数启动 JetBrains Client 以使其连接。
TCP连接链路格式如下:
检查以下示例:
可扩展性
IDE 后端
IDE 后端是成熟的 JetBrains IDE,它刚刚以特殊的无头无人值守模式启动。
可以通过以下方式使用各种 PhpStorm 插件扩展后端:
- 通过将所需的插件解压缩到 - plugins/发行版的文件夹中
- 通过运行以下代码(需要网络连接到JetBrains Plugin Marketplace): ./bin/remote-dev-server.sh installPlugins <pathtoproject> <PLUGIN_ID1> <PLUGIN_ID2> ...
如果插件提供了一组新的检查和功能,所有这些都将显示在 JetBrains Client 上。
唯一不会对远程开发产生任何影响的插件是那些积极修改 UI 的插件。此类插件应安装在 JetBrains 客户端。
客户端上的 JetBrains 网关/厚 PhpStorm
除了基本的 SSH 和 Code With Me 连接外,供应商还可以为自己的编排服务自定义 JetBrains Gateway。这可以在 JetBrains 和供应商之间的定制交易中完成。
JetBrains Gateway 基于 IntelliJ 平台,它具有用于与 JetBrains Client 连接和交互的 API。
检查以下示例:
一个大组织想要编写自己的编排。由于安全原因,基本的 SSH 流程是不够的。该组织编写了一个内部插件并将其交付给其开发人员。开发人员可以在笔记本电脑上的 JetBrains Gateway 或 PhpStorm 中安装此插件。
这是对 API 的非常简短的介绍(它们还不是最终版本,实际上这不是完整的范围,但它们解释了整体思想)。
JetBrains 客户端
JetBrains Client 的连接部分并非可扩展。但是,您可以开发和安装各种 PhpStorm 插件,这些插件可以修改 UI、键盘快捷键、主题和其他涉及 IDE UI 交互的部分,但不能修改其功能。