After, two solid weeks of trying to move my Django project on to production, one thing I can tell you for a fact is that there is no sure fire way of deploying Django projects, but I can give you a 95% assurance that if you explicitly follow all the steps in this guide you’ll successfully deploy your project. Also, feel free to drop a comment if you encounter any challenge.
This article is in two parts, in the first phase I will show you how to deploy your Django projects on Heroku and in the second phase you’ll learn how to use cloud file storage services like aws s3 bucket for storing you media file uploads, I'll also be explaining all the git command used during this exercise incase you're entirely new to git, with that much said let’s dive in.
Step 1. You need to create a Heroku account Here and then create an app on Heroku.
Step 2. Download and install the following apps
heroku cli, if you already have these downloaded then skip this step and proceed to the next step.
Step 3. Login into your Heroku account from terminal using this code
Step 4. Now that you've successfully logged into account, you need to create a repository on your git and we will do that using the following command.
git init - Initializes/create a repository/folder.
git status - To check the current status of your git project if any changes have been made.
git status you can see all the changes that have been made on your project.
Step 5. You need Heroku to know where you want to push your project on its server by inputting the following line in your terminal
Heroku git: remote -a 'name-of-your-app-that-was-created-on-the-heroku-server'
Step 6. At this step we can choose to push but if we do you'll encounter some errors; some libraries were installed locally while you were creating your app and as such we need those libraries to also be installed on the heroku server or at least let heroku know those libraries exist in other to efficiently run your app on the Heroku server, now type the following code.
pip freeze > requirements.txt
Next, we need to install some libraries using pip, create a few files and edit our
settings.py file before we can push our project to the heroku server
pip install gunicorn
pip install whitenoise
Gunicorn: Acts as a middleman between your application and the web server’s application in GETing and POSTing requests
Whitenoise: whitenosie helps in rendering your static files on the Heroku hosting server.
- Step 7. After installing these libraries create a file in your root folder named
Procfileand input the following line of code
web: gunicorn 'name-of-project.wsgi
NB. A Procfile does not have any file extension
Step 8. Run this code again
pip freeze > requirements.txtto add your newly installed libraries to your requirements file.
Step 9. Next, we need to make some adjustments to our
Look for the line that has
ALLOWED_HOST = [ ]
and change it to
ALLOWED_HOST = ['*']
What this implies is that any domain address can easily access your django project once it’s been deployed, on the other hand if we specify an address say www.myproject.com this implies that you'll only be able to access this app only from this given domain.
Next, look for the
MIDDLEWARE section and add the following line of code there
NB: ensure it is added on the second line as you need your static files to be render just after the security libraries
Lastly, on your
settings.py file add the following lines of codes in your static section, so your static files can be properly rendered
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT =os.path.join(BASE_DIR, 'staticfiles')
- Step 10. Lastly we just need to run a few line of codes on our terminal and then finally push our code to the heroku server first run
python manage.py collectstatic
git add .
git add . includes all the changes we have made so far.
git status again and you'll notice our code has been added, next we need to commit our code to git with
git commit -m 'First commit'
git commit is giving git the sole right to make the changes to our codes and finally we push our code with.
git push heroku master
git push heroku main
Your project has been successfully deployed, you can view it by visiting the link usually in this format
NB: Many tutorials out there make use of the django_heroku or django_on_heroku, in 2022 if you try using these libraries I'm slightly sure you'll encounter an error I really don't have answers as to why but the only tangible answer I can give is that these libraries are no longer been maintained and as such are no longer compatible with some functionalities on the heroku server.
If you still experience any difficulty please do not hesitate to contact me.