成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何在 virtualenv 環(huán)境下搭建 Python Web

roland_reed / 1447人閱讀

摘要:生產(chǎn)環(huán)境下,自帶的服務(wù)器,無(wú)法滿足性能要求。配置前面我們已經(jīng)在系統(tǒng)環(huán)境下安裝了安裝好的二進(jìn)制文件放在文件夾下,接下來(lái)使用來(lái)管理。參考文章探針安裝部署部署筆記在生產(chǎn)環(huán)境上部署使用詳解本文系工程師編譯整理。

由于字?jǐn)?shù)的限制,其實(shí)本篇文章的全標(biāo)題為 《如何在 virtualenv 環(huán)境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》

在這篇文章里,我們將搭建一個(gè)簡(jiǎn)單的 Web 應(yīng)用,在虛擬環(huán)境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理進(jìn)程,然后使用 OneAPM Python 探針來(lái)監(jiān)測(cè)應(yīng)用性能,形成一個(gè)「閉環(huán)」 !希望能對(duì)大家有所幫助,首先簡(jiǎn)單來(lái)介紹一下環(huán)境:

系統(tǒng)環(huán)境:ubuntu 14.04 Python 2.7.6

安裝組件庫(kù)

第一步安裝所需要的存儲(chǔ)庫(kù),因?yàn)榇蛩阌玫教摂M環(huán)境,用到 pip 安裝和管理 Python 組件,所以先更新本地包,然后安裝組件:

sudo apt-get update
sudo apt-get install python-pip python-dev nginx
創(chuàng)建虛擬環(huán)境 virtualenv

在一個(gè)系統(tǒng)中創(chuàng)建不同的 Python 隔離環(huán)境,相互之間還不會(huì)影響,為了使系統(tǒng)保持干凈,遂決定用 virtualenv 跑應(yīng)用程序,創(chuàng)建一個(gè)容易識(shí)別的目錄,開始安裝,再創(chuàng)建項(xiàng)目目錄 super,然后激活環(huán)境:

sudo pip install virtualenv
mkdir ~/supervisor && cd ~/supervisor
virtualenv super
source super/bin/activate
安裝 Flask 框架

好了,現(xiàn)在在虛擬環(huán)境里面,開始安裝 Flask 框架,flask 依賴兩個(gè)庫(kù) werkzeug 和 jinjia2, 采用 pip 方式安裝即可, pip 是一個(gè)重要的工具,Python 用它來(lái)管理包:

pip install flask

先用 Flask 寫一個(gè)簡(jiǎn)單的 Web 服務(wù) myweb.py ,因?yàn)楹竺嬉鲆恍y(cè)試,所以設(shè)置了幾個(gè)請(qǐng)求:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
    return "hello world  supervisor gunicorn "
@app.route("/1")
def index1():
    return "hello world  supervisor gunicorn  ffffff"
@app.route("/qw/1")
def indexqw():
    return "hello world  supervisor gunicorn fdfdfbdfbfb "
if __name__ == "__main__":
    app.debug = True
    app.run()

啟動(dòng) Flask 看看!

python myweb.py

在瀏覽器中訪問(wèn) http://127.0.0.1:5000 就可以看到了「幾個(gè)路徑都試一試」

用 Gunicorn 部署 Python Web

現(xiàn)在我們使用 Flask 自帶的服務(wù)器,完成了 Web 服務(wù)的啟動(dòng)。生產(chǎn)環(huán)境下,F(xiàn)lask 自帶的服務(wù)器,無(wú)法滿足性能要求。所以我們這里采用 Gunicorn 做 wsgi 容器,用來(lái)部署 Python,首先還是安裝 Gunicorn:

pip install gunicorn

當(dāng)我們安裝好 Gunicorn 之后,需要用 Gunicorn 啟動(dòng) Flask,F(xiàn)lask 用自帶的服務(wù)器啟動(dòng)時(shí),F(xiàn)lask 里面的 name 里面的代碼啟動(dòng)了 app.run()。而這里我們使用 Gunicorn,myweb.py 就等同于一個(gè)庫(kù)文件,被 Gunicorn 調(diào)用,這樣啟動(dòng):

gunicorn -w 4 -b 0.0.0.0:8000 myweb:app

其中 myweb 就是指 myweb.py,app 就是那個(gè) wsgifunc 的名字,這樣運(yùn)行監(jiān)聽 8000 端口,原先的 5000 端口并沒有啟用,-w 表示開啟多少個(gè) worker,-b 表示 Gunicorn 開發(fā)的訪問(wèn)地址。

