go語言中文網(wǎng)部署 go語言app

支付用java還是go

語法簡單容易上手。Go語言憑借著其比Java、C++等開發(fā)語言更簡單的語法,讓學(xué)習(xí)者更容易上手。

10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有青山湖免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

可跨平臺進(jìn)行編譯。Go語言可以進(jìn)行跨平臺編譯,可以編譯成適用于window、mac以及Linux系統(tǒng)環(huán)境下的應(yīng)用。

支持垃圾回收功能。不用再開發(fā)過程中去過多考慮內(nèi)存管理、垃圾回收的事情,讓程序員編程更加簡單。

部署編譯簡單。Go語言僅僅依賴一個外部庫就是Glibc,同時編譯后可以生成一個靜態(tài)的可執(zhí)行文件,使得部署編譯都非常的方便快捷。

自帶并發(fā)支持。Go語言的設(shè)計直接支持并發(fā)操作,可以充分的利用設(shè)備資源來提高程序性能。

……

Go語言的用途

根據(jù)Go語言中文網(wǎng)顯示,Go語言有以下四大用途:

適合服務(wù)器編程。在服務(wù)器上可以代替以往C或者C++的工作,進(jìn)行例如日志處理、數(shù)據(jù)打包、文件系統(tǒng)、虛擬機(jī)處理、數(shù)據(jù)庫代理器等工作。

網(wǎng)絡(luò)編程。Go可以用來解決常規(guī)的Web應(yīng)用開發(fā)、API應(yīng)用開發(fā)、下載應(yīng)用開發(fā)等,國內(nèi)最火的一件事情莫過于幾年前知乎將其推薦系統(tǒng)從Python語言更換到了Go語言。

云平臺建設(shè)。例如CloudFundy的部分功能組建、Opcera云平臺的組件。而且據(jù)了解國內(nèi)BAT、小米、360等公司都在使用go語言做系統(tǒng)研發(fā)。

如何配置go語言開發(fā)環(huán)境

1.1 Go 安裝

Go的三種安裝方式

Go有多種安裝方式,你可以選擇自己喜歡的。這里我們介紹三種最常見的安裝方式:

Go源碼安裝:這是一種標(biāo)準(zhǔn)的軟件安裝方式。對于經(jīng)常使用Unix類系統(tǒng)的用戶,尤其對于開發(fā)者來說,從源碼安裝可以自己定制。

Go標(biāo)準(zhǔn)包安裝:Go提供了方便的安裝包,支持Windows、Linux、Mac等系統(tǒng)。這種方式適合快速安裝,可根據(jù)自己的系統(tǒng)位數(shù)下載好相應(yīng)的安裝包,一路next就可以輕松安裝了。**推薦這種方式**

第三方工具安裝:目前有很多方便的第三方軟件包工具,例如Ubuntu的apt-get、Mac的homebrew等。這種安裝方式適合那些熟悉相應(yīng)系統(tǒng)的用戶。

最后,如果你想在同一個系統(tǒng)中安裝多個版本的Go,你可以參考第三方工具GVM,這是目前在這方面做得最好的工具,除非你知道怎么處理。

Go源碼安裝

在Go的源代碼中,有些部分是用Plan 9 C和ATT匯編寫的,因此假如你要想從源碼安裝,就必須安裝C的編譯工具。

在Mac系統(tǒng)中,只要你安裝了Xcode,就已經(jīng)包含了相應(yīng)的編譯工具。

在類Unix系統(tǒng)中,需要安裝gcc等工具。例如Ubuntu系統(tǒng)可通過在終端中執(zhí)行sudo apt-get install gcc

libc6-dev來安裝編譯工具。

在Windows系統(tǒng)中,你需要安裝MinGW,然后通過MinGW安裝gcc,并設(shè)置相應(yīng)的環(huán)境變量。

你可以直接去官網(wǎng)下載源碼,找相應(yīng)的goVERSION.src.tar.gz的文件下載,下載之后解壓縮到$HOME目錄,執(zhí)行如下代碼:

cd go/src

./all.bash

運(yùn)行all.bash后出現(xiàn)"ALL TESTS PASSED"字樣時才算安裝成功。

上面是Unix風(fēng)格的命令,Windows下的安裝方式類似,只不過是運(yùn)行all.bat,調(diào)用的編譯器是MinGW的gcc。

