GO項目部署Linux服務器的實現(xiàn)示例
最近在學習golang,和前端小伙伴一起寫了個H5小游戲,游戲數(shù)據(jù)采用websocket進行通信。由于是第一次部署go語言項目,在部署過程中遇到很多問題,寫下這篇文章進行總結(jié),希望可以幫助到部署遇到問題的朋友。
Golang項目和Java項目部署的不同
Golang項目相比于Java項目部署流程更加的簡單,不需要在服務器上下載語言環(huán)境,我們可以直接在服務器上運行編譯好的二進制文件
go語言能夠做到這一點的原因如下:
靜態(tài)鏈接:Go 語言的編譯器會將程序的所有依賴包括在最終的可執(zhí)行文件中,這種方式稱為靜態(tài)鏈接。因此,生成的可執(zhí)行文件不需要依賴外部的動態(tài)鏈接庫或其他運行時環(huán)境,可以在沒有 Go 語言環(huán)境的服務器上直接運行。
跨平臺支持:Go 語言的編譯器可以生成不同操作系統(tǒng)和架構(gòu)的可執(zhí)行文件,比如 Windows、Linux 和 macOS 等。這意味著你可以在開發(fā)機器上編譯生成 Linux 下運行的可執(zhí)行文件,然后將其拷貝到 Linux 服務器上直接運行,而無需關心服務器上是否安裝了 Go 語言環(huán)境。
內(nèi)置運行時環(huán)境:Go 語言的可執(zhí)行文件中內(nèi)置了運行時環(huán)境,包括垃圾回收、調(diào)度器等,因此它們可以獨立運行,不需要額外的運行時支持。
對于Java來說,Java 語言在編譯時生成的是字節(jié)碼文件(以 .class 格式存儲),而不是直接生成可執(zhí)行的二進制文件。這些字節(jié)碼文件需要在 Java 虛擬機(JVM)上執(zhí)行,因此在服務器上運行 Java 程序仍然需要安裝 Java 運行時環(huán)境(JRE)或者 Java 開發(fā)工具包(JDK)。
部署流程
1.確保自己的項目在本地可以正常運行和訪問;
2.查看自己的項目監(jiān)聽的端口號,本項目監(jiān)聽的是服務器私網(wǎng)IP的8090端口
3.之后開始我們的編譯,設置編譯時候的環(huán)境變量,依次執(zhí)行下面命令
D:\SoftwareDevelop\GoFamily\GoWorks\klotski>set CGO_ENABLED=0 D:\SoftwareDevelop\GoFamily\GoWorks\klotski>set GOOS=linux D:\SoftwareDevelop\GoFamily\GoWorks\klotski>set GOARCH=amd64 D:\SoftwareDevelop\GoFamily\GoWorks\klotski>go build
set CGO_ENABLED=0
:
- 這個命令是在 Windows 系統(tǒng)下設置一個環(huán)境變量
CGO_ENABLED
的值為0
。CGO_ENABLED
是 Go 語言中用來控制是否啟用 C 語言的交互能力的環(huán)境變量,0
表示禁用了 CGO(Cgo 是一個 Go 包,用于調(diào)用 C 代碼)。
set GOOS=linux
:
- 這個命令是設置一個環(huán)境變量
GOOS
的值為linux
。GOOS
是 Go 語言中用來指定目標操作系統(tǒng)的環(huán)境變量,這里將目標操作系統(tǒng)設置為 Linux。
set GOARCH=amd64
:
- 這個命令是設置一個環(huán)境變量
GOARCH
的值為amd64
。GOARCH
是 Go 語言中用來指定目標體系結(jié)構(gòu)的環(huán)境變量,這里將目標體系結(jié)構(gòu)設置為 AMD64 架構(gòu)。
go build
:
- 這個命令是使用 Go 工具編譯當前目錄下的 Go 源代碼文件,生成一個可執(zhí)行文件。根據(jù)前面設置的環(huán)境變量,編譯時會將目標操作系統(tǒng)和體系結(jié)構(gòu)設置為 Linux 和 AMD64。
編譯完成之后我們得到一個文件名為項目名無文件后綴的文件,我們將這一個文件傳輸?shù)絃inux系統(tǒng)上,在Linux中,我們找到上傳的文件目錄。
4.通過ls命令查看文件權(quán)限是否可執(zhí)行,如果文件為綠色,代碼可直接執(zhí)行。
如果不可執(zhí)行,使用chmod 755 ./klotski 更新文件權(quán)限
5.通過./文件名或者nohup命令執(zhí)行文件
#在當前路徑下執(zhí)行文件 ./klotski #通過絕對路徑執(zhí)行文件,只要能夠找到文件就可以 /opt/klotski/klotski #通過上述方式雖然可以執(zhí)行文件,并且通過公網(wǎng)訪問項目,但是我們一旦關閉了當前連接,程序就會終止。通過讓當前程序在后臺運行的方式,可以解決這一問題 nohup ./klotski
程序運行成功會使服務器界面處于任務的狀態(tài),顯示訪問程序時的輸出,如果不是此狀態(tài),說明程序運行失敗,請檢查自己的程序和更改監(jiān)聽的端口IP
6.查詢程序運行時占用的端口
# 查詢我們的go語言二進制文件是否被執(zhí)行 # 注意我們程序運行的線程是隨機分配的,并不是8090端口,我們的程序僅僅建成8090端口的訪問情況 [root@wuqiong klotski]# ps aux | grep klotski root 29218 1.4 0.1 1230132 2512 ? Sl 19:39 0:50 ./klotski root 32492 0.0 0.0 112812 976 pts/0 S+ 20:35 0:00 grep --color=auto klotski # 關閉運行程序 后面的參數(shù)跟PID kill 29218
7.別忘記放開服務器的安全組,開放我們程序監(jiān)聽的端口
到此這篇關于GO項目部署Linux服務器的實現(xiàn)示例的文章就介紹到這了,更多相關GO部署Linux內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
需要在Go寫的服務里面調(diào)用命令行或者批處理,并根據(jù)返回的結(jié)果做處理。但是windows下面用cmd返回中文會出現(xiàn)亂碼,本文就詳細的介紹一下解決方法,感興趣的可以了解一下2021-12-12聊聊go xorm生成mysql的結(jié)構(gòu)體問題
這篇文章主要介紹了go xorm生成mysql的結(jié)構(gòu)體問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-03-03Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
在cmd下運行go程序或者是GOLAND的Terminal下運行go程序會出現(xiàn)中文亂碼的情況。本文就詳細的介紹下解決方法,具有一定的參考價值,感興趣的可以了解一下2021-12-12