容器部署即使用 docker 化部署 golang 應(yīng)用程序,這是在云服務(wù)時(shí)代最流行的部署方式,也是最推薦的部署方式。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)海東,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
跨平臺交叉編譯是 golang 的特點(diǎn)之一,可以非常方便地編譯出我們需要的目標(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 鏡像。
需要注意的是,在某些項(xiàng)目的架構(gòu)設(shè)計(jì)中, 靜態(tài)文件 和 配置文件 可能不會隨著鏡像進(jìn)行編譯發(fā)布,而是分開進(jìn)行管理和發(fā)布。
例如,使用 MVVM 模式的項(xiàng)目中(例如使用 vue 框架),往往是前后端非常獨(dú)立的,因此在鏡像中往往并不會包含 public 目錄。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的項(xiàng)目中,也往往并不需要 config 目錄。
因此對于以上示例的 Dockerfile 的使用,僅作參考,根據(jù)實(shí)際情況請進(jìn)行必要的調(diào)整。
使用以下指令可直接運(yùn)行剛才編譯成的鏡像:
容器的分發(fā)可以使用 docker 官方的平臺: ,國內(nèi)也可以考慮使用阿里云: 。
在企業(yè)級生產(chǎn)環(huán)境中, docker 容器往往需要結(jié)合 kubernetes 或者 docker swarm 容器編排工具一起使用。
容器編排涉及到的內(nèi)容比較多,感興趣的同學(xué)可以參考以下資料:
如何部署Golang應(yīng)用
安裝supervisord
# 通過載入程式 ez_setup.py 來安裝。這個載入程式會聯(lián)網(wǎng)下載最新版本setuptools來安裝,同時(shí)也可以更新本地的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的時(shí)候可能會遇到錯誤,比如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包得時(shí)候要檢查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,只要你程式碼實(shí)現(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è)計(jì)師喜歡發(fā)明輪子,tornado除了是一個web framework之外,它還可以單獨(dú)提供高效能
server,所以,如果你采用其他python框架寫程式碼,比如說bottle,也一樣可以通過import
tornado 來啟動一個高效能的
server,同樣的可以采用協(xié)議和nginx一起來部署。擴(kuò)充套件開來,python包里面能處理高并發(fā)的
server還有很多,比如說gevent,也可以被其他框架引用來支援方式部署。
現(xiàn)實(shí)當(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的特點(diǎn)在于自帶的程序控制程式.它是用c語言編寫,使用natvie函式,其實(shí)和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時(shí)定義的官方標(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)計(jì)、網(wǎng)頁制作、計(jì)算等多個領(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)境的時(shí)候能按要求執(zhí)行。
flask自帶的WSGI框架效能很差勁,只能適用于開發(fā)環(huán)境除錯使用。我們用專業(yè)一點(diǎn)的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)路的各類訪問功能還是有點(diǎn)欠缺,這時(shí)候就需要用到大名鼎鼎的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)計(jì)、網(wǎng)頁制作、計(jì)算等多個領(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版本以上不向下相容,體驗(yàn)較差。
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í)行即可。
部署簡單。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)不少時(shí)間和精力。
并發(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)用的時(shí)候通常是每個 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è)計(jì)。從學(xué)術(shù)的角度講 Go 語言其實(shí)非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go 的設(shè)計(jì)是非常優(yōu)秀的:規(guī)范足夠簡單靈活,有其他語言基礎(chǔ)的程序員都能迅速上手。更重要的是 Go 自帶完善的工具鏈,大大提高了團(tuán)隊(duì)協(xié)作的一致性。比如 gofmt 自動排版 Go 代碼,很大程度上杜絕了不同人寫的代碼排版風(fēng)格不一致的問題。把編輯器配置成在編輯存檔的時(shí)候自動運(yùn)行 gofmt,這樣在編寫代碼的時(shí)候可以隨意擺放位置,存檔的時(shí)候自動變成正確排版的代碼。此外還有 gofix, govet 等非常有用的工具。
執(zhí)行性能好。雖然不如 C 和 Java,但通常比原生 Python 應(yīng)用還是高一個數(shù)量級的,適合編寫一些瓶頸業(yè)務(wù)。內(nèi)存占用也非常省。
文章名稱:go語言如何部署 go語言部署到centos
瀏覽地址:http://chinadenli.net/article14/dogshge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站收錄、電子商務(wù)、營銷型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)