用Apache+mod_wsgi部署python程式

來源:互聯網
上載者:User

使用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安裝

1apt-get installpython python-dev

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

./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/bin/python2make3make install

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

LoadModule wsgi_module modules/mod_wsgi.soAddType text/html .py
如果要在某個虛擬機器主機上啟用python+wsgi支援,只需要在vhost的設定檔中加入
WSGIScriptAlias / /var/www/main.py/

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

Alias /static   /var/www/static/

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

01 ServerAdmin admin@xxx.com02 DocumentRoot /var/www03 ServerName xxx.com04 ServerAlias www.xxx.com05 WSGIScriptAlias / /var/www/main.py/06 Alias /static   /var/www/static/07 AddType text/html .py08 ErrorLog /var/log/httpd/xxx_error.log09 CustomLog "|/usr/bin/cronolog /var/log/httpd/xxx_access_%Y%m%d.log" custom110  11  12 Options Indexes FollowSymLinks13 AllowOverride All14 Order allow,deny15 Allow from all

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

01 #!/usr/bin/env python02 import os03 import sys04 path =os.path.dirname(os.path.realpath(__file__))05 sys.path.append(path)06   07 import web08   09 urls =(10         '/','index'11 )12   13 class index:14         defGET(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=session23   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根目錄,然後訪問,如果訪問結果如,恭喜,您的配置已經成功.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.