<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          神操作,在本地 VScode 中打開 GitHub 倉庫

          共 4794字,需瀏覽 10分鐘

           ·

          2021-12-19 07:31


          Gitpod[1]是一個可以直接打開 Github 項目的的網(wǎng)頁版 VSCode, 我一開始使用的時候, 它僅提供了網(wǎng)頁版, 使用起來十分不便. 前些天再去試用時, 發(fā)現(xiàn)已經(jīng)可以直接打開本地的 VScode, 類似 remote ssh 的功能, 感覺這個工具潛力很大, 有興趣的讀者可以找個 Github 項目探索下. 這里我就簡單分析下使用方式和原理, 后半部分是對于開發(fā)模式和開發(fā)工具未來方向的探討.

          我是 Python 后端的程序員, 主要負責 PaaS 平臺的治理, 博客中的描述僅僅是自己的一些見解.

          簡單使用

          1. 安裝Gitpod 插件[2], 或是直接用 Github 帳號登錄Gitpod[3]
          2. 找個 Github 項目打開
          1. 網(wǎng)頁端效果
          1. 現(xiàn)在也支持了在本地 VSCode 中打開, 打開后的效果就和普通的 remote ssh 一致

          跳轉(zhuǎn)過去之后, 會先安裝 Gitpod 插件, 然后再打開

          1. 如果你想用本地的 ssh 登錄, 也可以, 看這里就能看到具體的 ssh 配置

          這是登錄命令:

          ssh?-F?/tmp/gitpod_ssh_config-216243-zxK2tQ5tHG0H??moccasin-capybara-78upia72

          Pod 內(nèi)部信息以及 ssh 工作工作原理解析

          Pod 內(nèi)部是用 supervisor 來啟動, sshd, vscode web 服務(wù)是比較正常的, 令人比較意外的是它支持了 docker 內(nèi)部運行 docker.

          #?系統(tǒng)是`Ubuntu?20.04`
          gitpod?~?$?cat?/etc/*-release
          DISTRIB_ID=Ubuntu
          DISTRIB_RELEASE=20.04
          DISTRIB_CODENAME=focal
          DISTRIB_DESCRIPTION="Ubuntu?20.04.2?LTS"

          #?可以直接切換到root用戶
          gitpod?~?$?sudo?su
          #?用visudo來看的話,?可以看到在sudo組里的用戶不需要root權(quán)限密碼
          #?gitpod?~?$?visudo
          #?%sudo?ALL=NOPASSWD:ALL


          #?這個地址是來自于GCP
          gitpod?~?$?curl?ip.sb
          34.127.117.8

          #?這個workspace目錄是掛載進來的,?所以上面的內(nèi)容應(yīng)該會保留
          #?我有點奇怪,?為什么不把它掛到?/home/gitpod/workspace,?感覺可能更加合理
          gitpod?~?$?df?-Th
          /dev/md42????????xfs???????30G??114M???30G???1%?/workspace


          #?本地啟動了sshd服務(wù),?不過端口不是默認22,?而是23001,?但是這里權(quán)限給的太大了,?這個sshd監(jiān)聽127.0.0.1就可以了
          gitpod?/?$?sudo?ss?-tunlp
          Netid??State???Recv-Q??Send-Q???Local?Address:Port????Peer?Address:Port??Process
          tcp????LISTEN??0???????128?????????10.0.2.100:40799????????0.0.0.0:*??????users:(("supervisor",pid=1,fd=38))
          tcp????LISTEN??0???????511??????????127.0.0.1:40799????????0.0.0.0:*??????users:(("node",pid=1084,fd=19))
          tcp????LISTEN??0???????128??????????????????*:22999??????????????*:*??????users:(("supervisor",pid=1,fd=10))
          tcp????LISTEN??0???????511??????????????????*:23000??????????????*:*??????users:(("node",pid=348,fd=19))
          tcp????LISTEN??0???????128??????????????????*:23001??????????????*:*??????users:(("supervisor",pid=1,fd=8))

          supervisor 進程

          我一開始以為這個 supervisor 是 Python 的那個, 后來我去Github 官網(wǎng)[4]找了找代碼, 發(fā)現(xiàn)它是一個自己寫的 Golang 服務(wù):

          VScode 遠程連接方式

          使用本地的 VScode 打開時, 可以看到這里有一個ssh target

          其中的配置文件類似如下:

          Host?moccasin-capybara-78upia72
          HostName?127.0.0.1
          User?gitpod
          Port?36129
          IdentityFile?/tmp/gitpod_bb1491a6-d26d-4e40-b0ae-d0b34a2d19f3_id_rsa

          看起來它是直接連接了一個本地的端口, 具體這個端口是誰創(chuàng)建的呢, 找了一下是gitpod-local-co, 這個操作應(yīng)該是類似 frp 的 stcp 模式, 把遠程的 ssh 端口映射到了本地.

          $?ss?-tunlp??|?grep?36129
          tcp???LISTEN?0??????4096????????????????????????????????????????127.0.0.1:36129??????0.0.0.0:*????users:(("gitpod-local-co",pid=217415,fd=14))

          su root

          visudo 可以看到%sudo 組的用戶可以不需要密碼直接切換到 root, gitpod 屬于這個組, 所以 sudo 命令直接可以用.

          需要考慮的問題

          1. VScode 當前只允許添加一個 ssh 配置文件, 因此會令用戶自己的配置文件失效, 很坑
          1. pod 內(nèi)部的 ssh 端口, 應(yīng)該僅監(jiān)聽 127.0.0.1, 因為這個端口是被映射出去使用的, 避免 Pod 直接被外部訪問

          2. pod 的 ssh key 要注意, 每次生成 pod 時要重新產(chǎn)生

          3. pod 的生命周期一點要短, 最好 VScode 關(guān)閉時就馬上退出, 也許有人認為 pod 應(yīng)該一直在后臺運行, 但是這樣其實加大了風險, 如果想要運行后臺類型的任務(wù), 應(yīng)該用在線的容器, 而不是開發(fā)工具中的容器, 而且這個容器一旦出現(xiàn)安全問題, 可能會影響這個用戶的所有倉庫.

          4. 每個用戶的每個應(yīng)用都器要有自己單獨的 pod, 避免互相影響.

          5. 鑒權(quán)很重要, 需要在穿透建立連接時就把權(quán)限控制做好, 只有有權(quán)限的用戶才會在本地建立連接端口, 內(nèi)網(wǎng)穿透時, 沒有權(quán)限的用戶就不給做

          6. 如何防止被用戶濫用, 我們提供了一個完整功能的 root shell, 別有用心的用戶一定會薅羊毛挖礦.

          幾個短期優(yōu)化點

          1. 抽離主要代碼: Gitpod 中當前服務(wù)端, 應(yīng)該做成一個單獨的服務(wù). 啟動之后, 可以直接在 Gitpod 網(wǎng)頁后臺中看到, 并且可以直接調(diào)用 VScode 打開工作區(qū), 這樣, 可以在用戶自己的容器中運行服務(wù)端, 解決用戶自建容器的內(nèi)網(wǎng)穿透和 VSCode web 版無法使用的功能, 這個才是個人用戶想要的功能

          2. 自定義鏡像功能: 針對某個倉庫, 應(yīng)該允許用戶自定義 Dockerfile, 或是自定義鏡像, 間接實現(xiàn)開發(fā)環(huán)境規(guī)范化

          3. 實現(xiàn)秒開: 因為 Pod 需要在 VScode 關(guān)閉后停止服務(wù), 那么用戶下次打開時, 如何做到秒開呢? 我認為可以在關(guān)閉時, 刪除 ssh key, 動態(tài)的調(diào)整 cpu 到 0.01 核, 確保無法訪問, 無法對外服務(wù). 用戶重新打開時, 再生成新的 key, 調(diào)大 cpu 限制, 相比于重新啟動容器應(yīng)該會快很多.

          4. 服務(wù)對外訪問: 對于后臺代碼, 修改之后能夠立刻看到效果是最重要的, 可以利用 VSCode 的端口映射功能轉(zhuǎn)給本地. 需要給別人演示時, 也可以將端口臨時映射到公網(wǎng)或是功能開發(fā)環(huán)境中.

          本地開發(fā)環(huán)境的劣勢

          1. 每個人的開發(fā)環(huán)境很容易不一致, 即使有詳細的代碼規(guī)范, 每個人需要針對代碼在本地重新配置一份環(huán)境

          2. 代碼提示工具對性能的要求越來越高, 我在本地上用 TabNine, 一個項目內(nèi)存會占到 10 多個 G, 我 16G 的電腦不夠用的. 還有 Copilot, 我本地也不敢用

          3. 個人的電腦很少會考慮磁盤冗余技術(shù), 備份很可能也不經(jīng)常進行, 可能存在代碼文件丟失問題

          開發(fā)環(huán)境上云應(yīng)該是一種趨勢, 無論是 VScode 的 remote ssh 功能, 還是 JetBrains 新推出的Fleet[5], 都傳達出了這么一種信號.

          Gitpod 未來發(fā)展

          1. 確立主要用途: 從我個人角度來看, Gitpod 十分適合于遠程調(diào)試開發(fā)和調(diào)試非編譯型語言, 尤其適合于Python, Ruby, NodeJS, 甚至對于Python應(yīng)用, 完全可以把線上環(huán)境容器打包重新啟動, 在 Gitpod 中的環(huán)境中進行開發(fā)調(diào)試, 相當于擁有了一個于線上環(huán)境完全一致的開發(fā)環(huán)境.

          2. 個人版與企業(yè)版分離: 針對個人開發(fā)者, 提供公有云服務(wù), 可以考慮計費. 針對企業(yè)應(yīng)該提供企業(yè)版, 因為未來即使有遠程開發(fā)環(huán)境的功能一定是企業(yè)內(nèi)部自建的, 因為它們不太可能將內(nèi)部代碼放在公有云環(huán)境中, 如果能提供一套適合企業(yè)的解決方案, 并且有人用, 應(yīng)該能長久運營.

          總結(jié)

          我之前就有在使用github1sgithub.dev來讀代碼, 直到發(fā)現(xiàn)了 Gitpod. 相比于前兩個僅能讀代碼的功能, Gitpod 提供了更加完善的體驗, 你可以利用它 push 代碼, 可以完整的接手開發(fā)工作, 這一點帶給用戶的體驗會很好. 希望社區(qū)版能長久的存活下去吧, 我的開源項目不多, 如果真的有需要, 我很愿意進一步使用這個工具并且付費.

          我不是產(chǎn)品經(jīng)理, 后面的內(nèi)容單單就我自己的看法探討一下項目未來的發(fā)展趨勢, 可能就是在瞎扯吧.

          引用鏈接

          [1]

          Gitpod: https://www.gitpod.io/

          [2]

          Gitpod 插件: https://www.gitpod.io/docs/browser-extension

          [3]

          Gitpod: https://www.gitpod.io/

          [4]

          Github 官網(wǎng): https://github.com/gitpod-io/gitpod

          [5]

          Fleet: https://www.jetbrains.com/remote-development/

          原文鏈接:https://corvo.myseu.cn/2021/12/11/2021-12-11-Gitpod%E4%BD%BF%E7%94%A8%E4%B8%8E%E7%AE%80%E5%8D%95%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90/


          你可能還喜歡

          點擊下方圖片即可閱讀

          Cilium 1.11 發(fā)布,帶來內(nèi)核級服務(wù)網(wǎng)格、拓撲感知路由....

          云原生是一種信仰???

          關(guān)注公眾號

          后臺回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點擊?"閱讀原文"?獲取更好的閱讀體驗!


          發(fā)現(xiàn)朋友圈變“安靜”了嗎?

          瀏覽 151
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品久久久久久久中文字幕 | 国产人伦子伦一级A片下载 | 日本黄色小电影网站 | 亚洲色图一区二区 | 东条中文在线 |