想要結(jié)束 Gunicorn 只需執(zhí)行 pkill Gunicorn,但有時(shí)候還要 ps 找到 pid 進(jìn)程號(hào)才能 kill??墒沁@對(duì)于一個(gè)開發(fā)來(lái)說(shuō),太過(guò)于繁瑣,因此出現(xiàn)了另外一個(gè)神器 ---supervisor,一個(gè)專門用來(lái)管理進(jìn)程的工具,還可以管理系統(tǒng)的工具進(jìn)程。

安裝 Supervisor
pip install supervisor
echo_supervisord_conf > supervisor.conf  # 生成 supervisor 默認(rèn)配置文件
gedit  supervisor.conf                   # 修改 supervisor 配置文件,添加 gunicorn 進(jìn)程管理


在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的項(xiàng)目目錄」


[program:myweb]
command=/home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myweb:app                                                                     
directory=/home/wang/supervisor                                             
startsecs=0                                                                   
stopwaitsecs=0                                                                  
autostart=false                                                                
autorestart=false                                                                 
user=wang                                                                     
stdout_logfile=/home/wang/supervisor/log/gunicorn.log                  
stderr_logfile=/home/wang/supervisor/log/gunicorn.err

supervisor 的基本使用命令:

supervisord -c supervisor.conf    
supervisorctl -c supervisor.conf status                  查看supervisor的狀態(tài)                                      
supervisorctl -c supervisor.conf reload                  重新載入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname]   啟動(dòng)指定/所有 supervisor 管理的程序進(jìn)程
supervisorctl -c supervisor.conf stop [all]|[appname]    關(guān)閉指定/所有 supervisor 管理的程序進(jìn)程

supervisor 還有一個(gè) web 的管理界面,可以激活。更改下配置:

