Sign In
Sign In

Deploy a Django App

Updated on 14 May 2024

You can find the step-by-step deployment guide here.

Application Build

Hostman uses the following environment when building a Django application:

  • Python 3.8
  • pip
  • gunicorn
  • System libraries for working with PostgreSQL and MySQL

Hostman will execute the following commands during the build:

apt-get install -y python3 python3-pip gunicorn python3-psycopg2 libpq-dev python-dev default-mysql-client python3-dev default-libmysqlclient-dev python3-mysqldb --fix-missing
pip3 install psycopg2 django
ln /usr/bin/python3 /usr/bin/python -sf
ln /usr/bin/pip3 /usr/bin/pip -sf

If the project has a requirements.txt file, we will also run:

pip3 install --upgrade -r requirements.txt

The default start command is:

python3 manage.py runserver 0.0.0.0:8000

Make sure that the manage.py file is located in the root of the project and is used as the application's entry point.

You can also define environment variables. For example, to specify the hosts from which Django is allowed to receive requests, set the DJANGO_ALLOWED_HOSTS key with a value containing IP addresses or hostnames. You can specify multiple hosts, separated by commas without spaces. By default, this variable is set to 127.0.0.1,localhost.

For Django applications, you must set DEBUG=True in the settings; otherwise, static files will not be served.

For more details on configuration, refer to the Django documentation.

Troubleshooting

Deployment fails

If there are problems with deployment, first check the deployment log. You will be able to determine at what point something went wrong.

Often the problems are related to the start command. Check that everything in your development environment works with gunicorn. Make sure that all modules required to run the application are present in the requirements.txt file.

DisallowedHost at /Invalid HTTP_HOST

The problem occurs when the hostname is not specified in the settings.py file.

This setting is a security measure to prevent HTTP Host header attacks.

To fix the problem, you need to make changes to the settings.py file, specifying your domain in the ALLOWED_HOSTS directive, for example:

ALLOWED_HOSTS = ["your.domain.com"]

You can also allow all domains if you don't want to use this security measure:

ALLOWED_HOSTS = ["*"]
Was this page helpful?
Updated on 14 May 2024

Do you have questions,
comments, or concerns?

Our professionals are available to assist you at any moment,
whether you need help or are just unsure of where to start.
Email us
Hostman's Support