GoLand 也可以遠(yuǎn)程開發(fā)了:試用報告
閱讀本文大概需要 6 分鐘。
大家好,我是站長 polarisxu。
JetBrains 官方發(fā)了一篇文章:《使用 Projector 遠(yuǎn)程訪問 IDE》,了解到 JetBrains 搞了一個遠(yuǎn)程開發(fā) IDE。很多人知道 VSCode 可以進(jìn)行遠(yuǎn)程開發(fā),現(xiàn)在 JetBrains 系列 IDE 也支持了(自然 GoLand 也支持),于是安裝試用了下,給大家做一個匯報。
01 Projector 是什么
Projector 是一種遠(yuǎn)程運(yùn)行和訪問 Swing GUI 應(yīng)用程序的技術(shù)(Swing 是 Java 的 GUI API,JetBrains 系列 IDE 都是使用 Swing 繪制的 UI),目前 1.0 版本可用,不過還是預(yù)覽版(初始版本)。

也就是說,Projector 可以通過網(wǎng)絡(luò)遠(yuǎn)程運(yùn)行 JetBrains IDE 和 Swing 應(yīng)用。
Projector 還是一種自托管技術(shù),可在服務(wù)器上運(yùn)行基于 IntelliJ 的 IDE 和基于 Swing 的應(yīng)用,讓您可以使用瀏覽器和本機(jī)應(yīng)用從任何位置進(jìn)行訪問。
為什么要開發(fā) Projector 呢?官方解釋,在有些特殊情況下,比如瘦客戶端,需要采用特殊的方法。具體來說有如下應(yīng)用場景:
-
高度安全的企業(yè)環(huán)境。 -
真正的大型項目。 -
禁止源代碼本地復(fù)制。 -
用戶硬件約束。 -
瘦客戶端。 -
需要在 Windows 機(jī)器甚至是 ChromeOS 等非傳統(tǒng)操作系統(tǒng)上的 GNU/Linux 環(huán)境中運(yùn)行 IDE。 -
需要在關(guān)閉計算機(jī)后讓應(yīng)用在服務(wù)器上繼續(xù)運(yùn)行。 -
遠(yuǎn)程調(diào)試服務(wù)器端(devtest、devprod)。 -
具有調(diào)試源和預(yù)配置 IDE 的 VM 或 Docker 映像。 -
需要遠(yuǎn)程訪問的配置。
可見,有些時候如果能遠(yuǎn)程開發(fā),確實還挺方便的。
注意,Projector 目前不支持協(xié)作開發(fā)。
特別值得一提的是,Projector 是開源的,它采用 C-S 架構(gòu)(其實也支持 B-S 架構(gòu)),IDE 運(yùn)行在服務(wù)器,客戶端通過網(wǎng)絡(luò)鏈接到服務(wù)器上的 IDE,有點(diǎn)遠(yuǎn)程桌面的感覺。
因此,Projector 至少包含兩部分:
-
服務(wù)端,即 projector-server,地址:https://github.com/JetBrains/projector-server -
客戶端,即 projector-client,地址:https://github.com/JetBrains/projector-client
現(xiàn)在是容器時代,為了方便,官方提供了 Server 的 Docker 版本,地址:https://github.com/JetBrains/projector-docker,我試用就基于 Docker 進(jìn)行的。
02 安裝
關(guān)于服務(wù)器端安裝有多種方式,但這里我只介紹我采用的基于 Docker 的方式。畢竟 Docker 是在云環(huán)境中運(yùn)行 Projector 的最簡單的方法。
官方構(gòu)建好了可以直接使用的鏡像,不過沒有發(fā)布到 DockerHub,而是使用自定義 Docker Registry。因為我使用 GoLand,所以執(zhí)行如下命令:(記得先安裝好 Docker)
$ docker pull registry.jetbrains.team/p/prj/containers/projector-goland
其他 IDE 怎么安裝,官方在 GitHub 上有列出:
docker pull registry.jetbrains.team/p/prj/containers/projector-clion
docker pull registry.jetbrains.team/p/prj/containers/projector-datagrip
docker pull registry.jetbrains.team/p/prj/containers/projector-goland
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-u
docker pull registry.jetbrains.team/p/prj/containers/projector-phpstorm
docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-c
docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-p
docker pull registry.jetbrains.team/p/prj/containers/projector-webstorm
安裝完成后,可以通過下面命令運(yùn)行 Server:
docker run --rm -p 8887:8887 -it registry.jetbrains.team/p/prj/containers/projector-goland
打開瀏覽器,訪問 http://localhost:8887/ 即可試用了。這是將 Server 安裝在了本地,如果將 Server 安裝在性能更好的服務(wù)器上,該怎么訪問呢?
簡單的,可以通過 Nginx 做反向代理,配置好域名。我進(jìn)行了相關(guān)嘗試,將 Server 安裝在 Linux 服務(wù)器,本地使用 Mac。Nginx 的配置如下:
server {
listen 80;
server_name goland.studygolang.com;
location / {
proxy_pass http://127.0.0.1:8887;#必須
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;#必須
proxy_set_header Upgrade $http_upgrade;#必須
proxy_set_header Connection "upgrade";#必須
proxy_send_timeout 30s;#send 超時時間 記得一定要按需配置這個 否則默認(rèn)60s就斷開了
proxy_read_timeout 30s;#read 超時時間
}
}
-
server_name 可以隨便配置一個,但不進(jìn)行實際的解析,而是在本地配置 host; -
因為和服務(wù)器通訊使用的是 WebSocket,因此需要做 WebSocket 的代理;
關(guān)于安全問題,可以在 https://github.com/JetBrains/projector-docker#faq 查看,因為我只是試用,所以沒有考慮安全問題。
這樣在本地通過 http://goland.studygolang.com 就可以打開 GoLand IDE 了。
03 試用
瀏覽器打開后,會出現(xiàn)如下安全提示,點(diǎn)擊確認(rèn)即可。

