nginx+uwsgi+django/flask配置

这几天在不断的倒腾nginx的相关东西,今天测试了nginx+uwsgi+django/flask这个组合,配置启动没有问题,后面看有没有什么app可以做。另外之前做过Nginx+mod_wsgi+webpy 的配置开发,但是mod_wsgi感觉好久没有开发维护了,而且据网上说uwsgi的效率很高,倒腾一下。

nginx我这几天一直使用的nginx-1.2.0的,nginx的编译就不说了,直接./configure && make &&make install

uwsgi用apt-get安装的不能使用,感觉应该是版本过低还是debian的开发者修改了,反正我这边用不了,最后卸载了apt-get安装的。uwsgi是直接从官网下载的 http://projects.unbit.it/downloads/uwsgi-latest.tar.gz 我这里下载到的是uwsgi-1.3的版本。

uwsgi的编译安装:python uwsgiconfig.py –build && python setup.py install

先测试以下flask,flask是一个python的web微框架。在这里下载http://flask.pocoo.org。使用起来也是很简单的,这里先写一个测试程序。

from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def hello_world():
return ‘Hello World!’
#if __name__ == ‘__main__’:
# app.run()

如果后面两句不注释的话,则可以使用框架自带的webserver来调试程序。

helight@zhwen:/data/wwwroot/htdocs/flask_test$ python flask_app.py
* Running on http://127.0.0.1:5000/

启动后默认绑定在127.0.0.1:5000,这里我们要和uwsgi结合使用,所以不需要了。

在安装了uwsgi后直接运行这个命令去启动:

uwsgi –socket 127.0.0.1:8888 –pythonpath /data/wwwroot/htdocs/flask_test –module flask_app:app –processes 2

–socket指定绑定的IP和端口,这里我们指定 127.0.0.1:8888

–pythonpath 这里是指定我们app所在位置,我这里指定的是我的测试目录 /data/wwwroot/htdocs/flask_test

–module 是指定我们要启动的py文件,一般也就是我们的项目的入口文集 首先我们文件是flask_app.py,我们在文件种定义的处理名字是app,如下:

app = Flask(__name__)
@app.route(‘/’)

所以module这里我们就写了flask_app:app

–processes 是指定启用的进程数量,这里我们只是测试所以启动了2个。

安装启动完uwsgi后,在配置启动nginx,nginx的配置非常简单:

location / {
uwsgi_pass 127.0.0.1:8888; #这里的端口和刚才的端口IP要一致
include uwsgi_params;
}

配置完成之后直接启动,测试即可。

下面在看看django的配置,django下载之后直接使用python setup.py install安装后就可以使用了。下载地址:https://www.djangoproject.com/

helight@zhwen:/data/wwwroot/htdocs$ django-admin.py startproject django_test

创建后的目录结构:

helight@zhwen:/data/wwwroot/htdocs/django_test$ ls
django_test manage.py
helight@zhwen:/data/wwwroot/htdocs/django_test$

这里我做一点修改,修改为下面的目录结构

helight@zhwen:/data/wwwroot/htdocs/django_test$ ls
manage.py zhwen
helight@zhwen:/data/wwwroot/htdocs/django_test$
这里需要修改的文件又manage.py文件,
#!/usr/bin/env python
import os import sys
if __name__ == “__main__”:
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “zhwen.settings”) #修改这里

然后重命名文件夹,再修改 vim zhwen/wsgi.py
import os
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “zhwen.settings”) #修改这里

还需修改 vim zhwen/settings.py
ROOT_URLCONF = ‘zhwen.urls’ #修改这里
# Python dotted path to the WSGI application used by Django’s runserver.
WSGI_APPLICATION = ‘zhwen.wsgi.application’ #修改这里

修改完成之后建立一个xml的配置文件:

helight@zhwen:/data/wwwroot/htdocs/django_test$ vim django.xml
helight@zhwen:/data/wwwroot/htdocs/django_test$ cat django.xml

<uwsgi>
<socket>127.0.0.1:9090</socket>
<chdir>/data/wwwroot/htdocs/django_test/zhwen</chdir>
<pythonpath>..</pythonpath>
<module>django_wsgi</module>
<processes>2</processes>
</uwsgi>

然后建立一个配置文件写的module种的字段的py文件django_wsgi.py

helight@zhwen:/data/wwwroot/htdocs/django_test$ cat django_wsgi.py

#! /usr/bin/env python
# coding: utf-8
import os,sys
if not os.path.dirname(__file__) in sys.path[:1]:
sys.path.insert(0, os.path.dirname(__file__))
os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘zhwen.settings’
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
helight@zhwen:/data/wwwroot/htdocs/django_test$

在启动uwsgi: uwsgi -x django.xml

然后在启动nginx,nginx的配置和上面flask的配置一样。 测试,访问ok!

Leave a Reply

Your email address will not be published. Required fields are marked *