如果是Mac或者Unix用戶需要設(shè)置幾個環(huán)境變量,如果想重啟之后也能生效的話把下面的命令寫到.bashrc或者.zshrc里面,

export GOPATH=$HOME/gopath

export PATH=$PATH:$HOME/go/bin:$GOPATH/bin

如果你是寫入文件的,記得執(zhí)行bash .bashrc或者bash

.zshrc使得設(shè)置立馬生效。

如果是window系統(tǒng),就需要設(shè)置環(huán)境變量,在path里面增加相應(yīng)的go所在的目錄,設(shè)置gopath變量。

當(dāng)你設(shè)置完畢之后在命令行里面輸入go,看到如下圖片即說明你已經(jīng)安裝成功

圖1.1 源碼安裝之后執(zhí)行Go命令的圖

如果出現(xiàn)Go的Usage信息,那么說明Go已經(jīng)安裝成功了;如果出現(xiàn)該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了Go的安裝目錄。

關(guān)于上面的GOPATH將在下面小節(jié)詳細(xì)講解

Go標(biāo)準(zhǔn)包安裝

Go提供了每個平臺打好包的一鍵安裝,這些包默認(rèn)會安裝到如下目錄:/usr/local/go

(Windows系統(tǒng):c:\Go),當(dāng)然你可以改變他們的安裝位置,但是改變之后你必須在你的環(huán)境變量中設(shè)置如下信息:

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

上面這些命令對于Mac和Unix用戶來說最好是寫入.bashrc或者.zshrc文件,對于windows用戶來說當(dāng)然是寫入環(huán)境變量。

如何判斷自己的操作系統(tǒng)是32位還是64位?

我們接下來的Go安裝需要判斷操作系統(tǒng)的位數(shù),所以這小節(jié)我們先確定自己的系統(tǒng)類型。

Windows系統(tǒng)用戶請按Win+R運(yùn)行cmd,輸入systeminfo后回車,稍等片刻,會出現(xiàn)一些系統(tǒng)信息。在“系統(tǒng)類型”一行中,若顯示“x64-based

PC”,即為64位系統(tǒng);若顯示“X86-based PC”,則為32位系統(tǒng)。

Mac系統(tǒng)用戶建議直接使用64位的,因為Go所支持的Mac OS X版本已經(jīng)不支持純32位處理器了。

Linux系統(tǒng)用戶可通過在Terminal中執(zhí)行命令arch(即uname

-m)來查看系統(tǒng)信息:

64位系統(tǒng)顯示

x86_64

32位系統(tǒng)顯示

i386

Mac 安裝

訪問下載地址,32位系統(tǒng)下載go1.4.2.darwin-386-osx10.8.pkg,64位系統(tǒng)下載go1.4.2.darwin-amd64-osx10.8.pkg,雙擊下載文件,一路默認(rèn)安裝點擊下一步,這個時候go已經(jīng)安裝到你的系統(tǒng)中,默認(rèn)已經(jīng)在PATH中增加了相應(yīng)的~/go/bin,這個時候打開終端,輸入go

看到類似上面源碼安裝成功的圖片說明已經(jīng)安裝成功

如果出現(xiàn)go的Usage信息,那么說明go已經(jīng)安裝成功了;如果出現(xiàn)該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了go的安裝目錄。

Linux 安裝

訪問下載地址,32位系統(tǒng)下載go1.4.2.linux-386.tar.gz,64位系統(tǒng)下載go1.4.2.linux-amd64.tar.gz,

假定你想要安裝Go的目錄為 $GO_INSTALL_DIR,后面替換為相應(yīng)的目錄路徑。

解壓縮tar.gz包到安裝目錄下:tar zxvf go1.4.2.linux-amd64.tar.gz -C

$GO_INSTALL_DIR。

設(shè)置PATH,export PATH=$PATH:$GO_INSTALL_DIR/go/bin

然后執(zhí)行g(shù)o

圖1.2 Linux系統(tǒng)下安裝成功之后執(zhí)行g(shù)o顯示的信息

如果出現(xiàn)go的Usage信息,那么說明go已經(jīng)安裝成功了;如果出現(xiàn)該命令不存在,那么可以檢查一下自己的PATH環(huán)境變中是否包含了go的安裝目錄。

