Django Nginx+uwsgi Installation and Configuration

In the previous chapters, we usedpython manage.py runserverto run the server. This is only suitable for use in a test environment.

For a formally released service, we need a stable and continuous server, such as Apache, Nginx, lighttpd, etc. This article will use Nginx as an example.

You can also directly refer to:Python uwsgi Installation and Configuration


Install basic development packages

The installation steps on 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 also install Python 2.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 packagehttps://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 benefit of installing pip is that you can use pip list and pip uninstall to manage Python packages; easy_install doesn't have this feature, it only has 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 working properly:

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 in the terminal:

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

Enter http://127.0.0.1:8001 in your browser and check whether "Hello World" is output. If there is no output, please check your installation process.


Install Django

pip install django

To test whether django is working, run:

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

Enter http://127.0.0.1:8002 in the browser to check whether Django 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 readNginx installation and configurationLearn more.


uwsgi configuration

uwsgiSupportedini、xmlwaitmany种Configuration Method,booktextwith ini isExample, In/etc/under the directoryNewuwsgi9090.ini,addFor exampleBottomConfiguration:

[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 (e.g., /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 readNginx installation and configurationLearn more.

After the setup is complete, run in the terminal:

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

Enter http://127.0.0.1 in your browser, and you will see Django's "It work" page.