[inet_http_server]     ; inet (TCP) server disabled by default
port=127.0.0.1:9001    ; (ip_address:port specifier, *:port for alliface)
username=wang          ; (default is no username (open server)
password=123           ; (default is no password (open server))

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9001       ; use an http:// url to specify an inet socket
username=wang                         ; should be same as http_username if set
password=123                          ; should be same as http_password if set
;prompt=mysupervisor                  ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history           ; use readline history if available

現(xiàn)在可以使用 supervsior 啟動(dòng) gunicorn 啦。運(yùn)行命令:

supervisord -c supervisor.conf

瀏覽器訪問(wèn) http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,訪問(wèn) http://127.0.0.1:8000 可以看見 gunicorn 啟動(dòng)的返回的頁(yè)面。

配置 Nginx

前面我們已經(jīng)在系統(tǒng)環(huán)境下安裝了 Nginx, 安裝好的 Nginx 二進(jìn)制文件放在 /usr/sbin/ 文件夾下,接下來(lái)使用 Supervisor 來(lái)管理 Nginx。這里需要注意一個(gè)問(wèn)題,權(quán)限問(wèn)題。Nginx 是 sudo 的方式安裝,啟動(dòng)的適合也是 root 用戶,那么我們現(xiàn)在也需要用 root 用戶啟動(dòng) supervisor。在 supervisor.conf 下添加配置文件:

[program:nginx]
command=/usr/sbin/nginx
startsecs=0
stopwaitsecs=0
autostart=false
autorestart=false
stdout_logfile=/home/wang/supervisor/log/nginx.log
stderr_logfile=/home/wang/supervisor/log/nginx.err 

好了,都配置完之后,啟動(dòng) supervisor:

supervisord -c supervisor.conf

訪問(wèn)頁(yè)面,也可以用 ab 進(jìn)行壓力測(cè)試:

ab -c 100 -n 100 http://127.0.0.1:8000/qw/1

-c 用于指定壓力測(cè)試的并發(fā)數(shù), -n 用于指定壓力測(cè)試總共的執(zhí)行次數(shù)。

安裝 Python 探針

搭建好了 web,想實(shí)時(shí)監(jiān)控應(yīng)用數(shù)據(jù),有什么好的工具,用 OneAPM 的 Python 探針試試,
首先也是安裝 Python 探針:

pip install -i http://pypi.oneapm.com/simple --upgrade blueware

根據(jù) License Key 生成配置文件:

blueware-admin generate-config (License Key)?=?blueware.ini

由于是在虛擬環(huán)境下,所以要特別注意路徑,修改 supervisor.conf 里面兩項(xiàng):

[program:myapp]
command = /home/wang/supervisor/super/bin/blueware-admin run-program /home/wang/supervisor/super/bin/gunicorn -w 4 -b 0.0.0.0:8000 myapp:app
environment = BLUEWARE_CONFIG_FILE=blueware.ini

重啟應(yīng)用

supervisorctl    # 進(jìn)入命令行
supervisor>  reload    # 重新加載

向上面一樣訪問(wèn)頁(yè)面,也可以用 ab 進(jìn)行壓力測(cè)試
幾分鐘后有下圖,可以看到頁(yè)面加載時(shí)間,web 事物,頁(yè)面吞吐量,其中后面是設(shè)置自定義事物「Business Transaction」。



參考文章

How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 14.04

OneAPM Python 探針安裝

python web 部署:nginx + gunicorn + supervisor + flask 部署筆記

Tornado+nginx+supervisor 在生產(chǎn)環(huán)境上部署

supervisor + Tornado + Nginx 使用詳解

本文系 OneAPM 工程師編譯整理。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM 官方博客。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39192.html

相關(guān)文章

  • 如何 virtualenv 環(huán)境搭建 Python Web

    摘要:生產(chǎn)環(huán)境下,自帶的服務(wù)器,無(wú)法滿足性能要求。配置前面我們已經(jīng)在系統(tǒng)環(huán)境下安裝了安裝好的二進(jìn)制文件放在文件夾下,接下來(lái)使用來(lái)管理。參考文章探針安裝部署部署筆記在生產(chǎn)環(huán)境上部署使用詳解本文系工程師編譯整理。 由于字?jǐn)?shù)的限制,其實(shí)本篇文章的全標(biāo)題為 《如何在 virtualenv 環(huán)境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》...

    godiscoder 評(píng)論0 收藏0
  • web.py源碼分析: 模板(1)

    摘要:模板函數(shù)到底長(zhǎng)什么樣下面我們就可以來(lái)看看模板函數(shù)到底長(zhǎng)什么樣了。當(dāng)然,首先得創(chuàng)建一個(gè)模板文件??偨Y(jié)通過(guò)打印中間結(jié)果和分析代碼,我們已經(jīng)大概知道了的模板是如何轉(zhuǎn)化成內(nèi)容的。下一篇文章會(huì)闡述模板的各種語(yǔ)法所對(duì)應(yīng)的動(dòng)態(tài)函數(shù)內(nèi)容。 web.py模板的實(shí)現(xiàn)原理 web.py的模板實(shí)現(xiàn)利用了Python的可執(zhí)行對(duì)象的動(dòng)態(tài)特性:根據(jù)模板內(nèi)容和渲染函數(shù)的參數(shù)創(chuàng)建一個(gè)函數(shù),該函數(shù)執(zhí)行的時(shí)候會(huì)返回一個(gè)Te...

    Rocko 評(píng)論0 收藏0
  • Python爬蟲建站入門手記——從零開始建立采集站點(diǎn)(一:環(huán)境搭建

    摘要:從今天起,我將在這里更新一個(gè)系列的簡(jiǎn)單爬蟲到建立網(wǎng)站的實(shí)踐手記。內(nèi)容將會(huì)從最簡(jiǎn)單的開始,環(huán)境搭建,基本爬蟲,入庫(kù),用建立可供用戶訪問(wèn)的網(wǎng)站,網(wǎng)站部署。第一部分,買,裝環(huán)境。我們爬蟲站點(diǎn)的所有文件都放在里面。 從今天起,我將在這里更新一個(gè)系列的python簡(jiǎn)單爬蟲到建立網(wǎng)站的實(shí)踐手記。 內(nèi)容將會(huì)從最簡(jiǎn)單的開始,環(huán)境搭建,基本爬蟲,入庫(kù),用Django建立可供用戶訪問(wèn)的網(wǎng)站,網(wǎng)站部署。 ...

    HackerShell 評(píng)論0 收藏0
  • 搭建Python Jupyter Notebook教程

    摘要:原來(lái)叫做,后來(lái)改名為,意思是,囊括了三大數(shù)據(jù)科學(xué)語(yǔ)言。文學(xué)化編程支持編程模式,代碼和正文有機(jī)交融在一起,在代碼可運(yùn)行結(jié)果可見的情況下又很好地保留了研究邏輯,非常便于交流。在安裝過(guò)程中,我們使用來(lái)對(duì)做環(huán)境隔離。 Jupyter原來(lái)叫做IPython,后來(lái)改名為Jupyter,意思是Julia+Python+R,囊括了三大數(shù)據(jù)科學(xué)語(yǔ)言。Jupyter編程環(huán)境具有以下兩個(gè)特點(diǎn): 中心化工作...

    lavor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<