最近打算使用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