Django webservice on Nginx with UWSGI
Supposing, you have got a Django project you want to start on a separate server. There are many ways to do it. At this article, I will tell about running the simplest Django project with minimal Django and Nginx configurations using UWSGI.
Step 0. Installing Django and Nginx.
Supposing, you have already got installed Python. In order to install Django run this command in terminal:
$ sudo pip install django
Installing Nginx:
$ sudo apt-get install nginx
Installing UWSGI:
$ sudo apt-get install uwsgi $ sudo pip install uwsgi
Step 1. Creating a project.
Let's suppose, the name of our project is djangoexample1. In order to create it, run this:
$ django-admin startproject djangoexample1
After that the folder djangoexample1 with contained files will be created. To check it, run:
$ python manage.py runserver
After that open your browser and follow http://127.0.0.1:8000/. The pleasant title "It worked! Congratulations on your first Django-powered page." should be appeared there.
Upload your project to your server. Futher actions will be done on the server.
If everything worked fine, going to the step 2.
Step 2. Configuring Nginx.
Going to the server via SSH. Do not forget to install Django there globally or locally in a virtual environment.
All Nginx configuration files are stored in /etc/nginx/. In order to add a new configuration, create a new file in the folder /etc/nginx/sites-available:
$ sudo nano /etc/nginx/sites-available/djangoexample1
Put these lines there and save:
upstream djangoexample1 { server unix:///tmp/djangoexample1.sock; } server { listen 8081; server_name djangoexample1; charset utf-8; location / { uwsgi_pass djangoexample1; include /home/alexander/websites/djangoexample1/uwsgi_params; } }
Pay attention, the specified port is 8081. This means this is the port that will be used to access your project from the outside. /tmp/djangoexample1.sock is the a to a socket for working with UWSGI. The file /home/alexander/websites/djangoexample1/uwsgi_params contains UWSGI parameters (your exact path to the file will be different), it should look like this:
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
Add this file to your project.
In order to enable the created Nginx configuration, it is necessary to create a link in the folder /etc/nginx/sites-enabled:
$ sudo ln -s /etc/nginx/sites-available/djangoexample1 /etc/nginx/sites-enabled/djangoexample1
Restarting Nginx:
$ sudo service nginx restart
Step 3. Installing and running UWSGI.
Running UWSGI daemon:
$ uwsgi --socket /tmp/djangoexample1.sock --wsgi-file djangoexample1/wsgi.py --chmod-socket=666 --daemonize djangoexample1.log
If everything is done correctly, following http://