韩国保姆2_少女伦理电影_HD中文字幕在线观看,玩偶姐姐在线观看高清,8090新视觉电影免费播放在线观看,98蜜桃

沃趣科技技術社區
行業前沿信息一網打盡
技術社區 > 數據庫技術b|Nocalhost安裝操作步驟詳解

數據庫技術b|Nocalhost安裝操作步驟詳解

2023年06月14日

01 Nocalhost安裝



- VS Code -

  1. 打開 VScode 編輯器,然后單擊左側欄中的方塊圖標

  2. 在搜索輸入框中鍵入 nocalhost

  3. 選擇 Nocalhost 插件,然后單擊安裝按鈕進行安裝。

1.jpg


- JetBrains -

Nocalhost 支持 JetBrains 全系列 IDE, 請參閱

https://nocalhost.dev/zh-CN/docs/installation##install-jetbrains-plugin


當安裝 Nocalhost 插件時,會自動幫你安裝 nhctl。


Windows

'文件 > 設置 > 插件 > 瀏覽插件倉庫... > 搜索 "Nocalhost" > 安裝插件


MacOS

'首選項> 設置 > 插件 > 瀏覽插件倉庫...> 搜索"Nocalhost" > 安裝插件

2.jpg




02 編寫配置


需要在項目根目錄下創建.nocalhost文件夾,并在其中創建config.yaml文件。這個文件編寫好后可以傳到版本控制系統中去,整個團隊共享,易于協作, 一個項目只需要編寫一次,有一個人負責維護,其他人都可以無須知道該技術的細節,從而將精力和時間聚焦在核心業務之上。


目錄結構如下:

3.jpg



python項目設置


注意:使用pycharm需要使用商業版,社區版沒有remote debug server的插件,無法使用remote debug的功能


config.yaml設置如下:

configProperties:
  version: v2
 
application:
  name: cloud-api-server
 
  services:
 
    # name 與 serviceType 表明這是屬于 dock 這個 deployment 的配置
    # 配置的內容集中在 containers 中
    - name: cloud-api-server
      serviceType: deployment
 
      dependLabelSelector:
        pods:
          - "app.kubernetes.io/name=cloud-api-server"
 
      # 可以為單個工作負載下的多個容器分別定制不同的配置
      containers:
 
        # 必須設置對應容器的名字,以區分不同的容器
        # 如果有多個容器,但是只需要調試一個容器的話,只設置一個container即可
        - name: cloud-api-server
 
          dev:
            # 開發容器配置
            # 開發鏡像
            # must install pydevd in dev image
            image: registry.***.com/***/cloud-api-server:v18.0.0
            #  開發容器默認 Shell
            shell: "bash"
            # 文件同步的遠程目錄
            workDir: /app/
 
            # 開發容器資源的 request 和 limit
            resources:
              limits:
                cpu: "2"
                memory: 2Gi
              requests:
                cpu: "2"
                memory: 2Gi
 
 
            # 熱加載
            hotReload: true
            command:
              # 一鍵運行
              run:
                - /venv/bin/python
                - run.py
                - --port=11101
                - --debug=true
              # 一鍵調試, must install pydevd in dev image
              debug:
                - /venv/bin/python
                - -m
                - pydevd
                - --client
                - 127.0.0.1
                - --port
                - 8008
                - --file
                - run.py
            # debug 協議的端口
            debug:
              remoteDebugPort: 8008
 
            # Ports to be forwarded to local when enter devMode
            # 進入 Devmode 后是否自動開啟端口轉發功能
            portForward:
              - 11101:11101
 
            useDevContainer: true
            # https://nocalhost.dev/zh-CN/docs/config/config-pattern
            sync:
              type: "send" # 一般設置send就行
              mode: "pattern"
              # 需要同步的文件的模式
              filePattern:
                - "."
              ignoreFilePattern:
                - ".DS_Store"
                - ".idea"
                - "logs/**"
                - ".git"
                - ".github"
                - ".vscode"
                - "bin"
                - "docs"
                - "examples"
                - "tests"
                - "venv"


通過編寫這份配置文件,來描述本地環境和遠程k8s環境的 流量,文件同步,遠程debug的通信端口的關系。nocalhost插件會通過加載該配置文件來完成所有工作



golang項目設置


configProperties:
  version: v2
 