Windows 安裝

訪問Google Code 下載頁,32

位請選擇名稱中包含 windows-386 的 msi 安裝包,64 位請選擇名稱中包含 windows-amd64 的。下載好后運(yùn)行,不要修改默認(rèn)安裝目錄

C:\Go\,若安裝到其他位置會導(dǎo)致不能執(zhí)行自己所編寫的 Go 代碼。安裝完成后默認(rèn)會在環(huán)境變量 Path 后添加 Go 安裝目錄下的 bin 目錄

C:\Go\bin\,并添加環(huán)境變量 GOROOT,值為 Go 安裝根目錄 C:\Go\ 。

驗證是否安裝成功

在運(yùn)行中輸入 cmd 打開命令行工具,在提示符下輸入 go,檢查是否能看到 Usage 信息。輸入

cd %GOROOT%,看是否能進(jìn)入 Go 安裝目錄。若都成功,說明安裝成功。

不能的話請檢查上述環(huán)境變量 Path 和 GOROOT 的值。若不存在請卸載后重新安裝,存在請重啟計算機(jī)后重試以上步驟。

第三方工具安裝

GVM

gvm是第三方開發(fā)的Go多版本管理工具,類似ruby里面的rvm工具。使用起來相當(dāng)?shù)姆奖?,安裝gvm使用如下命令:

bash (curl -s -S -L )

安裝完成后我們就可以安裝go了:

gvm install go1.4.2

gvm use go1.4.2

也可以使用下面的命令,省去每次調(diào)用gvm use的麻煩: gvm use go1.4.2 --default

執(zhí)行完上面的命令之后GOPATH、GOROOT等環(huán)境變量會自動設(shè)置好,這樣就可以直接使用了。

apt-get

Ubuntu是目前使用最多的Linux桌面系統(tǒng),使用apt-get命令來管理軟件包,我們可以通過下面的命令來安裝Go,為了以后方便,應(yīng)該把

git mercurial 也安裝上:

sudo apt-get install python-software-properties

sudo add-apt-repository ppa:gophers/go

sudo apt-get update

sudo apt-get install golang-stable git-core mercurial

homebrew

homebrew是Mac系統(tǒng)下面目前使用最多的管理軟件的工具,目前已支持Go,可以通過命令直接安裝Go,為了以后方便,應(yīng)該把

git mercurial 也安裝上:

brew update brew upgrade

brew install go

brew install git

brew install mercurial

go語言的官網(wǎng)是什么?

go語言的官網(wǎng)是

Go語言是谷歌推出的一種全新的編程語言,可以在不損失應(yīng)用程序性能的情況下降低代碼的復(fù)雜性。谷歌首席軟件工程師羅布派克(Rob Pike)說:我們之所以開發(fā)Go,是因為過去10多年間軟件開發(fā)的難度令人沮喪。

Go是谷歌2009發(fā)布的第二款編程語言。2009年7月份,谷歌曾發(fā)布了Simple語言,它是用來開發(fā)Android應(yīng)用

Go Logo

的一種BASIC語言.

北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。該獎項授予在2009年市場份額增長最多的編程語言。

谷歌資深軟件工程師羅布·派克(Rob Pike)表示,“Go讓我體驗到了從未有過的開發(fā)效率?!迸煽吮硎荆徒裉斓腃++或C一樣,Go是一種系統(tǒng)語言。他解釋道,“使用它可以進(jìn)行快速開發(fā),同時它還是一個真正的編譯語言,我們之所以現(xiàn)在將其開源,原因是我們認(rèn)為它已經(jīng)非常有用和強(qiáng)大?!?/p>

2007年,谷歌把Go作為一個20%項目開始研發(fā),即讓員工抽出本職工作之外時間的20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發(fā)。

派克表示,編譯后Go代碼的運(yùn)行速度與C語言非常接近,而且編譯速度非常快,就像在使用一個交互式語言。現(xiàn)有編程語言均未專門對多核處理器進(jìn)行優(yōu)化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學(xué)者設(shè)計的,但學(xué)習(xí)使用它也不是非常困難。Go支持面向?qū)ο?,而且具有真正的閉包(closures)和反射 (reflection)等功能。

