如何部署Golang程序到服務器
環(huán)境
開發(fā)環(huán)境:mac
生產(chǎn)環(huán)境:virtualbox (虛擬機)下的 CentOS 6.8
virtualbox
服務器環(huán)境
本地開發(fā)mac環(huán)境 go env 參數(shù)
歷程
go的代碼
package main import ( "fmt" "log" "net/http" ) func sayHello(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w,"您看到我了") } func main() { http.HandleFunc("/",sayHello) log.Println("啟動了") err := http.ListenAndServe(":9000",nil) if err != nil{ log.Fatal("List 9000") } }
就這么多,代碼意思不贅述。
代碼寫好了,現(xiàn)在需要編譯了,由于是mac環(huán)境編譯到linux下運行,所有涉及到跨平臺編譯。
編譯代碼命令
env GOOS=linux GOARCH=386 go build main.go
PS:這里386是一個很大的坑,這里是要運行這個打包后程序的平臺。如果是linux需要你用 uname -a 來查看你運行的linux系統(tǒng)環(huán)境。常見的環(huán)境一般有 amd64,i386等。
OK,編譯完成后會生成一個 main可執(zhí)行文件,沒有后綴,這時你只需要把這個文件上傳到你的虛擬機,直接運行就好了。
直接運行
運行后如果出現(xiàn)上圖的效果,就說明已經(jīng)運行起來了。這時你打開你的瀏覽器訪問 你服務器的 IP:9000就能看到如下圖的內(nèi)容了
瀏覽器圖
沒錯就這么簡單,今天是我第一次部署,也是挺驚訝的,不需要任何語言環(huán)境,像java程序需要在服務器安裝java,php需要安裝Apache,PHP等運行環(huán)境,go統(tǒng)統(tǒng)不需要,只需要一個linux系統(tǒng)就好,扔上去就可以了。
下面是我當時遇到的坑
1、出現(xiàn) cannot execute binary file
cannot execute binary file
出現(xiàn)這原因是因為,你的編譯時的運行環(huán)境不對,就是上文的 386 需要換成你運行的服務器的環(huán)境,你可以用 uname -a 查看。
2、運行起來了,但是無法訪問
這問題一般是你服務器的防火墻,或者網(wǎng)絡問題。
你可以先簡單粗暴的把服務器的防火墻關閉 service iptables stop ,然后再看能否訪問,真實的生產(chǎn)環(huán)境,不建議關閉防火墻哈。
如果部署真實的線上跑,肯定還需要一些安全,進程守護啥的,本文只是部署入門,就不探討了。