1. 後綴名為『wsgi』的文件是什麼文件在python中可以作為模塊導入嗎
你用任何的文本編輯器打開看看,如果是python的script,就可以用python導入。
後綴是wsgi的一般是用python寫的wsgi程序。
2. 新浪雲怎麼部署 python flask
首先安裝python,這個我就不多說了,記得配置好系統的環境變數,python和python包(Scripts目錄)都要加入系統的環境變數。
接下來就pip安裝flask,windows下的命令為:
$ pip install flask
接下來創建一個文件夾,就是你將來整個工程的文件。通過cmd命令進入到這個文件夾中。(cd命令)
然後在這個文件夾中創建一個python文件,py為後綴的文件。
接下來編輯這個文件(文本編輯器、IDE都可以)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '
Hello World!
'
if __name__ == '__main__':
app.run(debug = True)
寫入代碼就可以簡單的啟動伺服器了,默認根目錄下返回「hello,world!」,如何運行的就只需要在cmd中運行
$ python myapp.py
運行成功的話可以看到下圖的提示。
訪問localhost:5000的時候(默認埠5000,可以通過host參數修改),例如
app.run(debug=True,host='0.0.0.0:5000')
基本上這樣完成了flask的基本配置,接下來就是將其放到新浪雲SAE上,SAE本身就支持flask框架的部署,但是後期我們需要引入其他的一些第三方的包,因此最好就是講自己的包放到工程文件中調用。
方法就是在使用pip安裝的時候,使用這樣子的命令:
$ pip install -t vendor PACKAGENAME
這個樣子在本地安裝的時候就會將包放在一個vendor文件夾中,然後安裝SAE官方的文檔,在工程文件中添加一個名為「index.wsgi」的文件,內容為:
import sae
sae.add_vendor_dir('vendor')
from myapp import app
application = sae.create_wsgi_app(app)
這樣子基本就完成了,只需要講文件上傳到SAE上就可以完成部署。
SAE上的操作記得在新建應用的時候選擇python2.7,然後我用的代碼管理方式是git。
接下來的方式就是git的內容了,這里我就不多說,寫下幾個命令:
將倉庫的內容復制到本地
$git clone 你的git倉庫地址
創建分支
$git branck 分支名
使用分支
$git checkout 分支名
修改代碼
$git add --all
$git commit -a "注釋"
$git pust 分支名
(以前都是用svn的所以git還不是特別熟)
部署上傳完代碼之後就可以好好折騰啦
3. 如何在CentOS6上安裝Python2.7和Python3.3-Python
CentOS 6自帶了Python 2.6.6(CentOS 7則自帶了Python 2.7)和一些非常好用的功能,如yum。但是,注意不要隨便升級自帶的Python以免yum不可用。 新版本將安裝在/usr/local目錄下以避免和自帶的版本沖突。
雖然「我」只在64位的CentOS 6.5進行了嘗試,但該教程應該適用於所有的CentOS 6版本(本人按此教程在CentOS 7上亦成功安裝Python3.4)。
下
面的示例命令您最好以root身份運行或者在命令前加sudo賦予許可權。但注意,若不是以root身份執行的話,make 與make
install最好分開執行,並且都在前面加sudo,連著寫,如sudo make && make install的話會在make
install過程中報許可權不足問題,因為sudo不作用於&&後面的make install。
安裝前准備
編
譯Python之前您最好先安裝一系列的開發工具和一些拓展庫,雖然不是必須的,但這樣Python才能依賴這些工具和拓展庫展示它強悍的功能。下面是利
用yum進行工具和拓展庫安裝的示例命令,直接執行即可(注意部分命令顯示不全,但可以通過移動游標查看和復制)。
yumgroupinstall"Development tools"
yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel
該考慮的因素
在您編譯和安裝Python之前,有些東西您是應該知道或考慮的。如下。
Unicode編碼
Python
編碼問題歷史悠久,但不用過多關注,知道它目前支持Unicode編碼即可(Python3中默認的)。考慮到兼容性等原因,除非有特殊的理由,您最好配
置下Python 3.2和更早的版本,使其支持UTF-32編碼,雖然會增加小小的內存代價。在Python
2.7中您可以通過在configure時添加選項--enable-unicode=ucs4 進行配置,而在Python 3.2中是--with-wide-unicode選項。
Shared library(動態共享庫)
目
前大部分的linux系統自帶的Python都是以共享庫的方式編譯的,
此外,某些第三方工具例如mod_wsgi和Blender,沒有Python的共享庫還運行不了,所以,您最好還是把Python編譯成動態共享庫吧。
為了以共享庫方式編譯Python,您必須指明共享庫的路徑。您有兩種選擇:
在configure命令後面添加:LDFLAGS="-Wl,-rpath /usr/local/lib"從而將庫路徑直接編譯進Python中。
以記事本方式打開 /etc/ld.so.conf ,然後在文件最後添加新行:/usr/local/lib 。緊接著運行命令 /sbin/ldconfig 更新動態鏈接器。 添加後的文件內容在CentOS 6.5 如下:
/etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib
使用 「make altinstall」 而不是make install
切記,在安裝自定義版本的Python時,make altinstall命令是必須的!如果您使用一般的 make install命令,呵呵,您將會在解壓編譯的目錄下看到兩個命名一樣但版本不同的python,這有可能會導致一些意想不到的bug哦,具體是什麼作者沒說,我也不知道。
下載,編譯,安裝Python
如下命令可用於下載、編譯和安裝Python。注意,如果您打算安裝後手動修改/etc/ld.so.conf文件以更新動態鏈接器,那麼下面的 LDFLAGS 參數您就可以去掉了。
# Python 2.7.6:
wgethttp://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tarxfPython-2.7.6.tar.xz
cdPython-2.7.6
./configure--prefix=/usr/local--enable-unicode=ucs4--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
# Python 3.3.5:
wgethttp://python.org/ftp/python/3.3.5/Python-3.3.5.tar.xz
tarxfPython-3.3.5.tar.xz
cdPython-3.3.5
./configure--prefix=/usr/local--enable-sharedLDFLAGS="-Wl,-rpath /usr/local/lib"
make&&makealtinstall(此處切記,要麼以root運行,要麼分開執行!)
執行上述命令之後,您可以在/usr/local/bin/python2.7或 /usr/local/bin/python3.3中找到新安裝的Python。而Python 2.6.6則可能在/usr/bin/python, /usr/bin/python2或 /usr/bin/python2.6找到。
下載和安裝Setuptools + pip
Setuptools早已取代 Distribute成為Python官方的拓展包管理器,以用於從Python Package Index安裝拓展功能包。 不同版本的Python需要的Setuptools版本不同。建議您也通過Setuptools安裝 pip,它提供了一些額外在安裝拓展功能包時很有用的功能。
以下的命令可用於安裝最新版Setuptools 和 pip。
# First get the setup script for Setuptools:
wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
# Then install it for Python 2.7 and/or Python 3.3:
python2.7ez_setup.py
python3.3ez_setup.py
# Now install pip using the newly installed setuptools:
easy_install-2.7pip
easy_install-3.3pip
# With pip installed you can now do things like this:
pip2.7install[packagename]
pip2.7install--upgrade[packagename]
pip2.7uninstall[packagename]
安裝的拓展功能包在/usr/local/lib/pythonX.Y/site-packages/中可以找到(X.Y是Python的版本號)。
接下來幹嘛?
如果您使用 Python 2.7,強烈建議您安裝virtualenv並學會使用它,它可用於創建獨立的 Python 環境。如果您使用 Python 3.3的話就可以省心些,它已被內置了。
不
同的 Python 運行環境(也叫沙盒) 可以有自己的 Python
版本和拓展功能包,就是說不同的Python安裝和運行的目錄不同,也可以為每個版本的Python安裝對應的名稱一樣但版本不同的拓展包。
這在開發多個功能不同的項目或在同一個項目中需要用到不同版本的Python是會很有用的。
創建您第一個獨立的Python環境
# Install virtualenv for Python 2.7 and create a sandbox called my27project:
pip2.7installvirtualenv
virtualenv-2.7my27project
# Use the built-in pyvenv program in Python 3.3 to create a sandbox called my33project:
pyvenv-3.3my33project
# Check the system Python interpreter version:
python--version
# This will show Python 2.6.6
# Activate the my27project sandbox and check the version of the default Python interpreter in it:
sourcemy27project/bin/activate
python--version
# This will show Python 2.7.6
deactivate
# Activate the my33project sandbox and check the version of the default Python interpreter in it:
sourcemy33project/bin/activate
python--version
# This will show Python 3.3.5
deactivate
4. 如何使用WSGI部署Django
如何使用Apache 和mod_wsgi 部署Django¶
用Apache 和 mod_wsgi 部署Django項目是一個第三方的,測試的方法來得到Django生產環境。
mod_wsgi是一個Apache模塊,可以託管任何Python WSGI應用程序,包括Django。Django將與支持mod_wsgi的任何版本的Apache一起工作。
官方mod_wsgi文檔是太棒了!它是所有關於如何使用mod_wsgi的細節的來源。您可能需要先從安裝和配置文檔開始。
Basic configuration¶
一旦您安裝並激活了mod_wsgi,請編輯Apache伺服器的httpd.conf文件並添加以下內容。如果你的Apache版本低於2.4, 請將 Requireall granted 替換成 Allow from all 並在上一行添加 Order deny,allow .
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias行中的第一個位是您要在其上(/指示根URL)的服務應用程序的基本URL路徑,第二個位置是「 WSGI文件「 - 見下面 - 在您的系統上,通常在您的項目包(在本例中mysite)。這告訴Apache使用該文件中定義的WSGI應用程序來提供給定URL下面的任何請求。
The WSGIPythonPath line ensures that your project package is available for import on the Python path; in other words, that importmysite works.
The <Directory> piece just ensures that Apache can access your wsgi.py file.
接下來,我們需要確保這個wsgi.py與WSGI應用程序對象存在。從Django版本1.4起,startproject將為您創建一個;否則,您需要創建它。請參閱WSGI overview documentation以獲取您應該放入此文件的默認內容,以及您可以添加到其中的其他內容。
警告
如果多個Django站點在單個mod_wsgi進程中運行,則所有這些站點將使用首先運行的設置。這可以通過改變:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
在wsgi.py中:
os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"
或者通過using mod_wsgi daemon mode,並確保每個站點在其自己的守護進程中運行。
使用虛擬機¶
If you install your project』s Python dependencies inside a virtualenv, you』ll need to add the path to this virtualenv』s directory to your Python path as well. 如果你的python項目在一個依賴虛擬機的python環境中,你需要將路徑添加虛擬機的site-packages目錄到你的python路徑To do this, add an additional path to your WSGIPythonPath directive, with multiple paths separated by a colon (:) if using a UNIX-like system, or a semicolon (;) if using Windows.如果目錄路徑的任何部分包含空格字元,則必須引用WSGIPythonPath的完整參數字元串:
WSGIPythonPath /path/to/mysite.com:/path/to/your/venv/lib/python3.X/site-packages
請確保為您的virtualenv指定正確的路徑,並將正確的Python版本替換為python3.X。python3.4)。
採用mod_wsgi守護進程模式¶
「Daemon模式」是運行mod_wsgi的推薦模式(在非Windows平台上)。需要通過WSGIDaemonProcess和WSGIProcessGroup指令來實現Django實例運行在守護進程組中如果使用守護程序模式,則上述配置所需的進一步更改是您不能使用WSGIPythonPath;而應使用WSGIDaemonProcess的python-path選項,例如:
WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com
如果您要在子目錄(本示例中為)中投放您的項目,可以將WSGIScriptAlias添加到上面的配置中:
WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com
See the official mod_wsgi documentation for details on setting up daemon mode.
Serving files¶
Django不提供文件本身;它將該作業留給您選擇的任何Web伺服器。
我們建議使用單獨的Web伺服器(即不運行Django的伺服器)來提供媒體。這里有一些很好的選擇:
Nginx
Apache的精簡版本
但是,如果您無法選擇在與Django相同的Apache VirtualHost上提供媒體文件,則可以將Apache設置為將某些網址用作靜態媒體,而將其他網址用於Django的mod_wsgi介面。
This example sets up Django at the site root, but explicitly serves robots.txt, favicon.ico, any CSS file, and anything in the /static/ and /media/ URL space as a static file. 所有其他網址將使用mod_wsgi:
Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico
Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/
<Directory /path/to/mysite.com/static>
Require all granted
</Directory>
<Directory /path/to/mysite.com/media>
Require all granted
</Directory>
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
If you are using a version of Apache older than 2.4, replace Require all granted with Allow from all and also add the line Orderdeny,allow above it.
Serving the admin files¶
當django.contrib.staticfiles位於INSTALLED_APPS中時,Django開發伺服器會自動提供管理應用程序(以及任何其他已安裝的應用程序)的靜態文件。但是,當您使用任何其他伺服器布局時不是這樣。您負責設置Apache,或您使用的任何Web伺服器,以提供管理文件。
管理文件位於Django發行版的django/contrib/admin/static/admin中。
We strongly recommend using django.contrib.staticfiles to handle the admin files (along with a Web server as outlined in the previous section; this means using the collectstatic management command to collect the static files in STATIC_ROOT, and then configuring your Web server to serve STATIC_ROOT at STATIC_URL), but here are three other approaches:
在文檔根目錄中創建一個指向管理靜態文件的符號鏈接(這可能需要Apache配置中的+FollowSymLinks)。
使用如上所示的Alias指令,將適當的網址(可能是STATIC_URL + admin/)別名到管理文件的實際位置。
復制admin靜態文件,使它們存在於Apache文檔根目錄下。
Authenticating against Django』s user database from Apache¶
Django提供了一個處理程序,允許Apache直接對Django的身份驗證後端進行身份驗證。請參閱mod_wsgi authentication documentation。
If you get a UnicodeEncodeError¶
如果您正在利用Django的國際化功能(請參閱Internationalization and localization),並且您打算允許用戶上傳文件,則必須確保用於啟動Apache的環境配置為接受非-ASCII文件名。如果未正確配置環境,則在調用類似於os.path中的函數時,將觸發UnicodeEncodeError異常,該函數包含非ASCII字元。
為了避免這些問題,用於啟動Apache的環境應包含類似於以下內容的設置:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
請查閱您的操作系統的文檔以獲取適當的語法和位置來放置這些配置項; /etc/apache2/envvars是Unix平台上的常見位置。將這些語句添加到環境後,重新啟動Apache。
目錄
如何使用Django與Apache和mod_wsgi
基本配置
使用virtualenv
使用mod_wsgi守護程序模式
提供文件
提供管理文件
對來自Apache的Django用戶資料庫進行身份驗證
如果您得到UnicodeEncodeError
瀏覽
上一頁:如何使用WSGI部署
下一步:對來自Apache的Django用戶資料庫進行身份驗證
你在這里:
Django 1.8.2.dev20150513143415 documentation
部署Django
如何使用Django與Apache和mod_wsgi
如何使用WSGI進行部署
「操作指南」
這一頁
顯示源
快速搜索
輸入搜索字詞或模塊,類或函數名稱。
最後更新:
2015年5月13日
5. 如何創建部署WSGI類型的Python應用
1.因為這是部署Python開發環境,所以安裝pip可以簡化一些軟體的安裝過程。(PIP對應Lua的luarocks)
sudo apt-get install python-pip
安裝三個Python框架
sudo pip install flask
sudo pip install django==1.5.1
sudo pip install tornado==3.1.1
2.安裝Gunicorn,這是運行Python的WSGI HTTP服務。
sudo pip install gunicorn
3.Virtualenv, 安裝這個是因為,在部署Django的時候,使用了不同的版本。
sudo pip install virtualenv
第二部分:創建部署應用。
1.創建一個WSGI類型的Tornado應用。
import tornado.web
import tornado.wsgi
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("My source code in the MoPaas server by python Tornado!")
settings = {
"debug" : True,
"static_path": "static",
}
#####
urls = [
(r"/", MainHandler),
]
app = tornado.wsgi.WSGIApplication(urls, **settings)
啟動這個服務:
gunicorn -w 4 torapp:app -b 0.0.0.0:8888
2.創建一個Flask應用。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "My source code in the MoPaas server by python Tornado!"
if __name__ == "__main__":
app.run()
啟動這個服務:
gunicorn -w 4 server:app -b 0.0.0.0:8888
3.創建Django應用。
Django是一個比較大的WEB應用,創建各部署的過程,稍微復雜一些。
創建工程
django-admin.py startproject hotdoc
創建應用
python manage.py startapp verp
創建資料庫表
python manage.py syncdb
啟動工程
gunicorn hotdoc.wsgi:application -b 0.0.0.0:8888
需要在修改工程目錄下的settings.py
在INSTALLED_APPS中加入, verup和gunicorn:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'verup',
'gunicorn'
以上,本地開發環境是沒問題的。
這些步驟也可以用virtualenv新創建一個虛擬環境完成,本地創建virtualenv可以
目前在WEB IDE上沒有測試通過,理論上說,如果coding的WEB IDE是基於Docker
的,virtualevn也應該好用。
mkdir ~/environments/
virtualenv ~/environments/tutorial/
cd ~/environments/tutorial/bin
source bin/activate
目前的Paas平台上的Python服務就是WSGI形式的應用,比如SAE和Mopaas,
不同的是,在SAE上有些現成的例子。Mopaas需要自己從頭寫,這三個例子
在Mopaas生產環境下都運行測試通過。在coding.net的WEB IDE也可成功運
行。
6. 關於python的wsgi問題,向各位大神求助
dows下python+wsgi配置!(求大神看下哪裡錯了)
LoadMole mod_wsgi_mole mole/mod_wsgi.so
<Directory "E:/site">
Options ExecCGI
AddHandler wsgi-script .py
Order allow,deny
Allow from all
</Directory>
這是我的配置信息,重啟apache一直錯誤,反復搞不定,還有啥地方不對?是不要將py安裝目錄加path?還是哪裡,或者機器不能安裝倆個版本的py?(我安裝了2.6和3.3)就這樣的配置怎麼啟動py解釋器呢!求大神給我看下把
7. python modwsgi 安裝 什麼是apxs
apxs - APache eXtenSion tool
用來製作apache的擴展模塊DSO,
要使用這個工具,安裝apache的時候就必須添加enable-so以支持DSO.
8. linux下python和webpy怎麼搭建
基於python的web開發,這里我們使用linux為開發環境,搭建基於nginx + web.py + fastcgi
有些基本基本概念解釋下,哈哈,因為我不懂
1.wsgi為Web伺服器網關介面(Python Web Server Gateway Interface,縮寫為WSGI)是是為Python語言定義的Web伺服器和Web應用程序或框架之間的一種簡單而通用的介面。自從WSGI被開發出來以後,許多其它語言中也出現了類似介面
2.uwsgi,另一種python定義的web伺服器和web應用的介面
3.REST服務,REST(Representational State Transfer表述性狀態轉移)是一種針對網路應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。
4.CRUD是指在做計算處理時的增加(Create)、查詢(Retrieve)(重新得到數據)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。主要被用在描述軟體系統中資料庫或者持久層的基本操作功能
以下內容主要來自
http://webpy.org/cookbook/fastcgi-nginx
需要的軟體
nginx 0.7以上版本,我使用的是nginx 0.9.2
webpy我使用的web.py-0.37
spawn-fcgi 1.6.3
flup 1.0
nginx的配置請參看官方文檔
spawn-fcgi是lighttpd的一個子項目用於多進程管理
webpy和flup安裝方式為解壓後運行python setup.py install
安裝編寫index.py
點擊(此處)折疊或打開
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
app.run()
注意index.py需要使用命令chmod +x index.py加入可執行許可權
將index.py放入/data/www(我所使用的目錄你可以修改)
修改nginx.conf配置
index要加入index.py
Nginx的配置加入
點擊(此處)折疊或打開
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9002;
}
使用Spawn-fcgi
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002
如果報錯為126,說明index.py沒有可執行許可權
netstat -lnp | grep 9002參考是否啟動成功
我運行的實際為
spawn-fcgi -d /data/www -f /data/www/index.py -a 127.0.0.1 -p 9002 -F 2
啟動2個進程
啟動nginx
瀏覽器輸入地址
成功結束
9. 如何在 virtualenv 環境下搭建 Python Web
由於字數的限制,其實本篇文章的全標題為 《如何在 virtualenv 環境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》
在這篇文章里,我們將搭建一個簡單的 Web 應用,在虛擬環境中基於 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理進程,然後使用 OneAPM Python 探針來監測應用性能,形成一個「閉環」 !希望能對大家有所幫助,首先簡單來介紹一下環境:
系統環境:ubuntu 14.04 Python 2.7.6
安裝組件庫
第一步安裝所需要的存儲庫,因為打算用到虛擬環境,用到 pip 安裝和管理 Python 組件,所以先更新本地包,然後安裝組件:
sudo apt-get updatesudo apt-get install python-pip python-dev nginx
創建虛擬環境 virtualenv
在一個系統中創建不同的 Python 隔離環境,相互之間還不會影響,為了使系統保持干凈,遂決定用 virtualenv 跑應用程序,創建一個容易識別的目錄,開始安裝,再創建項目目錄 super,然後激活環境:
sudo pip install virtualenv
mkdir ~/supervisor && cd ~/supervisor
virtualenv supersource super/bin/activate
安裝 Flask 框架
好了,現在在虛擬環境裡面,開始安裝 Flask 框架,flask 依賴兩個庫 werkzeug 和 jinjia2, 採用 pip 方式安裝即可, pip 是一個重要的工具,Python 用它來管理包:
pip install flask
先用 Flask 寫一個簡單的 Web 服務 myweb.py ,因為後面要做一些測試,所以設置了幾個請求:
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()
啟動 Flask 看看!
python myweb.py
在瀏覽器中訪問 http://127.0.0.1:5000 就可以看到了「幾個路徑都試一試」
用 Gunicorn 部署 Python Web
現在我們使用 Flask 自帶的伺服器,完成了 Web 服務的啟動。生產環境下,Flask 自帶的伺服器,無法滿足性能要求。所以我們這里採用 Gunicorn 做 wsgi 容器,用來部署 Python,首先還是安裝 Gunicorn:
pip install gunicorn
當我們安裝好 Gunicorn 之後,需要用 Gunicorn 啟動 Flask,Flask 用自帶的伺服器啟動時,Flask 裡面的 name 裡面的代碼啟動了 app.run()。而這里我們使用 Gunicorn,myweb.py 就等同於一個庫文件,被 Gunicorn 調用,這樣啟動:
gunicorn -w 4 -b 0.0.0.0:8000 myweb:app
其中 myweb 就是指 myweb.py,app 就是那個 wsgifunc 的名字,這樣運行監聽 8000 埠,原先的 5000 埠並沒有啟用,-w 表示開啟多少個 worker,-b 表示 Gunicorn 開發的訪問地址。
想要結束 Gunicorn 只需執行 pkill Gunicorn,但有時候還要 ps 找到 pid 進程號才能 kill。可是這對於一個開發來說,太過於繁瑣,因此出現了另外一個神器 ---supervisor,一個專門用來管理進程的工具,還可以管理系統的工具進程。
安裝 Supervisor
pip install supervisor
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默認配置文件gedit supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 進程管理在 supervisor.conf 底部下添加 myweb.py 的配置 `/home/wang/supervisor/super` 是我的項目目錄」
[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的狀態
supervisorctl -c supervisor.conf reload 重新載入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname] 啟動指定/所有 supervisor 管理的程序進程
supervisorctl -c supervisor.conf stop [all]|[appname] 關閉指定/所有 supervisor 管理的程序進程
supervisor 還有一個 web 的管理界面,可以激活。更改下配置:
[inet_http_server] ; inet (TCP) server disabled by defaultport=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 socketserverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socketusername=wang ; should be same as http_username if setpassword=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
現在可以使用 supervsior 啟動 gunicorn 啦。運行命令:
supervisord -c supervisor.conf
瀏覽器訪問 http://127.0.0.1:9001 可以得到 supervisor 的 web 管理界面,訪問 http://127.0.0.1:8000 可以看見 gunicorn 啟動的返回的頁面。
配置 Nginx
前面我們已經在系統環境下安裝了 Nginx, 安裝好的 Nginx 二進制文件放在 /usr/sbin/ 文件夾下,接下來使用 Supervisor 來管理 Nginx。這里需要注意一個問題,許可權問題。Nginx 是 sudo 的方式安裝,啟動的適合也是 root 用戶,那麼我們現在也需要用 root 用戶啟動 supervisor。在 supervisor.conf 下添加配置文件:
[program:nginx]command=/usr/sbin/nginxstartsecs=0stopwaitsecs=0autostart=falseautorestart=falsestdout_logfile=/home/wang/supervisor/log/nginx.logstderr_logfile=/home/wang/supervisor/log/nginx.err
好了,都配置完之後,啟動 supervisor:
supervisord -c supervisor.conf
訪問頁面,也可以用 ab 進行壓力測試:
ab -c 100 -n 100 http://127.0.0.1:8000/qw/1
-c 用於指定壓力測試的並發數, -n 用於指定壓力測試總共的執行次數。
安裝 Python 探針
搭建好了 web,想實時監控應用數據,有什麼好的工具,用 OneAPM 的 Python 探針試試,
首先也是安裝 Python 探針:
pip install -i http://pypi.oneapm.com/simple --upgrade blueware
根據 License Key 生成配置文件:
blueware-admin generate-config (License Key) = blueware.ini
由於是在虛擬環境下,所以要特別注意路徑,修改 supervisor.conf 裡面兩項:
[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
重啟應用
supervisorctl # 進入命令行supervisor> reload # 重新載入
向上面一樣訪問頁面,也可以用 ab 進行壓力測試
幾分鍾後有下圖,可以看到頁面載入時間,web 事物,頁面吞吐量,其中後面是設置自定義事物「Business Transaction」。
參考文章
10. 我安裝boost python 時碰到問題,網上搜索可能是缺少 python-dev,這是什麼東西,哪裡下載
你用的是mod_python,可能是版本太老了。它檢查到版本不對。
如果使用最新版本的mod_python也許沒有這個問題。
另外就是通過它的檢測,這個不難。通常檢測是通過幾個辦法:
1.注冊表。這個地方我不太記得了。似乎有1-2個值是標志python版本的。你搜索一下看。
最笨的辦法是搜索python的class里的注冊值。找到python,看看它後面的版本號以及執行路徑。如果不對。你將2.5.4改成2.5就OK
2.python執行文件本身報告出來的版本。這個有些難,如果搞不定可以通過一個批處理過濾一下。
3.python的安裝目錄名不對。(可能性不大)
不過老實說mod_python已經過時了,現在一般都是用wsgi的。連fastcgi都用得少了。就是wsgi。