在學(xué)習(xí)曲線方面,派克認(rèn)為Go與Java類似,對于Java開發(fā)者來說,應(yīng)該能夠輕松學(xué)會 Go。之所以將Go作為一個開源項目發(fā)布,目的是讓開源社區(qū)有機(jī)會創(chuàng)建更好的工具來使用該語言,例如 Eclipse IDE中的插件。

在谷歌公開發(fā)布的所有網(wǎng)絡(luò)應(yīng)用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示“Go可以讓應(yīng)用完美的運(yùn)行在瀏覽器內(nèi)。”例如,使用Go可以更高效的實現(xiàn)Wave,無論是在前端還是后臺。

Go 同時具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對64位x64和32位x86計算機(jī)的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對ARM芯片和Android設(shè)備的支持。派克表示,“Android手機(jī)存在的問題是,我們一直沒有一個數(shù)學(xué)協(xié)處理器?!?/p>

如何將用go語言開發(fā)的服務(wù)器程序部署到docker

部署簡單。Go 編譯生成的是一個靜態(tài)可執(zhí)行文件,除了 glibc 外沒有其他外部依賴。這讓部署變得異常方便:目標(biāo)機(jī)器上只需要一個基礎(chǔ)的系統(tǒng)和必要的管理、監(jiān)控工具,完全不需要操心應(yīng)用所需的各種包、庫的依賴關(guān)系,大大減輕了維護(hù)的負(fù)擔(dān)。這和 Python 有著巨大的區(qū)別。由于歷史的原因,Python 的部署工具生態(tài)相當(dāng)混亂【比如 setuptools, distutils, pip, buildout 的不同適用場合以及兼容性問題】。官方 PyPI 源又經(jīng)常出問題,需要搭建私有鏡像,而維護(hù)這個鏡像又要花費(fèi)不少時間和精力。

并發(fā)性好。Goroutine 和 channel 使得編寫高并發(fā)的服務(wù)端軟件變得相當(dāng)容易,很多情況下完全不需要考慮鎖機(jī)制以及由此帶來的各種問題。單個 Go 應(yīng)用也能有效的利用多個 CPU 核,并行執(zhí)行的性能好。這和 Python 也是天壤之比。多線程和多進(jìn)程的服務(wù)端程序編寫起來并不簡單,而且由于全局鎖 GIL 的原因,多線程的 Python 程序并不能有效利用多核,只能用多進(jìn)程的方式部署;如果用標(biāo)準(zhǔn)庫里的 multiprocessing 包又會對監(jiān)控和管理造成不少的挑戰(zhàn)【我們用的 supervisor 管理進(jìn)程,對 fork 支持不好】。部署 Python 應(yīng)用的時候通常是每個 CPU 核部署一個應(yīng)用,這會造成不少資源的浪費(fèi),比如假設(shè)某個 Python 應(yīng)用啟動后需要占用 100MB 內(nèi)存,而服務(wù)器有 32 個 CPU 核,那么留一個核給系統(tǒng)、運(yùn)行 31 個應(yīng)用副本就要浪費(fèi) 3GB 的內(nèi)存資源。

良好的語言設(shè)計。從學(xué)術(shù)的角度講 Go 語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go 的設(shè)計是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎(chǔ)的程序員都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提高了團(tuán)隊協(xié)作的一致性。比如 gofmt 自動排版 Go 代碼,很大程度上杜絕了不同人寫的代碼排版風(fēng)格不一致的問題。把編輯器配置成在編輯存檔的時候自動運(yùn)行 gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有 gofix, govet 等非常有用的工具。

執(zhí)行性能好。雖然不如 C 和 Java,但通常比原生 Python 應(yīng)用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。

如何部署Golang應(yīng)用

如何部署Golang應(yīng)用

安裝supervisord

# 通過載入程式 ez_setup.py 來安裝。這個載入程式會聯(lián)網(wǎng)下載最新版本setuptools來安裝,同時也可以更新本地的setuptools。

wget :peak.telemunity./dist/ez_setup.py

sudo python ez_setup.py

# 更新setuptools:

sudo python ez_setup.py -U setuptools

# 安裝supervisor

easy_install supervisor

# 生成配置檔案

echo_supervisord_conf /etc/supervisord.conf

# 編輯配置檔案

vim /etc/supervisord.conf