application:
  name: dock
 
  services:
 
    # name 與 serviceType 表明這是屬于 dock 這個 deployment 的配置
    # 配置的內容集中在 containers 中
    - name: dock
      serviceType: deployment
 
      dependLabelSelector:
        pods:
          - "app.kubernetes.io/name=dock"
 
 
      # 可以為單個工作負載下的多個容器分別定制不同的配置
      containers:
 
        # 必須設置對應容器的名字,以區分不同的容器
        # 如果有多個容器,但是只需要調試一個容器的話,只設置一個container即可
        - name: dock
 
          dev:
            # 開發容器配置
            # 開發鏡像
            image: golang:1.17
            #  開發容器默認 Shell
            shell: "bash"
            # 文件同步的遠程目錄
            workDir: /opt/dock-template/
            # storageClass 持久化需要 storageClass 的能力來提供支持
            storageClass: "csi-localpv"
            persistentVolumeDirs:
              - path: "./local-pv" # Dir to be persisted in DevContainer
                capacity: 1Gi # Capability of the dir
            # 開發容器資源的 request 和 limit
            resources:
              limits:
                cpu: "2"
                memory: 2Gi
              requests:
                cpu: "2"
                memory: 2Gi
 
 
            # 熱加載
            hotReload: true
            command:
              # 一鍵運行
              run:
                - go
                - run
                - dock-server.go
              # 一鍵調試
              debug:
                - go get -d github.com/go-delve/delve/cmd/dlv &&
                - dlv
                - --headless
                - --log
                - --listen
                - :9009
                - --api-version 2
                - --accept-multiclient
                - debug
                - dock-server.go
            # debug 協議的端口
            debug:
              remoteDebugPort: 9009
 
            # Ports to be forwarded to local when enter devMode
            # 進入 Devmode 后是否自動開啟端口轉發功能
            portForward:
              - 8080:8080
 
            useDevContainer: false
            # https://nocalhost.dev/zh-CN/docs/config/config-pattern
            sync:
              type: "send"
              mode: "pattern"
              filePattern:
                - "./"
              ignoreFilePattern:
                - ".DS_Store"
                - ".git"
                - ".idea"
                - "logs"
                - "dock.tar.gz"
 
            # Specify dev mode environment parameters
            env:
              - name: GOPROXY
                value: https://goproxy.cn
              # 當存在 go.mod 文件時或處于 GOPATH 外, 其行為均會等同于 GO111MODULE=on。相當于 Go 1.13 下你可以將所有的代碼倉庫均不存儲在 GOPATH 下
              - name: GO111MODULE
                value: on



03 關聯配置


當編輯好配置后,開始進行開發之前,需要進行一次將本地代碼和遠程環境上的工作負載關聯的動作,因為nocalhost插件是在ide中跨項目共享的。意思是,你只需要配置一次遠程服務,在使用pycharm/goland打開多個repo的時候,為了避免混亂,你需要將本地的某一個確定目錄和遠程的某一個pod中的某一個確定容器進行精確關聯。從而開始打通流量和開始同步文件。

5.jpg




04 開發模式


開發模式的本質是使用nhctl工具,在本地計算機和遠程環境之間建立VPN隧道和使用syncing文件同步工具建立實時同步機制。


nocalhost會將原本的pod中將要開發的容器替換為兩個容器,一個是nocalhost_dev開發容器,一個是nocalhost_sidecar容器。


nocalhost_dev容器負責來運行我們的代碼,nocalhost_sidecar來利用pod內共享存儲的機制來處理文件同步。

5.jpg


6.jpg



05 VPN模式


在沒有開啟開發模式的情況下,我們開發遠程程序還有另外一種方式,如果我們的應用本身非常簡單,沒有太多的依賴,也不依賴于k8s環境,不依賴于特定的存儲,只是在網絡層面上依賴于環境中的其他服務。


這種情況下,完全可以在本地開發,無須在本地和遠程之間建立文件同步,將程序跑在遠端的pod內。


通過運行 ProxyMode模式,nocalhost可以只幫我們在本地和遠端pod容器之間建立vpn隧道。我們直接在本地run程序或者debug程序,在遠端pod內能訪問的服務,在本地都可以訪問到。不需要寫/etc/hosts文件等操作。也無須配置環境變量。

7.jpg
8.jpg



06 遠程RUN


如果你的程序依賴非常復雜,依賴了:

  • k8s集群

  • 集群中其他服務

  • 依賴了k8s集群中的存儲

