{"id":15722,"date":"2025-11-18T15:32:46","date_gmt":"2025-11-18T15:32:46","guid":{"rendered":"https:\/\/kb.cloudhostgeek.com\/docs\/framework\/python\/how-do-i-manage-static-and-media-files-in-django-hosting\/"},"modified":"2026-02-09T22:49:10","modified_gmt":"2026-02-09T22:49:10","slug":"how-to-set-up-gunicorn-and-nginx-for-django","status":"publish","type":"docs","link":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/","title":{"rendered":"How to set up Gunicorn and Nginx for Django?"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"15722\" class=\"elementor elementor-15722\" data-elementor-post-type=\"docs\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3b586649 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"3b586649\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-44f7d955 elementor-widget elementor-widget-text-editor\" data-id=\"44f7d955\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><strong>Introduction<\/strong><\/h2><p data-start=\"220\" data-end=\"462\">Django is a high-level Python web framework that allows rapid development of secure and scalable websites. It is an excellent choice when you need more control and dedicated resources, which is why it works especially well on <a style=\"text-decoration: none;\" href=\"https:\/\/www.bigcloudy.com\/vps-hosting\"><strong data-start=\"446\" data-end=\"461\">VPS Hosting<\/strong>.<\/a><\/p><p data-start=\"464\" data-end=\"691\">In this guide, you will learn how to deploy a Django application using Gunicorn and Nginx on a VPS hosting environment. This method is ideal for production deployments that prioritize performance, security, and flexibility.<\/p><p data-start=\"693\" data-end=\"947\">You will set up a virtual environment, install Django and Gunicorn, and configure Nginx to serve your Django application efficiently on your VPS. This approach gives you full server-level control and is recommended for serious or growing Django projects.<\/p><p><b>Note: You\u2019ll need root or sudo access to your VPS to follow these steps.<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1b9b07f1 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"1b9b07f1\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-38865ad6 elementor-widget elementor-widget-text-editor\" data-id=\"38865ad6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><b>Prerequisites <\/b><\/h3><p>Before you begin:<\/p><ul><li>A VPS with Ubuntu 22.04 or later.<\/li><li>Root or sudo user access.<\/li><li>A domain name (optional but recommended).<\/li><li>Basic familiarity with Linux commands.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2f09e882 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"2f09e882\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-220fba16 elementor-widget elementor-widget-text-editor\" data-id=\"220fba16\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 1 \u2013 Installing Python and Nginx<br \/><\/b><\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b5a6fa elementor-widget elementor-widget-text-editor\" data-id=\"b5a6fa\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>First, update your server packages:<\/p><p>Then install Python, Pip, and Nginx:<\/p><p>Tip: Make sure Nginx is running:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5dccf79 elementor-widget elementor-widget-code-highlight\" data-id=\"5dccf79\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo apt update\n\n# sudo apt install python3-pip python3-dev nginx\n\n#sudo systemctl status nginx<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6fc179 elementor-widget elementor-widget-text-editor\" data-id=\"c6fc179\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 2 \u2013 Creating a Python Virtual Environment<\/b><\/h2><p>Install the virtual environment package:<\/p><p>Create your project directory:<\/p><p>Create and activate a virtual environment:<\/p><p><strong>Note:<\/strong> Once activated, your prompt will change to <code>(env)<\/code>, confirming the environment is active.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-febe6bf elementor-widget elementor-widget-code-highlight\" data-id=\"febe6bf\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo pip3 install virtualenv\n\n# mkdir ~\/projectdir\n# cd ~\/projectdir\n\n# virtualenv env\n# source env\/bin\/activate<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6d38fe4 elementor-widget elementor-widget-text-editor\" data-id=\"6d38fe4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 3 \u2013 Installing Django and Gunicorn<\/b><\/h2><p>Install Django and Gunicorn in your virtual environment:<\/p><p>You can verify the installation:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f18fc1 elementor-widget elementor-widget-code-highlight\" data-id=\"8f18fc1\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># pip install django gunicorn\n\n# django-admin --version \n\n# gunicorn --version<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84501de elementor-widget elementor-widget-text-editor\" data-id=\"84501de\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 4 \u2013 Setting Up Your Django Project<\/b><\/h2><p>You can copy your existing Django project into <code>~\/projectdir\/<\/code> \u2014 or create a new one:<\/p><p>Open the project\u2019s settings file:<\/p><p>Update the <strong>ALLOWED_HOSTS<\/strong> variable:<\/p><p>Run database migrations:<\/p><p>Open port <strong>8000<\/strong> in the firewall:<\/p><p>Start Django\u2019s development server to test your setup:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a94b1a elementor-widget elementor-widget-code-highlight\" data-id=\"1a94b1a\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># django-admin startproject myproject ~\/projectdir\n\n# nano ~\/projectdir\/myproject\/settings.py\n\nALLOWED_HOSTS = ['your_server_ip', 'your_domain.com']\n\n# python manage.py makemigrations \n# python manage.py migrate\n\n# sudo ufw allow 8000\n# python manage.py runserver 0.0.0.0:8000<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ef0cd3d elementor-widget elementor-widget-text-editor\" data-id=\"ef0cd3d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Now visit:<\/p><p><code>http:\/\/&lt;your-server-ip&gt;:8000<\/code><\/p><p>If you see the Django welcome page, your project is working.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ccb7c2b elementor-widget elementor-widget-text-editor\" data-id=\"ccb7c2b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 5 \u2013 Configuring Gunicorn <\/b><\/h2><p>Test Gunicorn\u2019s ability to serve the application:<\/p><p>You can now access your Django app at:<br \/>http:\/\/&lt;your-server-ip&gt;:8000<\/p><p>Once verified, stop Gunicorn with CTRL + C.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7674fa2 elementor-widget elementor-widget-code-highlight\" data-id=\"7674fa2\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># gunicorn \u2013bind 0.0.0.0:8000 myproject.wsgi:application<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c5ff715 elementor-widget elementor-widget-text-editor\" data-id=\"c5ff715\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 6 \u2013 Creating a systemd Service for Gunicorn <\/b><\/h2><p>To manage Gunicorn as a background service, create a systemd unit file:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ea0af9 elementor-widget elementor-widget-code-highlight\" data-id=\"5ea0af9\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo nano \/etc\/systemd\/system\/gunicorn.service<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d1f785 elementor-widget elementor-widget-text-editor\" data-id=\"2d1f785\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Add the following configuration:<code><\/code><code><\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a6b3e57 elementor-widget elementor-widget-code-highlight\" data-id=\"a6b3e57\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>[Unit] \n\nDescription=Gunicorn daemon for Django project \nAfter=network.target \n\n[Service] \n\nUser=root Group=www-data \nWorkingDirectory=\/home\/username\/projectdir \nExecStart=\/home\/username\/projectdir\/env\/bin\/gunicorn \u2013workers 3 \u2013bind\nunix:\/home\/username\/projectdir\/myproject.sock myproject.wsgi:application\n\n[Install] \n\nWantedBy=multi-user.target<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e1ea570 elementor-widget elementor-widget-text-editor\" data-id=\"e1ea570\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Save and close the file, then start and enable the service:<code><\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9c09ac2 elementor-widget elementor-widget-code-highlight\" data-id=\"9c09ac2\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo systemctl start gunicorn \n\n# sudo systemctl enable gunicorn \n\n# sudo systemctl status gunicorn<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c48cf05 elementor-widget elementor-widget-text-editor\" data-id=\"c48cf05\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Note:<\/strong> If you make changes, reload systemd<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e78571 elementor-widget elementor-widget-code-highlight\" data-id=\"9e78571\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo systemctl daemon-reload<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84ba5ff elementor-widget elementor-widget-text-editor\" data-id=\"84ba5ff\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 7 \u2013 Configuring Nginx as a Reverse Proxy <\/b><\/h2><p>Create an Nginx configuration file:<\/p><p>Add this configuration:<code><\/code><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-32d3198 elementor-widget elementor-widget-code-highlight\" data-id=\"32d3198\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo nano \/etc\/nginx\/sites-available\/myproject<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-75234e5 elementor-widget elementor-widget-code-highlight\" data-id=\"75234e5\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>server { \nlisten 80; \nserver_name your_domain.com your_server_ip; \nlocation = \/favicon.ico {\naccess_log off; \nlog_not_found off; }\nlocation \/static\/ { \nroot \/home\/username\/projectdir; \n  } \nlocation \/ { \ninclude proxy_params; \nproxy_pass http:\/\/unix:\/home\/username\/projectdir\/myproject.sock; \n  } \n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0e7aecb elementor-widget elementor-widget-text-editor\" data-id=\"0e7aecb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Add this configuration:<code><\/code><\/p><p>Enable the configuration and restart Nginx:<\/p><p>You can now access your Django app using your domain or IP.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d8c9f43 elementor-widget elementor-widget-code-highlight\" data-id=\"d8c9f43\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo ln -s \/etc\/nginx\/sites-available\/myproject \/etc\/nginx\/sites-enabled \n\n# sudo nginx -t # sudo systemctl restart nginx<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c6f5a8b elementor-widget elementor-widget-text-editor\" data-id=\"c6f5a8b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Step 8 \u2013 Enabling Firewall and Testing Setup<\/b><\/h2><p>Allow Nginx through the firewall:<\/p><p>Reload UFW:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b470b1d elementor-widget elementor-widget-code-highlight\" data-id=\"b470b1d\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># sudo ufw allow \u2018Nginx Full\u2019 \n\n# sudo ufw delete allow 8000\n\n# sudo ufw reload<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0018464 elementor-widget elementor-widget-text-editor\" data-id=\"0018464\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Now open your browser and visit:<br \/>http:\/\/your_domain.com<\/p><p>Your Django app should be running behind Nginx and Gunicorn.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4d3365c e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"4d3365c\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1fdad382 elementor-widget elementor-widget-text-editor\" data-id=\"1fdad382\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><b>Common Issues and Fixes<\/b><\/h3><table><tbody><tr><td><strong>Issue<\/strong><\/td><td><strong>Cause<\/strong><\/td><td><strong>Solution<\/strong><\/td><\/tr><tr><td><strong>502 Bad Gateway<\/strong><\/td><td>Gunicorn service not running<\/td><td>Run sudo systemctl restart gunicorn<\/td><\/tr><tr><td><strong>Permission Denied<\/strong><\/td><td>Incorrect file or folder permissions<\/td><td>Ensure \/home\/username\/projectdir is owned by www-data or root<\/td><\/tr><tr><td><strong>Static files not loading<\/strong><\/td><td>Missing static configuration<\/td><td>Run python manage.py collectstatic<\/td><\/tr><tr><td><strong>Gunicorn not found<\/strong><\/td><td>venv path incorrect in service file<\/td><td>Update ExecStart path in gunicorn.service<\/td><\/tr><\/tbody><\/table>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f820a7 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"7f820a7\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-960acc9 elementor-widget elementor-widget-text-editor\" data-id=\"960acc9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Conclusion<\/b><\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-13c583f elementor-widget elementor-widget-text-editor\" data-id=\"13c583f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"16\" data-end=\"378\">Django applications can be deployed on both shared hosting and VPS environments using standard, well-supported setups. On shared hosting, cPanel with CloudLinux Passenger provides a managed approach that handles virtual environments and application startup with minimal configuration. This option is suitable for smaller projects and straightforward deployments.<\/p><p data-start=\"380\" data-end=\"799\" data-is-last-node=\"\" data-is-only-node=\"\">On a VPS, using Gunicorn with Nginx offers full control over the server and application behavior. This setup is better suited for applications that require higher performance, persistent processes, or custom server configuration. In both cases, using virtual environments, matching Python and Django versions, managing static files correctly, and restarting services after changes are essential for a stable deployment.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-744c8b43 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"744c8b43\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-61cb562 elementor-widget elementor-widget-text-editor\" data-id=\"61cb562\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>Need Help?\n<\/b><\/h2>\nIf you require assistance at any point while using this guide, our\u00a0<b>Support Team<\/b>\u00a0is here to help:\n<ul>\n \t<li aria-level=\"1\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4e7.svg\" alt=\"email\" \/>\u00a0<b>Email:<\/b>\u00a0support@bigcloudy.com<\/li>\n \t<li aria-level=\"1\"><img decoding=\"async\" class=\"emoji\" role=\"img\" draggable=\"false\" src=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f310.svg\" alt=\"website\" \/><a style=\"text-decoration: none; color: #a57ef5;\" href=\"https:\/\/www.bigcloudy.com\/contact-us\">\u00a0<b>Submit a support ticket<\/b><\/a><\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eaa60b4 elementor-widget elementor-widget-text-editor\" data-id=\"eaa60b4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tConfirm your purchase by clicking <b>\u201cContinue\u201d<\/b> button.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-192fb4f3 e-con-full e-flex wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-child\" data-id=\"192fb4f3\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1c37c7b elementor-widget elementor-widget-text-editor\" data-id=\"1c37c7b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><b>FAQ<\/b><\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a969ed elementor-widget elementor-widget-eael-adv-accordion\" data-id=\"4a969ed\" data-element_type=\"widget\" data-widget_type=\"eael-adv-accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <div class=\"eael-adv-accordion\" id=\"eael-adv-accordion-4a969ed\" data-scroll-on-click=\"no\" data-scroll-speed=\"300\" data-accordion-id=\"4a969ed\" data-accordion-type=\"accordion\" data-toogle-speed=\"300\">\n    <div class=\"eael-accordion-list\">\n                <div id=\"can-i-use-this-setup-for-multiple-django-apps\" class=\"elementor-tab-title eael-accordion-header\" tabindex=\"0\" data-tab=\"1\" aria-controls=\"elementor-tab-content-7821\"><span class=\"eael-advanced-accordion-icon-closed\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"><\/path><\/svg><\/span><span class=\"eael-advanced-accordion-icon-opened\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-up\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"><\/path><\/svg><\/span><span class=\"eael-accordion-tab-title\">Can I use this setup for multiple Django apps?<\/span><\/div><div id=\"elementor-tab-content-7821\" class=\"eael-accordion-content clearfix\" data-tab=\"1\" aria-labelledby=\"can-i-use-this-setup-for-multiple-django-apps\"><p>Yes, create separate Gunicorn service and Nginx config files for each app.<\/p><\/div>\n                <\/div><div class=\"eael-accordion-list\">\n                <div id=\"how-can-i-enable-https\" class=\"elementor-tab-title eael-accordion-header\" tabindex=\"0\" data-tab=\"2\" aria-controls=\"elementor-tab-content-7822\"><span class=\"eael-advanced-accordion-icon-closed\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"><\/path><\/svg><\/span><span class=\"eael-advanced-accordion-icon-opened\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-up\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"><\/path><\/svg><\/span><span class=\"eael-accordion-tab-title\">How can I enable HTTPS?<\/span><\/div><div id=\"elementor-tab-content-7822\" class=\"eael-accordion-content clearfix\" data-tab=\"2\" aria-labelledby=\"how-can-i-enable-https\"><p>Install and configure Certbot for Nginx:<\/p>\n<p><em># sudo apt install certbot python3-certbot-nginx<\/em><\/p>\n<p><em># sudo certbot &#8211;nginx -d<\/em> your_domain.com<\/p><\/div>\n                <\/div><div class=\"eael-accordion-list\">\n                <div id=\"whats-the-advantage-of-using-gunicorn-with-nginx\" class=\"elementor-tab-title eael-accordion-header\" tabindex=\"0\" data-tab=\"3\" aria-controls=\"elementor-tab-content-7823\"><span class=\"eael-advanced-accordion-icon-closed\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"><\/path><\/svg><\/span><span class=\"eael-advanced-accordion-icon-opened\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-up\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"><\/path><\/svg><\/span><span class=\"eael-accordion-tab-title\">What\u2019s the advantage of using Gunicorn with Nginx?<\/span><\/div><div id=\"elementor-tab-content-7823\" class=\"eael-accordion-content clearfix\" data-tab=\"3\" aria-labelledby=\"whats-the-advantage-of-using-gunicorn-with-nginx\"><p>Gunicorn serves Django efficiently, while Nginx handles static files, caching, and request load balancing.<\/p><\/div>\n                <\/div><div class=\"eael-accordion-list\">\n                <div id=\"how-to-restart-the-gunicorn-service\" class=\"elementor-tab-title eael-accordion-header\" tabindex=\"0\" data-tab=\"4\" aria-controls=\"elementor-tab-content-7824\"><span class=\"eael-advanced-accordion-icon-closed\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"><\/path><\/svg><\/span><span class=\"eael-advanced-accordion-icon-opened\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-up\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"><\/path><\/svg><\/span><span class=\"eael-accordion-tab-title\">How to restart the Gunicorn service?<\/span><\/div><div id=\"elementor-tab-content-7824\" class=\"eael-accordion-content clearfix\" data-tab=\"4\" aria-labelledby=\"how-to-restart-the-gunicorn-service\"><p><em># sudo systemctl restart gunicorn<\/em><\/p><\/div>\n                <\/div><div class=\"eael-accordion-list\">\n                <div id=\"how-can-i-check-gunicorn-logs\" class=\"elementor-tab-title eael-accordion-header\" tabindex=\"0\" data-tab=\"5\" aria-controls=\"elementor-tab-content-7825\"><span class=\"eael-advanced-accordion-icon-closed\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-down\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"><\/path><\/svg><\/span><span class=\"eael-advanced-accordion-icon-opened\"><svg aria-hidden=\"true\" class=\"fa-accordion-icon e-font-icon-svg e-fas-angle-up\" viewBox=\"0 0 320 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"><\/path><\/svg><\/span><span class=\"eael-accordion-tab-title\">How can I check Gunicorn logs?<\/span><\/div><div id=\"elementor-tab-content-7825\" class=\"eael-accordion-content clearfix\" data-tab=\"5\" aria-labelledby=\"how-can-i-check-gunicorn-logs\"><p><em># sudo journalctl -u gunicorn<\/em><\/p><\/div>\n                <\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Introduction Django is a high-level Python web framework that allows rapid development of secure and scalable websites. It is an excellent choice when you need more control and dedicated resources, which is why it works especially well on VPS Hosting. In this guide, you will learn how to deploy a Django application using Gunicorn and Nginx on a VPS hosting environment. This method is ideal for production deployments that prioritize performance, security, and flexibility. You will set up a virtual environment, install Django and Gunicorn, and configure Nginx to serve your Django application efficiently on your VPS. This approach gives you full server-level control and is recommended for serious or growing Django projects. Note: You\u2019ll need root or sudo access to your VPS to follow these steps. Prerequisites Before you begin: A VPS with Ubuntu 22.04 or later. Root or sudo user access. A domain name (optional but recommended). Basic familiarity with Linux commands. Step 1 \u2013 Installing Python and Nginx First, update your server packages: Then install Python, Pip, and Nginx: Tip: Make sure Nginx is running: # sudo apt update # sudo apt install python3-pip python3-dev nginx #sudo systemctl status nginx Step 2 \u2013 Creating a Python Virtual Environment Install the virtual environment package: Create your project directory: Create and activate a virtual environment: Note: Once activated, your prompt will change to (env), confirming the environment is active. # sudo pip3 install virtualenv # mkdir ~\/projectdir # cd ~\/projectdir # virtualenv env # source env\/bin\/activate Step 3 \u2013 Installing Django and Gunicorn Install Django and Gunicorn in your virtual environment: You can verify the installation: # pip install django gunicorn # django-admin &#8211;version # gunicorn &#8211;version Step 4 \u2013 Setting Up Your Django Project You can copy your existing Django project into ~\/projectdir\/ \u2014 or create a new one: Open the project\u2019s settings file: Update the ALLOWED_HOSTS variable: Run database migrations: Open port 8000 in the firewall: Start Django\u2019s development server to test your setup: # django-admin startproject myproject ~\/projectdir # nano ~\/projectdir\/myproject\/settings.py ALLOWED_HOSTS = [&#8216;your_server_ip&#8217;, &#8216;your_domain.com&#8217;] # python manage.py makemigrations # python manage.py migrate # sudo ufw allow 8000 # python manage.py runserver 0.0.0.0:8000 Now visit: http:\/\/&lt;your-server-ip&gt;:8000 If you see the Django welcome page, your project is working. Step 5 \u2013 Configuring Gunicorn Test Gunicorn\u2019s ability to serve the application: You can now access your Django app at:http:\/\/&lt;your-server-ip&gt;:8000 Once verified, stop Gunicorn with CTRL + C. # gunicorn \u2013bind 0.0.0.0:8000 myproject.wsgi:application Step 6 \u2013 Creating a systemd Service for Gunicorn To manage Gunicorn as a background service, create a systemd unit file: # sudo nano \/etc\/systemd\/system\/gunicorn.service Add the following configuration: [Unit] Description=Gunicorn daemon for Django project After=network.target [Service] User=root Group=www-data WorkingDirectory=\/home\/username\/projectdir ExecStart=\/home\/username\/projectdir\/env\/bin\/gunicorn \u2013workers 3 \u2013bind unix:\/home\/username\/projectdir\/myproject.sock myproject.wsgi:application [Install] WantedBy=multi-user.target Save and close the file, then start and enable the service: # sudo systemctl start gunicorn # sudo systemctl enable gunicorn # sudo systemctl status gunicorn Note: If you make changes, reload systemd # sudo systemctl daemon-reload Step 7 \u2013 Configuring Nginx as a Reverse Proxy Create an Nginx configuration file: Add this configuration: # sudo nano \/etc\/nginx\/sites-available\/myproject server { listen 80; server_name your_domain.com your_server_ip; location = \/favicon.ico { access_log off; log_not_found off; } location \/static\/ { root \/home\/username\/projectdir; } location \/ { include proxy_params; proxy_pass http:\/\/unix:\/home\/username\/projectdir\/myproject.sock; } } Add this configuration: Enable the configuration and restart Nginx: You can now access your Django app using your domain or IP. # sudo ln -s \/etc\/nginx\/sites-available\/myproject \/etc\/nginx\/sites-enabled # sudo nginx -t # sudo systemctl restart nginx Step 8 \u2013 Enabling Firewall and Testing Setup Allow Nginx through the firewall: Reload UFW: # sudo ufw allow \u2018Nginx Full\u2019 # sudo ufw delete allow 8000 # sudo ufw reload Now open your browser and visit:http:\/\/your_domain.com Your Django app should be running behind Nginx and Gunicorn. Common Issues and Fixes Issue Cause Solution 502 Bad Gateway Gunicorn service not running Run sudo systemctl restart gunicorn Permission Denied Incorrect file or folder permissions Ensure \/home\/username\/projectdir is owned by www-data or root Static files not loading Missing static configuration Run python manage.py collectstatic Gunicorn not found venv path incorrect in service file Update ExecStart path in gunicorn.service Conclusion Django applications can be deployed on both shared hosting and VPS environments using standard, well-supported setups. On shared hosting, cPanel with CloudLinux Passenger provides a managed approach that handles virtual environments and application startup with minimal configuration. This option is suitable for smaller projects and straightforward deployments. On a VPS, using Gunicorn with Nginx offers full control over the server and application behavior. This setup is better suited for applications that require higher performance, persistent processes, or custom server configuration. In both cases, using virtual environments, matching Python and Django versions, managing static files correctly, and restarting services after changes are essential for a stable deployment. Need Help? If you require assistance at any point while using this guide, our\u00a0Support Team\u00a0is here to help: \u00a0Email:\u00a0support@bigcloudy.com \u00a0Submit a support ticket Confirm your purchase by clicking \u201cContinue\u201d button. FAQ Can I use this setup for multiple Django apps? Yes, create separate Gunicorn service and Nginx config files for each app. How can I enable HTTPS? Install and configure Certbot for Nginx: # sudo apt install certbot python3-certbot-nginx # sudo certbot &#8211;nginx -d your_domain.com What\u2019s the advantage of using Gunicorn with Nginx? Gunicorn serves Django efficiently, while Nginx handles static files, caching, and request load balancing. How to restart the Gunicorn service? # sudo systemctl restart gunicorn How can I check Gunicorn logs? # sudo journalctl -u gunicorn<\/p>\n","protected":false},"author":13,"featured_media":0,"parent":15569,"menu_order":8,"comment_status":"open","ping_status":"closed","template":"","doc_tag":[],"class_list":["post-15722","docs","type-docs","status-publish","hentry","no-post-thumbnail"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.7 (Yoast SEO v26.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Set Up Gunicorn and Nginx for Django on VPS (Guide)<\/title>\n<meta name=\"description\" content=\"Learn how to set up Gunicorn and Nginx for Django on a VPS. Step-by-step production guide with virtualenv, systemd, and Nginx config.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to set up Gunicorn and Nginx for Django?\" \/>\n<meta property=\"og:description\" content=\"Learn how to set up Gunicorn and Nginx for Django on a VPS. Step-by-step production guide with virtualenv, systemd, and Nginx config.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/\" \/>\n<meta property=\"og:site_name\" content=\"CloudHostGeek Help Center\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/BigCloudyHosting\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-09T22:49:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4e7.svg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@bigcloudypvtltd\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Set Up Gunicorn and Nginx for Django on VPS (Guide)","description":"Learn how to set up Gunicorn and Nginx for Django on a VPS. Step-by-step production guide with virtualenv, systemd, and Nginx config.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/","og_locale":"en_US","og_type":"article","og_title":"How to set up Gunicorn and Nginx for Django?","og_description":"Learn how to set up Gunicorn and Nginx for Django on a VPS. Step-by-step production guide with virtualenv, systemd, and Nginx config.","og_url":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/","og_site_name":"CloudHostGeek Help Center","article_publisher":"https:\/\/www.facebook.com\/BigCloudyHosting\/","article_modified_time":"2026-02-09T22:49:10+00:00","og_image":[{"url":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4e7.svg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_site":"@bigcloudypvtltd","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/","url":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/","name":"Set Up Gunicorn and Nginx for Django on VPS (Guide)","isPartOf":{"@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/#primaryimage"},"image":{"@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/#primaryimage"},"thumbnailUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4e7.svg","datePublished":"2025-11-18T15:32:46+00:00","dateModified":"2026-02-09T22:49:10+00:00","description":"Learn how to set up Gunicorn and Nginx for Django on a VPS. Step-by-step production guide with virtualenv, systemd, and Nginx config.","breadcrumb":{"@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/#primaryimage","url":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4e7.svg","contentUrl":"https:\/\/s.w.org\/images\/core\/emoji\/16.0.1\/svg\/1f4e7.svg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/how-to-set-up-gunicorn-and-nginx-for-django\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bigcloudy.com\/knowledge-base\/"},{"@type":"ListItem","position":2,"name":"Framework","item":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/"},{"@type":"ListItem","position":3,"name":"Python","item":"https:\/\/www.bigcloudy.com\/knowledge-base\/docs\/framework\/python\/"},{"@type":"ListItem","position":4,"name":"How to set up Gunicorn and Nginx for Django?"}]},{"@type":"WebSite","@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/#website","url":"https:\/\/www.bigcloudy.com\/knowledge-base\/","name":"https:\/\/www.bigcloudy.com\/","description":"Your step-by-step guide to hosting, servers &amp; website tools.","publisher":{"@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bigcloudy.com\/knowledge-base\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/#organization","name":"BigCloudy internt services pvt ltd.","url":"https:\/\/www.bigcloudy.com\/knowledge-base\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/#\/schema\/logo\/image\/","url":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-content\/uploads\/2024\/09\/cropped-BGC_logo.webp","contentUrl":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-content\/uploads\/2024\/09\/cropped-BGC_logo.webp","width":368,"height":114,"caption":"BigCloudy internt services pvt ltd."},"image":{"@id":"https:\/\/www.bigcloudy.com\/knowledge-base\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/BigCloudyHosting\/","https:\/\/x.com\/bigcloudypvtltd","https:\/\/www.instagram.com\/bigcloudypvtltd\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/docs\/15722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/comments?post=15722"}],"version-history":[{"count":0,"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/docs\/15722\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/docs\/15569"}],"wp:attachment":[{"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/media?parent=15722"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/www.bigcloudy.com\/knowledge-base\/wp-json\/wp\/v2\/doc_tag?post=15722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}