# 進(jìn)入vim后找到最后兩行,開啟注釋(取消前面的分號),

# [include]

# files = supervisor.d/*.ini

# 將所有的supervisor配置都放到 /etc/supervisor.d目錄

mkdir /etc/supervisor.d

建立 supervisor 對應(yīng)程式的配置檔案

其中的一些路徑需要換成自己對應(yīng)的,這里將 zankbo 這個web 應(yīng)用放在了對應(yīng)的使用者目錄下

通過在生產(chǎn)伺服器上設(shè)定environment可以在程式里判斷是線上還是開發(fā)模式,如 zankbo 的 debug判斷

當(dāng)然也可已在啟動命令處加入引數(shù),如 mand = /home/zankbo/gopath/src/zankbo/zankbo -d 來關(guān)閉Debug模式。

if os.Getenv("APP_NAME") == "ZANKBO_PRODUCT" {

beego.RunMode = "prod"

}

vim /etc/supervisor.d/zankbo.ini

# 寫入

[program:zankbo]

directory = /home/zankbo/gopath/src/zankbo

environment=APP_NAME="ZANKBO_PRODUCT"

mand = /home/zankbo/gopath/src/zankbo/zankbo

autostart = true

startsecs = 5

user = zankbo

redirect_stderr = true

stdout_logfile = /home/zankbo/log/zankbo.log

建立對應(yīng)的使用者

useradd zankbo

# 將使用者加入到zankbo使用者組,Nginx以使用者執(zhí)行

usermod -a -G zankbo

# 更改使用者家目錄使用者組的許可權(quán),使Nginx可以訪問

chmod g+rx /home/zankbo

部署Go環(huán)境

其中的目錄為,go:Go安裝目錄 gopath:Go工作目錄,下面有src、pkg、bin三個目錄 log:日志資料夾

[zankbo@MyCloudServer ~]$ pwd

/home/zankbo

[zankbo@MyCloudServer ~]$ vim .bashrc

# 設(shè)定Go環(huán)境變數(shù),在.bashrc檔案末尾寫下如下內(nèi)容

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

export PATH=$PATH:$GOROOT/bin:$GOPATH/bi

# 切換到使用者家目錄

[root@MyCloudServer ~]# su - zankbo

[zankbo@MyCloudServer ~]$ ls

go gopath log

將專案程式碼放到gopath/src下面,如我的播客專案:

[zankbo@MyCloudServer ~]$ tree -L 2 gopath/src/

gopath/src/

├── github.

│ ├── astaxie

│ ├── beego

│ ├── go-sql-driver

│ ├── howeyc

│ ├── jacobsa

│ ├── *** artystreets

│ └── wendal

└── zankbo

├── admin

├── blog

├── build_pkg.sh

├── mon

├── conf

├── controllers

├── dbstruct.mwb

├── main.go

├── models

├── static

├── views

└── zankbo

匯入專案sql檔案到資料庫

在專案資料夾執(zhí)行build

[zankbo@MyCloudServer zankbo]$ pwd

/home/zankbo/gopath/src/zankbo

[zankbo@MyCloudServer zankbo]$ go build

會在專案下生成與包名對應(yīng)的可執(zhí)行檔案,這里為:zankbo,build的時候可能會遇到錯誤,比如mysql的密碼之類的,可根據(jù)提示排錯。

通過supervisor 來啟動服務(wù)

# supervisorctl start zankbo

配置Nginx

server {

listen 80;

server_name zankbo. zankbo.;

root /home/zankbo/gopath/src/zankbo;

error_log logs/zankbo..error.log warn ;

location /static/ {

root /home/zankbo/gopath/src/zankbo;

location ~ .*\.(js|css)$ {

aess_log off;

expires 1d;

}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

gzip off;

aess_log off;

expires 3d;

}

}

location / {

proxy_pass :127.0.0.1:8080;

}

}

如何部署thinkphp 應(yīng)用

1、首先在官方網(wǎng)站下載ThinkPHP最新版本。

2、下載后的壓縮檔案解壓到WEB目錄(或者任何目錄都可以),框架的目錄結(jié)構(gòu)為:

├─ThinkPHP.php 框架入口檔案

├─Common 框架公共檔案

├─Conf 框架配置檔案

├─Extend 框架擴(kuò)充套件目錄

