返回部落格

在 Ubuntu 22.04 上使用 Nginx 部署 Go 網頁應用程式

在 Ubuntu 22.04 上使用 Nginx 部署 Go 網頁應用程式

Go 是一種開源的通用程式語言。它的靈感來自於 Python 的高效生產力,同時提供了 C 語言的能力。它最初由 Google 開發,旨在解決他們在程式碼庫中面臨的問題(程式碼複雜性和漫長的編譯時間)。就像任何其他現代程式語言一樣,Go 適用於各種用途。例如,它可用於網頁開發、命令列腳本、網路伺服器應用程式、前端開發等。

在本指南中,我們將引導您完成在 Ubuntu 22.04 LTS 上部署簡單 Go 網頁應用程式的步驟。 我們還將實作 Nginx 反向代理來處理流量負載。

先決條件

要執行本指南中示範的步驟,您需要預先設定以下元件:

如果該服務要透過網域名稱存取,則您必須有一個指向該伺服器的 FQDN。在這種情況下,建議使用 SSL 保護 Nginx。您可以從我們的教學中了解更多關於 在 Ubuntu 上使用 Let’s Encrypt 保護 Nginx 的方法.

步驟 1 – 建立 Go 網頁應用程式

我們將建立一個簡單的 Go 網頁應用程式,在存取該網域時,它會在螢幕上列印 “Hello World”。此外,當存取以下路徑時,該應用程式將向使用者打招呼: <domain>/greet/<username>.

首先在 $GOPATH 底下建立一個新專案。建立專案目錄:

Go Web Application Make Dir

切換目前目錄:

Go Web Application Change Dir

然後,初始化專案:

Go Web Application Init Project

接下來,建立 main.go 這將作為我們 Go 應用程式的根目錄。它將託管我們網頁應用程式的原始碼:

在 VS Code 中開啟專案:

將以下程式碼貼到檔案 main.go:

Go Web Application Main Go

讓我們快速分析一下剛建立的 Go 程式:

  • 術語 package main 作為我們應用程式的進入點。它還指示 Go 編譯器將該檔案編譯為可執行檔,而不是共享程式庫。
  • 這個 import 語句匯入了程式運作所需的所有其他模組。在這裡,我們匯入了 fmt(用於列印文字)和 net/http (用於網頁伺服器應用程式)套件。
  • 使用函式 http.HandleFunc,我們建立了兩個路由:
    • 第一個路由 / 作為以下函式中的父路由: func main.
    • 第二個路由 /greet/ 接受一個 URL 參數(在此例中為字串)。然後該字串會與問候訊息一起顯示。
      • URL Path 用於儲存之後的值 /greet/。然後該值會作為 name URL 參數。
    • http.ListenAndServe 函式會啟動網頁伺服器。在這裡,它正在監聽連接埠 9990.

現在我們的程式已準備就緒,將檔案編譯為執行檔:

Go 編譯器將建立一個與該檔案同名的執行檔。查看輸出:

Go Web Application ls -lh

步驟 2 – 設定用於背景執行的 systemd 單元檔案

在此之前,如果目前使用者登出系統,Go 網頁應用程式將停止執行。對於網頁伺服器來說,這是一個糟糕的設計。為了解決這個問題,我們將建立一個 systemd 單元檔案,使其在背景持續執行,即使使用者登出伺服器也是如此。這使該設定更接近生產級部署。

建立一個專用的 systemd 檔案 goweb.service/lib/systemd/system:

在單元檔案中新增以下程式碼片段:

go web service

在這裡,

  • 變數 ExecStart 表示該服務透過位於我們專案目錄中的主執行檔的進入點 ( $GOPATH/go-web)。請注意,我們沒有提及 $GOPATH,而是輸入了執行檔的完整路徑。這是因為 $GOPATH 變數僅對該使用者可見。
  • 變數 Restart 告訴 systemd 在程式停止執行時該怎麼做。值 always 告訴 systemd 在每次程式停止執行時都重新啟動它。
  • 變數 RestartSec 告訴 systemd 在嘗試重新啟動程式之前等待特定的時間。在這裡,值設定為 5s (5 秒)。
  • 陳述式 WantedBy=multi-user.target 指定在什麼狀態下 systemd 將啟用該服務。

儲存檔案並關閉編輯器。啟動服務:

go web start

驗證服務是否已啟動並執行:

go web status

如輸出所示,應用程式已啟動並執行。我們現在準備好將 Nginx 用作反向代理。

步驟 3 – 將 Nginx 設定為反向代理

現在,我們將為 Nginx 建立一個伺服器區塊以充當反向代理。網頁應用程式將透過反向代理向網際網路公開(以獲得額外的效能和安全性)。

將目前工作目錄變更為 sites-available:

cd

現在,使用您希望公開應用程式的網域名稱建立一個檔案。為了進行示範,我們將使用 example.com:

 

在區塊檔案中輸入以下程式碼:

example.com

在這裡,我們使用 proxy_pass 在伺服器的 IP 位址 (localhost) 的連接埠上提供 Go 網頁應用程式 9990.

要啟用 Nginx 區塊,請建立該檔案到 sites-enabled 資料夾的符號連結(也稱為軟連結):

create sym

重新載入 Nginx 設定以使變更生效:

reload nginx

步驟 4 – 驗證

如果一切順利,現在應該可以存取該 Web 應用程式,網址為 localhost:9990 以及我們設定的網域。在網頁瀏覽器中開啟該 URL:

Hello World

如預期,應用程式在螢幕上印出 “Hello World”。這是主要路由的工作。接下來,透過造訪以下 URL 來測試第二個路由:

Hello Cloud

應用程式已成功傳回簡單的問候訊息,其中包含從 URL 接收到的參數中的名稱。

太棒了!我們已成功在本地伺服器上部署了 Go Web 應用程式!

結語

在本指南中,我們示範了如何藉助 Go 標準函式庫來部署一個簡單的 Go Web 應用程式。我們還使用 Nginx 部署了一個反向代理。雖然此示範是在本地伺服器上進行的,但對於公開伺服器,強烈建議您 實作 SSL 憑證 以安全地暴露於網際網路。若要了解更多 Go 程式設計,您可以參考我們關於 建置與安裝 Go 程式.

祝您運算愉快!

author

Pranay Kapgate

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。