====== 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}}