├─Lang 核心語言包目錄

├─Lib 核心類庫目錄

│ ├─Behavior 核心行為類庫

│ ├─Core 核心基類庫

│ ├─Driver 內(nèi)建驅(qū)動

│ │ ├─Cache 內(nèi)建快取驅(qū)動

│ │ ├─Db 內(nèi)建資料庫驅(qū)動

│ │ ├─TagLib 內(nèi)建標(biāo)簽驅(qū)動

│ │ └─Template 內(nèi)建模板引擎驅(qū)動

│ └─Template 內(nèi)建模板引擎

└─Tpl 系統(tǒng)模板目錄

注意,框架的公共入口檔案ThinkPHP.php是不能直接執(zhí)行的,該檔案只能在專案入口檔案中呼叫才能正常執(zhí)行,這是很多新手很容易犯的一個錯誤。

3、接下來先在WEB根目錄下面建立一個app子目錄(這個就是app就是專案名),然后在該目錄下面建立一個index.php檔案,新增一行簡單的程式碼:

require '/ThinkPHP框架所在目錄/ThinkPHP.php';

這行程式碼的作用就是載入ThinkPHP框架的入口檔案ThinkPHP.php,這是所有基于ThinkPHP開發(fā)應(yīng)用的第一步。然后,在瀏覽器中訪問這個入口檔案。

如何部署應(yīng)用到was上

websphere的預(yù)設(shè)使用記憶體應(yīng)該是256的 你的38的war包部署 不應(yīng)該出現(xiàn)記憶體崩掉的問題呀。

部署系統(tǒng)也很簡單么,就是打成war包,記得打war包得時候要檢查web.xml的格式 websphere很在意這個東東的。

然后一步一步的部署就可以了。was慢 但是不會你那么慢得??梢再Nerror出來看看

如何部署python3 的應(yīng)用

mod_python,這是apache內(nèi)建的模組,很嚴(yán)重的依賴于mod_python編譯使用的python版本,和apache配套使用,不推薦

cgi,這個太old,不推薦,而且nginx不支援cgi方式,只能用ligd或者apache

fastcgi ,這個是目前流行最廣的做法,通過flup模組來支援的,在nginx里對應(yīng)的配置指令是 fastcgi_pass

spawn-fcgi,這個是fastcgi多程序管理程式,ligd安裝包附帶的,和

flup效果一樣,區(qū)別是flup是

python程式碼級引入,spawn-fcgi是外部程式。spawn-fcgi用途很廣,可以支援任意語言開發(fā)的代

碼,php,python,perl,只要你程式碼實現(xiàn)了fastcgi介面,它都可以幫你管理你的程序

scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi協(xié)議很簡單,我覺得和fastcgi差不多,只是沒有怎么推廣開來,nginx對應(yīng)的配置指令是scgi_pass,你想用就用,flup也支援。

,nginx使用proxy_pass轉(zhuǎn)發(fā),這個要求后端appplication必須內(nèi)建一個能處理高并發(fā)的 server,在python的web框架當(dāng)中,只能選擇tornado.

python程式設(shè)計師喜歡發(fā)明輪子,tornado除了是一個web framework之外,它還可以單獨提供高效能

server,所以,如果你采用其他python框架寫程式碼,比如說bottle,也一樣可以通過import

tornado 來啟動一個高效能的

server,同樣的可以采用協(xié)議和nginx一起來部署。擴(kuò)充套件開來,python包里面能處理高并發(fā)的

server還有很多,比如說gevent,也可以被其他框架引用來支援方式部署。

現(xiàn)實當(dāng)中,用java來做web程式,通常就用和nginx配合,應(yīng)用伺服器選擇tomcat或者jetty

uwsgi,包括4部分組成,

nginx從0.8.4開始內(nèi)建支援uwsgi協(xié)議,uwsgi協(xié)議非常簡單,一個4個位元組header+一個body,body可以是很多協(xié)議的

包,比如說,cgi等(通過header里面欄位標(biāo)示),我曾經(jīng)做個一個小規(guī)模的效能對比測試,結(jié)果表明,uwsgi和fastcgi相比,效能

沒有太明顯的優(yōu)勢,也可能是資料集較小的原因

