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