本文出自:http://www.huxun360.com/view_blog/33
準備
安裝以下工具:
nginx
uwsgi
virtualenv
nginx和uwsgi搭建另一篇文章:http://galean.blog.51cto.com/7702012/1302198
安裝virtualenv,需先安裝pip,pip可以很方便的安裝、卸載和管理Python的包。
virtualenv則可以建立多個獨立的虛擬環境,各個環境中擁有自己的python解釋器和各自的package包,互不影響。virtualenv 工具可將你係統所安裝的 python 程序抽離出來,放在一個特定的目錄下,供 python 應用程序(例如本文所講的 moinmoin)使用。這樣即便系統中更換了 python 版本,也不會對已部署的 python 應用產生負面影響。
pip和virtualenv可以很好的協同工作,同時使用這兩個工具非常方便。
一般先安裝pip,安裝好後,pip install virtualenv就可以自動從網上下載並安裝virtualenv了。然後virtualenv env1就可以創建一個名爲env1的虛擬環境了,進入這個虛擬環境後,再使用pip install安裝其它的package就只會安裝到這個虛擬環境裏,不會影響其它虛擬環境或系統環境。
安裝pip:
pip下載地址是:https://pypi.python.org/pypi/pip
下載後解壓,
tar zxvf pip-1.4.1.tar.gz
cd pip-1.4.1
python setup.py install
安裝:virtualenv
pip install virtualenv
如果出現:-bash: pip: command not found,找到pip可執行文件路徑:
[root@htuidc ~]# find /* -name pip
/usr/local/python27/bin/pip
然後:
[root@htuidc ~]# /usr/local/python27/bin/pip install virtualenv
就能成功安裝。
一、下載moinmoin 軟件包
cd /data/web
wget http://static.moinmo.in/files/moin-1.9.7.tar.gz
tar zxvf moin-1.9.7.tar.gz
cd moin-1.9.7
二、安裝 moinmoin:
######## 構建 python 的隔離環境
# mkdir -p /data/web/moinmoin
# virtualenv /data/web/moinmoin/python-env
######## 激活 python 隔離環境,並將 moinmoin 安裝至其中
# cd /data/web/moin-1.9.7
# source /data/web/moinmoin/python-env/bin/activate
# python setup.py install
######## 將 moinmoin 的實例安裝至 /data/web/moinmoin/wiki 目錄
# cp -r ./wiki /data/web/moinmoin
# cd /data/web/moinmoin/wiki
# cp config/wikiconfig.py ./
# cp server/moin.wsgi ./
######## 關閉 python 隔離環境
# deactivate
完成上述步驟之後,可以發現,拜 virtualenv 工具所賜,所有與 moinmoin 相關的文件均被安裝至 /var/www/moinmoin/python-env/share/moin 與 /var/www/moinmoin/python-env/lib/python2.7/site-packages/MoinMoin 目錄,而原本它們默認是被安裝至 /usr/share/moin 與 /usr/lib/python2.7/site-packages/MoinMoin 目錄。
三、配置 nginx:
server {
listen 80;
server_name localhost;
location ^~ /wiki {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8630;
uwsgi_param UWSGI_PYHOME /data/web/moinmoin/python-env/;
uwsgi_param UWSGI_CHDIR /data/web/moinmoin/wiki/;
uwsgi_param UWSGI_SCRIPT moin_wsgi;
uwsgi_param SCRIPT_NAME /wiki;
uwsgi_modifier1 30;
}
location ^~ /wiki/moin_static/ {
alias /data/web/moinmoin/python-env/lib/python2.7/site-packages/MoinMoin/web/static/htdocs/;
add_header Cache-Control public;
expires 1M;
}
location = /favicon.ico {
log_not_found off;
}
}
下面,大致分析一下上述代碼的工作過程。
如果網頁瀏覽器傳入的請求是“192.168.0.2/wiki”,那麼 nginx 會根據 "location ^~ /wiki" 代碼段的設定主要進行以下處理:
加載 /etc/nginx 目錄中的“uwsgi_params.conf”文件;
通過 127.0.0.1:8630與 uwsgi 服務器通信,類似於進程管道;
設置 python 運行環境,這裏使用的是上文中 virtualenv 工具所構造的 python 目錄,其中包含着 python 程序本身以及上文中所安裝的 moinmoin 軟件包;
設置 uwsgi 服務器在相應 http 請求(http://192.168.0.7)之前,先進入 /data/web/moinmoin/wiki 目錄,這個目錄是前文中我們建立的 moinmoin 實例;
設置 uwsgi 服務器要運行的 python 程序,即 moin.wsgi;
設置 uwsgi 服務器所運行的 python 程序對應的 http 請求爲 http://192.168.0.7/wiki。
四、配置 uwsgi:
如果希望直接在命令行中啓動 uwsgi,那麼只需使用以下命令即可:
uwsgi -x /etc/uwsgi/uwsgi.xml
當然,這需要在 /etc/uwsgi 目錄中建立 uwsgi 的配置文件 uwsgi.xml,內容如下:
<uwsgi>
<socket>/tmp/wiki.sock</socket>
<limit-as>256</limit-as>
<processes>6</processes>
<memory-report/>
<vhost/>
<no-site/>
</uwsgi>
如果出現網頁沒有圖片和css樣式的顯示問題,請檢查網頁源碼中引用CSS的路徑是不是不存在(查看方法:網頁中右擊,選擇"查看源碼"),然後根據情況修改 location ^~ /wiki/moin_static/ 的alias路徑和moinwiki模板跟目錄wikiconfig.py配置文件中的url_prefix_static的值,直到正確顯示爲止。