Django Nginx+uwsgi installation configuration


In the previous chapters we used python manage.py runserver to run the server. This is only suitable for use in a test environment.

For officially released services, we need a stable and sustainable server, such as apache, Nginx, lighttpd, etc. This article will use Nginx as an example.


Install the basic development package

The installation steps under Centos are as follows:

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

CentOS comes with Python 2.4.3, but we can install Python2.7.5:

cd ~
wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
tar xvf Python-2.7.5.tar.bz2
cd Python-2.7.5
./configure --prefix=/usr/local
make && make altinstall

Install Python package management

easy_install package https://pypi.python.org/pypi/distribute

Installation steps:

cd ~
wget https://pypi.python.org/packages/source/d/distribute/distribute-0.6.49.tar.gz
tar xf distribute-0.6.49.tar.gz
cd distribute-0.6.49
python2.7 setup.py install
easy_install --version

pip package: https://pypi.python.org/pypi/pip

The advantage of installing pip is that you can manage Python packages through pip list and pip uninstall. easy_install does not have this function, only uninstall


Install uwsgi

uwsgi: https://pypi.python.org/pypi/uWSGI

Detailed explanation of uwsgi parameters: http://uwsgi-docs.readthedocs.org/en/latest/Options .html

pip install uwsgi
uwsgi --version    #查看 uwsgi 版本

Test whether uwsgi is normal:

Create a new test.py file with the following content:

def application(env, start_response):
	start_response('200 OK', [('Content-Type','text/html')])
	return "Hello World"

Then run it in the terminal:

uwsgi --http :8001 --wsgi-file test.py

Browse Enter: http://127.0.0.1:8001 into the server and check whether there is "Hello World" output. If there is no output, please check your installation process.


Install Django

pip install django

Test whether django is normal, run:

django-admin.py startproject demosite
cd demosite
python2.7 manage.py runserver 0.0.0.0:8002

Enter in the browser: http://127.0.0.1:8002, check django Whether it is running normally.


Install Nginx

The installation command is as follows:

cd ~
wget http://nginx.org/download/nginx-1.5.6.tar.gz
tar xf nginx-1.5.6.tar.gz
cd nginx-1.5.6
./configure --prefix=/usr/local/nginx-1.5.6 \
--with-http_stub_status_module \
--with-http_gzip_static_module
make && make install

You can read Nginx installation configuration to learn more.


uwsgi configuration

uwsgi supports ini, xml and other configuration methods. This article takes ini as an example. Create a new uwsgi9090.ini in the /ect/ directory and add the following configuration:

[uwsgi]
socket = 127.0.0.1:9090
master = true         //主进程
vhost = true          //多站模式
no-site = true        //多站模式时不设置入口模块和文件
workers = 2           //子进程数
reload-mercy = 10     
vacuum = true         //退出、重启时清理文件
max-requests = 1000   
limit-as = 512
buffer-size = 30000
pidfile = /var/run/uwsgi9090.pid    //pid文件,用于下面的脚本启动、停止该进程
daemonize = /website/uwsgi9090.log

Nginx configuration

Find the nginx installation directory (such as: /usr/local/nginx/), Open the conf/nginx.conf file and modify the server configuration:

server {
        listen       80;
        server_name  localhost;
        
        location / {            
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:9090;              //必须和uwsgi中的设置一致
            uwsgi_param UWSGI_SCRIPT demosite.wsgi;  //入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
            uwsgi_param UWSGI_CHDIR /demosite;       //项目根目录
            index  index.html index.htm;
            client_max_body_size 35m;
        }
    }

You can read Nginx installation configuration to learn more.

After the setting is completed, run in the terminal:

uwsgi --ini /etc/uwsgi9090.ini &
/usr/local/nginx/sbin/nginx

Enter in the browser: http://127.0.0.1, you can see "It work" of django.