Azure Web App 上的自訂 golang 啟動指令
php小編草莓今天為大家介紹Azure Web App上的自訂golang啟動指令。 Azure Web App是一種託管的雲端服務,可協助開發者輕鬆部署和擴充Web應用程式。而golang是一種高效率的程式語言,具有快速、可靠和簡潔的特性。透過自訂golang啟動命令,開發者可以更好地控制網路應用程式的啟動過程,實現更多個人化的功能。本文將詳細介紹如何在Azure Web App上進行自訂golang啟動命令的設定和使用,幫助開發者更好地利用這項功能。
問題內容
我正在嘗試將帶有 github 操作的 go web 應用程式部署到 azure 應用程式服務。整個部署成功,直到應用程式需要使用 azure/webapps-deploy@v2
進行部署。
為了查看問題出在哪裡,我創建了一個簡單的 go 'hello world' 測試應用程式。只需部署這個非常簡單的應用程式就可以了。然而,在嘗試部署測試應用程式時,我注意到了一些事情:
- 該應用程式在 azure 上完全重建,而不是使用可執行檔來運行。我以前的部署文件如下所示:
name: go deployment on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest environment: production steps: # checkout the repo - uses: actions/checkout@master # setup go - name: setup go uses: actions/setup-go@v3 with: go-version: '1.20' - run: go version # install dependencies - name: go build working-directory: . run: | go build - name: upload artifact for deployment job uses: actions/upload-artifact@v3 with: name: go-app path: . deploy: runs-on: ubuntu-latest needs: build environment: name: 'production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} steps: - name: download artifact from build job uses: actions/download-artifact@v3 with: name: go-app - name: 'deploy to azure web app' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: ${{ env.azure_webapp_name }} slot-name: 'production' publish-profile: ${{ secrets.azureappservice_publishprofile }} package: .
這部署沒有問題。程式碼庫應用程式被饋送到 azure web 應用程式。當我嘗試在最後一步中使用可執行檔時,部署失敗。當然,azure web app 有一個用於設定啟動命令的自訂欄位。我嘗試將其設置為 ./main
以在啟動時運行可執行文件,但這仍然失敗。
with: app-name: ${{ env.azure_webapp_name }} slot-name: 'production' publish-profile: ${{ secrets.azureappservice_publishprofile }} package: main
當使用 go build main.go
在我的本地電腦上建立 go 應用程序,然後執行 ./main
時,該應用程式運行沒有問題。
- 因為我無法只執行上一個步驟中的可執行文件,所以我決定回滾並讓 azure 應用程式服務按原樣執行 go 應用程式。如果是這樣,則不再需要整個建置步驟,只需將程式碼推送到 azure web 服務即可。就像這樣:
name: Go on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest environment: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} steps: # checkout the repo - uses: actions/checkout@master - name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: app-name: ${{ env.AZURE_WEBAPP_NAME }} slot-name: 'Production' publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }} package: .
儘管必須推送整個程式碼庫,但它仍然運作得很好。然而,在我們的生產應用程式中,由於結構原因,main.go 檔案不位於根目錄中。為了模仿這種行為,我將 main.go 檔案放置在 /cmd 目錄下。 azure web app 的部署再次失敗。可以猜測,這可能是由於 azure 無法找到 main.go 檔案。我想再次使用啟動命令,但這次使用 go 運行 cmd/main.go
。可悲的是,這也不行。
azure web apps 顯示運行管道時建立的所有內容:
有什麼建議嗎?我在這裡缺少什麼?
關於如何將上一步中創建的可執行文件上傳到 azure web app 並在那裡運行該可執行文件,有什麼解決方案嗎?
解決方法
首先,您應該在 azure web app 中設定一個環境變數:website_run_from_package
到 1
。這可以防止再次在 azure 上運行建置。從這一刻起,您應該能夠上傳預先建置的可執行檔。
#執行此操作後,我在 https://appname- 的日誌中看到以下內容here.scm.azurewebsites.net/api/logstream
#2023-04-26T17:20:12.596331026Z Detecting platforms... 2023-04-26T17:20:12.805572634Z Could not detect any platform in the source directory. 2023-04-26T17:20:15.792565274Z Running /home/site/wwwroot/go-test now 2023-04-26T17:20:15.928193597Z /home/site/wwwroot/go-test: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.32' not found (required by /home/site/wwwroot/go-test) 2023-04-26T17:20:15.934491135Z /home/site/wwwroot/go-test: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.34' not found (required by /home/site/wwwroot/go-test)
出現版本 glibc_2.34
是因為該應用程式是使用 ubuntu-latest 在管道中建構的。這是 ubuntu-22.04,其中有 glibc_2.35
但要運行的 azure 計算機沒有此版本。使用 ubuntu-20.04
版本 glibc_2.31
建置即可完美運作。
以上是Azure Web App 上的自訂 golang 啟動指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

OpenSSL,作為廣泛應用於安全通信的開源庫,提供了加密算法、密鑰和證書管理等功能。然而,其歷史版本中存在一些已知安全漏洞,其中一些危害極大。本文將重點介紹Debian系統中OpenSSL的常見漏洞及應對措施。 DebianOpenSSL已知漏洞:OpenSSL曾出現過多個嚴重漏洞,例如:心臟出血漏洞(CVE-2014-0160):該漏洞影響OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻擊者可利用此漏洞未經授權讀取服務器上的敏感信息,包括加密密鑰等。

後端學習路徑:從前端轉型到後端的探索之旅作為一名從前端開發轉型的後端初學者,你已經有了nodejs的基礎,...

在BeegoORM框架下,如何指定模型關聯的數據庫?許多Beego項目需要同時操作多個數據庫。當使用Beego...

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...
