最近打算使用python+flask搭建一個簡單的我的網站,使用nginx+uwsgi部署,在此記錄下部署過程。html
準備
安裝virtualenv: 使用virtualenv建立一個獨立的python開發環境具備不少好處,ubuntu12.04默認是沒有安裝的,所以先安裝virtualenv: sudo apt-get install virtualenv
。安裝完成後運行virtualenv ~/demo
在個人我的目錄下面建立一個名爲demo的虛擬環境。
安裝uwsgi: 直接使用ubuntu12.04軟件包裏的uwsgi版本過低,所以須要去uwsgi官網下載最新的版本安裝,個人方式是按照文檔說明直接使用make命令:python
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd uwsgi-lastest
makenginx
運行uwsgi --version
確認是否安裝成功。flask
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文件,而後作以下配置ubuntu
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
)app