DEV Community

Cover image for How to deploy your Python Django project
Adam Miedema
Adam Miedema

Posted on • Originally published at cleavr.io

How to deploy your Python Django project

Django is a top Python web-framework known for its features, scalability, and flexibility.

In this guide, we'll walk through how you can deploy your Django projects with Cleavr.io.

Prerequisites

Before proceeding, you'll need to have an active Cleavr.io account and have a server provisioned and ready-to-go.

Step 1 - Add a NodeJS SSR app

Add a new NodeJS SSR site to your server in Cleavr.

We're using NodeJS SSR as the site's app type as it will install Node AND PM2 to the server. PM2 manages more than just node applications, so we'll take advantage of this to serve our Django app and keep it alive.

Step 2 - Configure allowed hosts

In the Django project, locate the settings.py file, or wherever you have ALLOWED_HOSTS defined, and add the domain used in the previous step to the list of allowed hosts.

For example, this is what our example looks like:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'c2lbzu22oxujfgnr2848.cleaver.rocks']
Enter fullscreen mode Exit fullscreen mode

Push your changes to your GIT repo.

Step 3 - Configure app repo

Once the site has successfully been added to the server, click the Setup and deploy link to configure the web app.

On the settings > repo tab, add armgitaar/django-helloworld to the repo and keep branch as master.

In this example, we're using a Django repo originally by Django Venezuela that I've modified a bit to make the port number use the one automatically assigned by Cleavr. View the example repo here.

To view the modification, open the manage.py file and take note of the following lines:

from django.core.management.commands.runserver import Command as runserver
runserver.default_port = os.environ.get('PORT', 8000)
Enter fullscreen mode Exit fullscreen mode

Django apps default to run on port 8000 and the above configuration will first check what the environment port is and will select that port if available.

Step 4 - Configure entry and PM2 ecosystem

On the Build tab, set Entry Point to manage.py and Arguments to runserver.

In the PM2 ecosystem, we'll need to set the interpreter to Python3 as well as remove a couple of configs that aren't compatible with Python apps.

Add interpreter:

"interpreter": "/usr/bin/python3",
Enter fullscreen mode Exit fullscreen mode

Remove the following lines:

 "instances": "max",
 "exec_mode": "cluster_mode",
Enter fullscreen mode Exit fullscreen mode

The ecosystem should look similar to the following:

{
  "name": "your.domain.com",
  "script": "manage.py",
  "args": "runserver",
  "log_type": "json",
  "cwd": "/home/cleavr/your.domain.com/current",
  "interpreter": "/usr/bin/python3",
  "env": {
    "PORT": assigned port number,
    "CI": 1,
  }
}
Enter fullscreen mode Exit fullscreen mode

Step 5 - Configure deployment hooks

On the deployment hooks page,

  • Disable Install NPM Packages hook
  • Disable Build Assets hook

Add a new hook to install Python dependencies:

pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

Add a new hook for migration:

python3 manage.py migrate
Enter fullscreen mode Exit fullscreen mode

Order the above hooks to run before the activation deployment hook.

Step 6 - deploy!

Once all of the above is complete, deploy the app!

For this example, there is one more thing we need to do, which is create an admin. The easiest way is to SSH into the server and run the following command:

python3 manage.py createsuperuser --username admin --email admin@mail.com
Enter fullscreen mode Exit fullscreen mode

You will be prompted to add and confirm a password.

Once completed, you should now see 'Hello World' render on the app's domain.

Discussion (0)