或者本地環境難以搭建:

  • 比如很多依賴無法在windows上安裝

  • 或者本地計算機性能弱,無法在本地愉快的開發

這些問題,當然都可以解決掉,可以在本地模擬出來這些依賴,也可以想辦法安裝上該裝的依賴,但是需要付出的成本很大。


nocalhost提供的方案則非常簡單,通過實時同步本地文件直接將本地程序run在遠端環境中。并且可以直接通過插件執行,和ide原生的run體驗類似。如果是Telepresence則需要編寫非常長的命令來執行。

9.jpg




07

遠程debug

注意:使用pycharm需要使用商業版,社區版沒有remote debug server的插件,無法使用remote debug的功能


原理

10.jpg

python通過pydevd在pod中啟動應用進程,除了應用本身會listen多個port。


同時會在pod的nocalhost_dev容器上的127.0.0.1上bind一個remote debug的端口,該端口是config.yaml中定義的 remoteDebugPort


由于本地和遠程pod之間已經建立了vpn隧道通信,此時remoteDebugPort端口上的流量會被route到本地計算機的remoteDebugPort端口之上,至此本地和遠端進程的remote debug通信建立,我們可以在就可以在本地ide中debug運行在pod中的進程了。


和在本地開發沒有任何區別,并且此時并不是我們在本地模擬了應用運行所需要的資源,而是該進程本就運行在真實的環境中,沒有任何區別。



python

官方的示例配置是:

11.jpg

但這個例子使用了Flask框架來做演示,并且命令是錯誤的。對于python程序,常見的IDE,比如Jetbrains pycharm,vs code,pydev 等,都是使用pydevd的庫來做debug的,而且pydevd支持remote debug。


因此我們需要一個和框架無關,可以remote debug所有python程序的命令。因此更通用的debug配置應該是:


pydevd --client 127.0.0.1 --port 8008 --file run.py


注意:

config.yaml中配置的開發鏡像中應提前安裝pydevd依賴,才可以在debug參數中直接配置pydevd的命令,否則就需要將debug的值配置為:


pip install pydevd && pydevd --client 127.0.0.1 --port 8008 --file run.py



golang

golang使用了dlv來debug進程,goland本身也是使用該工具。因此通過預先在開發容器中安裝dlv工具或者在debug時候立即安裝,都可以來使用該工具。


golang項目的remote debug的指令是:


dlv --headless --log --listen :9009 --api-version 2 --accept-multiclient debug app.go



F A Q


Q:如何設置開發鏡像?


A:首先解釋下開發鏡像,開發鏡像是nocalhost在替換原始容器時候的我們指定的容器,nocalhost官方本身已經提供了很多開發容器,這些容器中都內置了很多調試工具和參數,比如pydevd和dlv。


nocalhost-docker.pkg.coding.net/nocalhost/dev-images/node:latest
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/node:14
 
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/golang:latest
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/golang:1.16
 
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/python:latest
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/python:3.9
 
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/java:latest
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/java:11
 
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/ruby:latest
nocalhost-docker.pkg.coding.net/nocalhost/dev-images/ruby:3.0

針對node,python,java,ruby這些語言的項目,一般以來包非常的大,特別是node的依賴,體積和數量較為夸張,建議在開發鏡像中預置依賴,減少初次初始化開發環境同步文件的時間。一般可以使用當前代碼倉庫分支的最新/較新鏡像作為開發鏡像,一般來講依賴比較并不是很頻繁。


針對golang的項目,依賴一般量比較小,或者在線安裝也比較快,開發鏡像可以使用官方原始鏡像,通過在run/debug指令中實時安裝的方式來安裝依賴。可以避免頻繁改動開發鏡像




Q:熱加載的作用是?如何開啟?


A:熱加載:在 IDE 中對源代碼文件的修改將實時同步到遠端容器中,同時你配置的 Run/Debug 命令將會被重新執行。


開啟方法:

圖片


參考


https://nocalhost.dev/zh-CN/docs/reference/nh-config



讓數據庫基礎設施更簡單
加速企業數字化轉型建設及落地
立即咨詢

沃趣科技

中立的企業級數據庫云
十年磨一劍十年來始終如一的專注數據庫生態領域
夯實技術底蘊打造最適合時代的數據庫基礎設施
業績持續領先目前已累計服務超3000家企業客戶

留言咨詢

完善信息,我們第一時間跟您聯系
姓名
手機
公司
所在地區
咨詢問題