====== Django+uWSGI+Nginx的安装和配置 ======
[[https://www.djangoproject.com/|Django]]是一个流行的Python框架,[[http://nginx.org/|Nginx]]是一个高性能的HTTP和反向代理服务器。本文讲述在[[http://www.centos.org/|CentOS]] 6下Django的安装,并通过[[http://projects.unbit.it/uwsgi/|uWSGI]]与Nginx集成的简单配置方法。
===== 软件安装 =====
==== 安装Django ====
安装Django及其他Python软件包有很多方法,这里统一使用[[https://pypi.python.org/pypi/pip|pip]]来安装。不建议多种方法混合使用。
首先安装pip,需要启用[[https://fedoraproject.org/wiki/EPEL|EPEL]]源:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum update
安装pip:
yum install python-pip
较早版本的pip在CentOS下的命令为python-pip,新版本增加了pip命令,相应的,python-pip改成了指向pip的符号链接。
现在可以通过pip安装Django了:
python-pip install django
更多安装细节可参考官方说明:[[https://docs.djangoproject.com/en/1.5/intro/install/|Quick install guide]]。
==== 安装Nginx ====
接下来安装Nginx服务器,安装方法可参考[[http://nginx.org/en/linux_packages.html|Installation on Linux]]的CentOS部分。
下载[[http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm|nginx-release-centos-6-0.el6.ngx.noarch.rpm]]并安装它,或者手工新建文件/etc/yum.repos.d/nginx.repo:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
安装:
yum install nginx
==== 安装uWSGI ====
安装uWSGI需要用到系统开发工具包,如果尚未安装,则执行:
yum groupinstall 'Development tools'
yum install python-devel
通过pip安装uWSGI:
python-pip install uwsgi
更多安装细节可参考:[[http://uwsgi-docs.readthedocs.org/en/latest/Install.html|Installing uWSGI]]。
===== 集成配置 =====
==== Django项目 ====
我们参照Django的[[https://docs.djangoproject.com/en/1.5/intro/tutorial01/|Tutorial]]新建个应用项目。
首先创建一个普通用户django:
useradd django
以用户django登录,执行:
django-admin.py startproject mysite
手工运行:
cd mysite/
python manage.py runserver
==== 配置uWSGI ====
开始之前,建议先看看官方这篇快速文档:[[http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html|Quickstart for python/WSGI applications]]。
配置刚才建立的Django应用,新建/etc/uwsgi.ini(这里采用INI格式的配置文件):
[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/django/mysite/
wsgi-file = mysite/wsgi.py
master = ture
processes = 4
threads = 2
#stats = 127.0.0.1:9191
uid = django
gid = django
die-on-term = true
pidfile = /var/run/uwsgi.pid
logto = /var/log/uwsgi.log
更多参数说明可参见:[[http://uwsgi-docs.readthedocs.org/en/latest/Options.html|Configuration Options]]。
运行:
uwsgi /etc/uwsgi.ini
测试时可以手工启动,实际运行时要配置成开机自启动。
CentOS 6的init系统是[[http://upstart.ubuntu.com/|Upstart]],新建/etc/init/uwsgi.conf:
# simple uWSGI script
description "uwsgi tiny instance"
start on runlevel [2345]
stop on runlevel [06]
exec /usr/bin/uwsgi /etc/uwsgi.ini
启动服务:
start uwsgi
停止服务:
stop uwsgi
更多Upstart的信息可参考:[[http://uwsgi-docs.readthedocs.org/en/latest/Upstart.html|Running uWSGI via Upstart]]。
==== 配置Nginx ====
Nginx的配置文件在/etc/nginx目录下。当前这个样例只运行一个Django应用,故直接编辑/etc/nginx/conf.d/default.conf,添加:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}
对于静态资源,直接由Nginx来负责,不用通过Django:
location /static {
alias /usr/lib/python2.6/site-packages/django/contrib/admin/static;
}
更多信息可参考:[[http://uwsgi-docs.readthedocs.org/en/latest/Nginx.html|Nginx support]]。
配置完毕。
使用浏览器直接访问服务器的80端口,无误的话,将显示Django的画面。
{{tag>Django Nginx}}