{"id":2655,"date":"2018-10-05T21:00:11","date_gmt":"2018-10-05T15:30:11","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=2655"},"modified":"2026-09-28T20:51:07","modified_gmt":"2026-09-28T15:21:07","slug":"setting-up-django-and-your-web-server-with-uwsgi-and-nginx-on-ubuntu","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/setting-up-django-and-your-web-server-with-uwsgi-and-nginx-on-ubuntu\/","title":{"rendered":"Setting up Django and your web server with uWSGI and nginx on Ubuntu"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\"><strong>Post Date: October 05, 2018<\/strong><br><strong>Last Updated:<\/strong> September 22, 2026<\/h4>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deploying a Django application in a production environment requires more than just running the built-in Django development server. While the development server is useful for testing and development, it is not designed to handle production workloads, security requirements, or high traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this tutorial, we will learn how to deploy a Django application on <strong>Ubuntu 16.04<\/strong> using <strong>uWSGI<\/strong> and <strong>Nginx<\/strong>. uWSGI acts as the application server that runs your Django application, while Nginx serves as the reverse proxy that handles incoming requests and efficiently serves static content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By following this guide, you will be able to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install Django and its dependencies<\/li>\n\n\n\n<li>Configure Python virtual environments<\/li>\n\n\n\n<li>Install and configure uWSGI<\/li>\n\n\n\n<li>Configure uWSGI Emperor mode<\/li>\n\n\n\n<li>Create a Django application configuration<\/li>\n\n\n\n<li>Configure Nginx as a reverse proxy<\/li>\n\n\n\n<li>Serve static and media files<\/li>\n\n\n\n<li>Manage Django services efficiently<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Requirements<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before proceeding, ensure you have the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ubuntu 16.04 Server<\/li>\n\n\n\n<li>Python 3.6<\/li>\n\n\n\n<li>Django 2.0.7<\/li>\n\n\n\n<li>Nginx 1.10.3<\/li>\n\n\n\n<li>Root or sudo access<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install Python Dependencies<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install the required Python packages and development libraries:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt-get update\nsudo apt-get install python3-dev python3-pip\nsudo apt-get install python3-setuptools\nsudo apt-get install python3-kivy<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the Python installation:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 --version\npip3 --version<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Install Virtual Environment<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Virtual environments help isolate project dependencies from the system Python installation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install Virtual Environment tools:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip3 install virtualenv virtualenvwrapper<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create a virtual environment:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">virtualenv webapp-env<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Activate the environment:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">source webapp-env\/bin\/activate<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Install Django<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install Django using pip:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip3 install django<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify installation:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django-admin --version<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Install uWSGI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Install uWSGI:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo pip install uwsgi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify installation:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">uwsgi --version<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Configure uWSGI Directory Structure<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create the required uWSGI directories:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd \/etc\n\nsudo mkdir uwsgi\n\ncd uwsgi\n\nsudo mkdir vassals\n\ncd vassals\n\nsudo mkdir enabled\n\nsudo mkdir available<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The structure will look like:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/etc\/uwsgi\/\n\u2514\u2500\u2500 vassals\n    \u251c\u2500\u2500 available\n    \u2514\u2500\u2500 enabled<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Configure uWSGI Emperor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create the Emperor configuration file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo nano \/etc\/uwsgi\/vassals\/emperor.ini<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add the following content:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[uwsgi]\nemperor = \/etc\/uwsgi\/vassals\/enabled<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The Emperor process automatically manages all uWSGI instances located in the enabled directory.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Create uWSGI Systemd Service<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a systemd service file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo vi \/etc\/systemd\/system\/uwsgi.service<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add the following content:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[Unit]\nDescription=uWSGI Emperor\nAfter=syslog.target\n\n[Service]\nExecStart=\/usr\/local\/bin\/uwsgi --ini \/etc\/uwsgi\/vassals\/emperor.ini\nRuntimeDirectory=uwsgi\nRestart=always\nKillSignal=SIGQUIT\nType=notify\nStandardError=syslog\nNotifyAccess=all\n\n[Install]\nWantedBy=multi-user.target<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Reload systemd:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl daemon-reload<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Start the service:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl start uwsgi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Check service status:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">systemctl status uwsgi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Enable service at boot:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl enable uwsgi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Stop service if required:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo systemctl stop uwsgi<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Configure Django Project for uWSGI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a new configuration file:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/uwsgi\/vassals\/available\/web_app.ini<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add the following content:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">[uwsgi]\n\n# Django project directory\nchdir = \/var\/www\/webapp\n\n# Django WSGI module\nmodule = webapp.wsgi\n\nenable-threads = true\n\n# Process settings\nmaster = true\nprocesses = 10\nlisten = 100\n\n# Socket configuration\nsocket = \/var\/www\/webapp\/webapp\/web_app.sock\nchmod-socket = 666\n\n# Cleanup\nvacuum = true\n\n# Limits\nmax-requests = 1000\n\n# Logging\ndaemonize = \/var\/log\/uwsgi-emperor.log<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Enable the Application<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a symbolic link:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ln -s \/etc\/uwsgi\/vassals\/available\/web_app.ini \/etc\/uwsgi\/vassals\/enabled\/<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This allows the Emperor process to automatically detect and manage the application.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 10: Upload Your Django Project<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ensure your Django application is located under:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/var\/www\/webapp<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the directory:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ls -l \/var\/www\/webapp<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example output:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">drwxr-xr-x 3 www-data www-data 4096 Sep 14 05:41 bin\ndrwxr-xr-x 6 root root 4096 Oct 4 13:46 webapp\n-rwxr-xr-x 1 root root 538 Aug 10 02:14 manage.py\n-rw-r--r-- 1 root root 275 Aug 10 02:14 requirements<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 11: Verify Django Application<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before configuring Nginx, ensure Django runs correctly:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 manage.py runserver 0.0.0.0:8000<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Performing system checks...\n\nSystem check identified no issues.\nDjango version 2.0.7\nStarting development server at http:\/\/0.0.0.0:8000\/<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If there are no errors, proceed to the next step.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 12: Configure Nginx Virtual Host<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a new Nginx configuration:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vi \/etc\/nginx\/sites-available\/webapp.com<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add the following content:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">upstream web_app {\n    server unix:\/\/\/var\/www\/webapp\/webapp\/web_app.sock;\n}\n\nserver {\n    listen 80;\n    server_name pheonixsolutions.com;\n\n    charset utf-8;\n\n    client_max_body_size 75M;\n\n    location \/media {\n        alias \/var\/www\/webapp\/webapp\/media;\n    }\n\n    location \/static {\n        alias \/var\/www\/webapp\/webapp\/static;\n    }\n\n    location \/ {\n        uwsgi_pass web_app;\n        include \/etc\/nginx\/uwsgi_params;\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Enable the virtual host:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ln -s \/etc\/nginx\/sites-available\/webapp.com \/etc\/nginx\/sites-enabled\/<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 13: Test and Reload Nginx<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Verify configuration syntax:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nginx -t<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If successful, reload Nginx:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">systemctl reload nginx<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Or:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/etc\/init.d\/nginx reload<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 14: Restart uWSGI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Apply configuration changes:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">service uwsgi restart<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify service status:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">systemctl status uwsgi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Your application should now be accessible through:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">http:\/\/pheonixsolutions.com<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Additional Tips<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Create Django Superuser<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Activate the virtual environment:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">source \/var\/www\/webapp\/bin\/activate<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Create an administrator account:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 manage.py createsuperuser --username=devops --email=devops@pheonixsolutions.com<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Follow the prompts to set the password.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Collect Static Files<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Collect all static assets into a single location:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 manage.py collectstatic<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you encounter errors, ensure the following exists in <code>settings.py<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">STATIC_ROOT = '\/var\/www\/webapp\/webapp\/static\/'<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run the command again after saving the changes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Resolving Django Migration Errors<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes deployments fail because database migrations were not fully applied.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You may encounter errors related to specific modules such as:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">core_module<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To resolve migration issues:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Generate migrations:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3.6 manage.py makemigrations core<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Apply migrations:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3.6 manage.py migrate core<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Apply all pending migrations:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3.6 manage.py migrate<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Restart uWSGI after migrations:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">systemctl restart uwsgi<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the application and Django admin panel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Check uWSGI Logs<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">tail -f \/var\/log\/uwsgi-emperor.log<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Check Nginx Error Logs<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">tail -f \/var\/log\/nginx\/error.log<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Verify Socket File<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ls -la \/var\/www\/webapp\/webapp\/web_app.sock<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Verify Running Services<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">systemctl status nginx\nsystemctl status uwsgi<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You have successfully deployed a Django application using uWSGI and Nginx on Ubuntu 16.04. This production-ready setup provides improved performance, reliability, and scalability compared to the default Django development server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By configuring uWSGI Emperor mode, systemd service management, Nginx reverse proxying, and static file handling, you now have a robust architecture capable of serving Django applications in production environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Regularly monitor logs, keep dependencies updated, apply security patches, and maintain proper backup procedures to ensure long-term stability and performance of your application.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions (FAQ)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Why should I use uWSGI and Nginx instead of Django&#8217;s development server?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Django development server is designed only for development and testing. uWSGI provides efficient application processing, while Nginx handles client requests, static files, SSL termination, and load balancing, making the combination suitable for production deployments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. What should I do if static files are not loading?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ensure the <code>STATIC_ROOT<\/code> setting is configured correctly in <code>settings.py<\/code> and run:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">python3 manage.py collectstatic<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Also verify that the Nginx <code>location \/static<\/code> block points to the correct directory and reload Nginx after making any changes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. How do I troubleshoot a 502 Bad Gateway error?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A 502 Bad Gateway error usually means Nginx cannot communicate with uWSGI. Check the uWSGI service status, verify that the socket file exists, and review the uWSGI and Nginx error logs:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">systemctl status uwsgi\nls -la \/var\/www\/webapp\/webapp\/web_app.sock\ntail -f \/var\/log\/nginx\/error.log<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These logs typically provide the information needed to identify and resolve the issue.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Related Article<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/pheonixsolutions.com\/blog\/disable-ping-icmp-replies-ubuntu-server-16-04-2-temporarily\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener\">Disable Ping (ICMP) Replies on Ubuntu Server 16.04.2 Temporarily<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pheonixsolutions.com\/blog\/install-postgresql-ubuntu-16\/?utm_source=chatgpt.com\" target=\"_blank\" rel=\"noreferrer noopener\">Install PostgreSQL on Ubuntu 16<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Talk to our experts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Have a technology challenge or looking for the right solution for your business? Our team can help you with <strong>cloud, DevOps, development, infrastructure, design, and more<\/strong>. Feel free to reach out to our experts <a href=\"https:\/\/pheonixsolutions.com\/contact\">here<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Post Date: October 05, 2018Last Updated: September 22, 2026 Introduction Deploying a Django application in a production environment requires more [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1022],"tags":[],"class_list":["post-2655","post","type-post","status-publish","format-standard","hentry","category-web-architecture","psol-cat-web-architecture"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-GP","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/2655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=2655"}],"version-history":[{"count":2,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/2655\/revisions"}],"predecessor-version":[{"id":11995,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/2655\/revisions\/11995"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=2655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=2655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=2655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}