用Apache+mod_wsgi部署python程序

用Apache+mod_wsgi部署python程序

使用Apache+mod_wsgi部署webpy等python程序

webpy是一個python上的非常輕量級的web框架,它和其他許多python web框架一樣,都能支持wsgi部署,而目前來看比較優秀的wsgi部署方案自然是Apache+mod_wsgi,它提供非常簡單優秀的部署方式,使得python程序的部署不再困難,本文將詳細講述在Apache上部署mod_wsgi的方法,並嘗試使用mod_wsgi支持webpy程序.

首先,我們假定我們的服務器已經安裝配置好Apache了,安裝路徑爲/usr/local/apache,虛擬主機配置文件在/usr/local/apache/conf/vhost下,那麼我們可以開始安裝mod_wsgi.
從mod_wsgi的官方網站http://code.google.com/p/modwsgi/下載最新的源代碼,截止到本文,其最新版爲3.3.下載解壓,我們需要編譯安裝
在編譯之前,我們需要確認當前環境是否能支持mod_wsgi,編譯它需要完整的gcc編譯環境,同時必須保證安裝了python和python-dev包,如果您不確定是否有python支持,在debian上可以直接apt-get安裝

1 apt-get install python python-dev

如果提示未安裝,安裝即可
下面開始編譯mod_wsgi

1 ./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/bin/python
2 make
3 make install

如果沒有錯誤,那麼恭喜,mod_wsgi已經被成功編譯並安裝了.
然後我們編輯/usr/local/apache/conf/httpd.conf文件
加上

1 LoadModule wsgi_module modules/mod_wsgi.so
2 AddType text/html .py

如果要在某個虛擬主機上啓用python+wsgi支持,只需要在vhost的配置文件中加入

1 WSGIScriptAlias / /var/www/main.py/

其中/var/www/main.py就是提供wsgi的主程序
當然,一般程序都有靜態文件支持,所以,您可能需要對某個目錄下的文件跳過處理,如下

1 Alias /static   /var/www/static/

如此即可.最後加上目錄設置即可,對於上面的例子,完整的虛擬主機配置如下

01 ServerAdmin [email protected]
02 DocumentRoot /var/www
03 ServerName xxx.com
04 ServerAlias www.xxx.com
05 WSGIScriptAlias / /var/www/main.py/
06 Alias /static   /var/www/static/
07 AddType text/html .py
08 ErrorLog /var/log/httpd/xxx_error.log
09 CustomLog "|/usr/bin/cronolog /var/log/httpd/xxx_access_%Y%m%d.log" custom1
10  
11  
12 Options Indexes FollowSymLinks
13 AllowOverride All
14 Order allow,deny
15 Allow from all

這樣就配置好了此站點的mod_wsgi支持.那麼對於python程序,應該如何使用這樣的配置工作呢?下面我們以webpy爲例,考慮實際部署一個測試程序
對於webpy,官方給出了wsgi的配置例子,具體參考:http://webpy.org/cookbook/mod_wsgi-apache/zh-cn
在本文中,我們參考之後,實際的main.py內容如下:

01 #!/usr/bin/env python
02 import os
03 import sys
04 path = os.path.dirname(os.path.realpath(__file__))
05 sys.path.append(path)
06   
07 import web
08   
09 urls = (
10         '/', 'index'
11 )
12   
13 class index:
14         def GET(self):
15                 return "Hello, I am Leven."
16   
17 app = web.application(urls, globals())
18 curdir = os.path.dirname(__file__)
19 session = web.session.Session(app, web.session.DiskStore(curdir + '/' + 'sessions'),)
20   
21 def session_hook():
22         web.ctx.session = session
23   
24 app.add_processor(web.loadhook(session_hook))
25 application = app.wsgifunc()

稍微解釋下,由於我們考慮是虛擬主機部署,因此服務器並未安裝webpy,我們將webpy放入web目錄下,因此,在使用的時候,必須將當前目錄加入path纔可以正常載入webpy模塊,所有文件開頭先將當前目錄加入path.
然後,由於web程序中會經常用到session,因此我們將session也加入到了程序中,具體存儲路徑在sessions目錄下.

將webpy目錄和main.py上傳到web根目錄,然後訪問,如果訪問結果如下圖,恭喜,您的配置已經成功.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章