最近打算使用python+flask搭建一個簡單的個人網站,使用nginx+uwsgi部署,在此記錄下部署過程。
-
環境
ubuntu12.04, python2.7.3, virtualenv1.7.1.2, uwsgi2.0.8 -
準備
安裝virtualenv: 使用virtualenv建立一個獨立的python開發環境具有很多好處,ubuntu12.04預設是沒有安裝的,因此先安裝virtualenv:sudo apt-get install virtualenv
。安裝完成後執行virtualenv ~/demo
在我的個人目錄下面建立一個名為demo的虛擬環境。
安裝uwsgi: 直接使用ubuntu12.04軟體包裡的uwsgi版本太低,因此需要去uwsgi官網下載最新的版本安裝,我的方式是按照文件說明直接使用make命令:wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd uwsgi-lastest
make執行
uwsgi --version
確認是否安裝成功。 -
開發
cd 到 demo目錄,使用source bin/active
啟用當前的虛擬環境,因為我們需要使用到flask,因此需要在當前環境中安裝flask:pip install flask
。(注意:若未啟用當前虛擬環境pip install會預設安裝到全域性的python環境中,導致permission denied錯誤) 現在就可以寫一個最簡單的flask應用了:
from flask import Flask app = Flask(__name__) @app.route(`/`) def helloworld(): return `hello, world.`
-
部署
現在使用uwsgi和 nginx把helloworld應用部署一下。
先配置nginx,在nginx的conf.d目錄下建立一個helloworld.conf檔案,然後做如下配置server {
listen 80;
server_name 127.0.0.1;
location /helloworld {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi.sock;
}
}儲存,nginx reload以使上面的配置生效。
使用uwsgi啟動helloworld應用:uwsgi -s /tmp/uwsgi.sock --chmod-sock=666 -H /home/victor/demo --module helloworld -callable app
, 執行後沒有報任何異常即可。
現在在瀏覽器裡輸入127.0.0.1/helloworld
即可訪問helloworld應用,瀏覽器將顯示hello,world.
(注意:由於是在虛擬環境中開發的這個應用,因此在使用uswgi啟動引發用時需要使用-H /path/to/virtualenv設定使用當前虛擬環境變數,否則我們只在當前虛擬環境中安裝的flask會無法import進來。或者,在執行之前先將當前虛擬環境加入到PYTHONPATH中,export PYTHONPATH=$PYTHONPATH:/home/victor/demo/lib/python2.7/site-packages
) -
參考資料
flask快速上手
使用uwsgi啟動flask應用以及nginx配置
uwsgi document