uwsgi的特點在于自帶的程序控制程式.它是用c語言編寫,使用natvie函式,其實和spawn-fcgi/php-fpm類似。所以uwsgi可以支援多種應(yīng)用框架,包括(python,lua,ruby,erlang,go)等等

uwsgi協(xié)議

web server內(nèi)建支援協(xié)議模組

application伺服器協(xié)議支援模組

程序控制程式

Gunicorn,和uwsgi類似的工具,從rails的部署工具(Unicorn)移植過來的。但是它使用的協(xié)議是 WSGI,全稱是Python Web Server Gateway Interface ,這是python2.5時定義的官方標(biāo)準(zhǔn)(PEP 333 ),根紅苗正,而且部署比較簡單,:gunicorn./ 上有詳細(xì)教程

mod_wsgi,apache的一個module,也是支援WSGI協(xié)議,:code.google./p/modwsgi/

如何部署簡單python + flask應(yīng)用

python是一款應(yīng)用非常廣泛的指令碼程式語言,谷歌公司的網(wǎng)頁就是用python編寫。python在生物資訊、統(tǒng)計、網(wǎng)頁制作、計算等多個領(lǐng)域都體現(xiàn)出了強(qiáng)大的功能。python和其他指令碼語言如java、R、Perl 一樣,都可以直接在命令列里執(zhí)行指令碼程式。

所需工具:

python3.4

flask

nginx

gunicorn

supervisor

系統(tǒng)環(huán)境:

Ubuntu 14.04LTS

我們先寫一個最基本的flask應(yīng)用:

demo.py

from flask import Flask

app = Flask(**name**)