等待鏈接建立后,出現(xiàn)用戶須知:

勾選后,繼續(xù)。接著提示你是否發(fā)送給它們統(tǒng)計數(shù)據(jù),你決定即可。
之后出現(xiàn)這個定制界面,默認(rèn)選中暗黑模式,你可以選擇左下角跳過,保留默認(rèn)。

最開始,我以為這種方式可以免費(fèi)使用 GoLand 了,當(dāng)看到這一步,嗯,我想多了:

這里我們選擇免費(fèi)試用,可以試用 30 天。
接下來的步驟和原生版本的 GoLand 是一樣的。
不過有一點(diǎn)尷尬的是,這個鏡像中并沒有安裝 Go,怎么辦?我目前的辦法是通過 Docker 和宿主機(jī)進(jìn)行目錄映射,使用宿主機(jī)上的 Go,即這樣啟動 Docker:
$ docker run --rm -p 8887:8887 -it -v xxx:/usr/local/go registry.jetbrains.team/p/prj/containers/projector-goland
其中,-v 后面的 xxx 替換為宿主機(jī)上的 Go 安裝目錄,重啟啟動后,配置好 GOROOT(選擇 /usr/local/go),可以正常寫代碼了:

然后可以運(yùn)行、調(diào)試了。
不過瀏覽器使用感覺不是太爽,官方還提供了原生客戶端,即上面說的 client,我們通過這個地址下載一個:https://github.com/JetBrains/projector-client/releases/tag/launcher-v1.0.1,記得選擇適合你操作系統(tǒng)的版本。
安裝啟動后,長這樣:

就是一個空殼子。跟瀏覽器中類似,我們輸入地址,然后 Connect。之后的過程和瀏覽器是一樣的。
如果之前在瀏覽器打開過,這個客戶端會直接記憶上次的位置,而不是第一次訪問的那些界面,現(xiàn)在看起來是不是跟本地的 GoLand 差不多了:

04 感受
試用后,感覺目前還不是太成熟:
-
啟動時,有時候會莫名報錯,需要重新運(yùn)行 Server; -
用起來不是很流暢; -
Mac 下,沒有應(yīng)用全局菜單,設(shè)置在 File 菜單下;而且 Command 相關(guān)快捷鍵沒作用,必須改用 Control,這會很不習(xí)慣;
也許還有其他問題,我沒有深入使用,畢竟使用起來體驗不太好。
不過,JetBrains 說 Projector 是一種技術(shù),而不是最終用戶解決方案。你可以使用它來自定義架構(gòu),滿足您的業(yè)務(wù)需求。Ansible?Kubernetes?都是沒有問題的。
Projector 畢竟剛起步,是一項非常年輕的技術(shù),需要給它一些時間,而且相信開源的力量。JetBrains 有信心,認(rèn)為它有潛力成為遠(yuǎn)程 IDE 訪問的最佳解決方案之一。
期待 Projector 更好的那一天!!
歡迎關(guān)注我
都看到這里了,隨手點(diǎn)個贊支持下唄!