@app.route('\')

def index():

return 'Hello World.'

if __name__ == __main__:

app.run()

執(zhí)行這個py檔案,開啟瀏覽器訪問127.0.0.1:5000就能看到顯示Hello World的頁面 .

如果讓這個flask引用監(jiān)聽來自公網(wǎng)ip的請求,理論上你跑此程式的機(jī)器就相當(dāng)于一個伺服器了,然而這個伺服器并不完美,所以我們需要nginx和gunicorn來增加它的功能,讓它真刀真槍上生產(chǎn)環(huán)境的時候能按要求執(zhí)行。

flask自帶的WSGI框架效能很差勁,只能適用于開發(fā)環(huán)境除錯使用。我們用專業(yè)一點的gunicorn(還有很多其他優(yōu)秀的框架)替代flask自帶的WSGI框架。

配置完后,通過命令’/usr/local/bin/gunicorn -b127.0.0.1:5000‘啟動應(yīng)用。開啟瀏覽器訪問127.0.0.1:5000,同樣能夠得到返回頁面

然而gunicorn也僅僅是一個python的WSGI框架而已,要讓它真正處理來自網(wǎng)際網(wǎng)路的各類訪問功能還是有點欠缺,這時候就需要用到大名鼎鼎的nginx 伺服器來替gunicorn遮風(fēng)擋雨了。

Ubuntu下安裝nginx可以用命令

sudo apt-get install nginx

安裝后需要進(jìn)行下配置:

cd /etc/nginx/sites-available

sudo vi test (test為配置名稱,可以根據(jù)自己專案進(jìn)行命名)

test檔案的配置為:

server {

listen 80; # 監(jiān)聽80埠

location / {

proxy_pass :127.0.0.1:5000; # 代理本機(jī)127.0.0.1:5000的服務(wù)

}

location /static {

alias /home/ubuntu/myproject/myblog/app/static; # 負(fù)載均衡

}

}

cd ..

cd sites-enable

sudo ln -s ../sites-available/lwhile . (建立軟連結(jié),別漏掉最后的.)

sudo service nginx reload

sudo service nginx restart

這樣nginx的基本配置檔案就寫好了 接下來我們配置程序管理工具supervisor supervisor可以在后面啟動你的python程序,這樣很方便

1.cd /etc/supervisor/conf.d

2.sudo vi test.conf (test為檔名)

[program:test]

mand = /usr/local/bin/gunicorn -b127.0.0.1:5000 /home/ubuntu/myproject/test.py

3.sudo supervisorctl

4.reload

5.start test

如果一切正常,做完這所有步驟之后,現(xiàn)在公網(wǎng)的ip訪問你的主機(jī),就可以開啟你的flask應(yīng)用了

python是一款應(yīng)用非常廣泛的指令碼程式語言,谷歌公司的網(wǎng)頁就是用python編寫。python在生物資訊、統(tǒng)計、網(wǎng)頁制作、計算等多個領(lǐng)域都體現(xiàn)出了強(qiáng)大的功能。python和其他指令碼語言如java、R、Perl 一樣,都可以直接在命令列里執(zhí)行指令碼程式。工具/原料

python;CMD命令列;windows作業(yè)系統(tǒng)

方法/步驟

1、首先下載安裝python,建議安裝2.7版本以上,3.0版本以下,由于3.0版本以上不向下相容,體驗較差。

2、開啟文字編輯器,推薦editplus,notepad等,將檔案儲存成 .py格式,editplus和notepad支援識別python語法。

指令碼第一行一定要寫上 #!usr/bin/python

表示該指令碼檔案是可執(zhí)行python指令碼

如果python目錄不在usr/bin目錄下,則替換成當(dāng)前python執(zhí)行程式的目錄。

3、編寫完指令碼之后注意除錯、可以直接用editplus除錯。除錯方法可自行百度。指令碼寫完之后,開啟CMD命令列,前提是python 已經(jīng)被加入到環(huán)境變數(shù)中,如果沒有加入到環(huán)境變數(shù),請百度

4、在CMD命令列中,輸入 “python” + “空格”,即 ”python “;將已經(jīng)寫好的指令碼檔案拖拽到當(dāng)前游標(biāo)位置,然后敲回車執(zhí)行即可。

Golang項目部署3,容器部署

容器部署即使用 docker 化部署 golang 應(yīng)用程序,這是在云服務(wù)時代最流行的部署方式,也是最推薦的部署方式。

跨平臺交叉編譯是 golang 的特點之一,可以非常方便地編譯出我們需要的目標(biāo)服務(wù)器平臺的版本,而且是靜態(tài)編譯,非常容易地解決了運(yùn)行依賴問題。

使用以下指令可以靜態(tài)編譯 Linux 平臺 amd64 架構(gòu)的可執(zhí)行文件:

生成的 main 便是我們靜態(tài)編譯的,可部署于 Linux amd64 上的可執(zhí)行文件。

我們需要將該可執(zhí)行文件 main 編譯生成 docker 鏡像,以便于分發(fā)及部署。 Golang 的運(yùn)行環(huán)境推薦使用 alpine 基礎(chǔ)系統(tǒng)鏡像,編譯出的容器鏡像約為 20MB 左右。

一個參考的 Dockerfile 文件如下:

其中,我們的基礎(chǔ)鏡像使用了 loads/alpine:3.8 ,中國國內(nèi)的用戶推薦使用該基礎(chǔ)鏡像,基礎(chǔ)鏡像的 Dockerfile 地址: ,倉庫地址:

隨后使用 " docker build -t main . " 指令編譯生成名為 main 的 docker 鏡像。

需要注意的是,在某些項目的架構(gòu)設(shè)計中, 靜態(tài)文件 和 配置文件 可能不會隨著鏡像進(jìn)行編譯發(fā)布,而是分開進(jìn)行管理和發(fā)布。

例如,使用 MVVM 模式的項目中(例如使用 vue 框架),往往是前后端非常獨立的,因此在鏡像中往往并不會包含 public 目錄。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的項目中,也往往并不需要 config 目錄。

因此對于以上示例的 Dockerfile 的使用,僅作參考,根據(jù)實際情況請進(jìn)行必要的調(diào)整。

使用以下指令可直接運(yùn)行剛才編譯成的鏡像:

容器的分發(fā)可以使用 docker 官方的平臺: ,國內(nèi)也可以考慮使用阿里云: 。

在企業(yè)級生產(chǎn)環(huán)境中, docker 容器往往需要結(jié)合 kubernetes 或者 docker swarm 容器編排工具一起使用。

容器編排涉及到的內(nèi)容比較多,感興趣的同學(xué)可以參考以下資料:

網(wǎng)站標(biāo)題:go語言中文網(wǎng)部署 go語言app
文章源于:http://muchs.cn/article4/dosdjie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、用戶體驗、品牌網(wǎng)站設(shè)計、標(biāo)簽優(yōu)化域名注冊、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司