Search code examples
djangodeploymentwsgiproduction

What am I missing in Django production deployment?


I have the following codes for deploying a Django 1.9 project named deploy_project on a CentOS 7 server.

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "deploy_project.settings")

application = get_wsgi_application()

The above was generated by default.

httpd.conf

WSGIScriptAlias / /var/www/deploy_project/deploy_project/wsgi.py
WSGIPythonPath /var/www/deploy_project

<Directory /var/www/deploy_project/deploy_project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

My project directory is in /var/www/deploy_project. Inside that I have an app called Deploy, the project settings folder called the same as the project name deploy_project and the manage.py file. I also have a db.sqlite3 file as I am not using MySQL, but my app just runs a view which shows Hello World. I am not using the database.

When I visit the server IP from browser, I receive a 404 Not Found page with the message The requested URL / was not found on this server..

tree output of project folder

├── db.sqlite3
├── deploy
│   ├── admin.py
│   ├── admin.pyc
│   ├── apps.py
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── templates
│   │   ├── 404.html
│   │   └── deploy
│   │       └── hello.html
│   ├── tests.py
│   ├── urls.py
│   ├── urls.pyc
│   ├── views.py
│   └── views.pyc
├── deploy_project
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
└── manage.py

project urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),

    url(r'^', include('deploy.urls')),
]

app urls.py

urlpatterns = [
    url(r'^$', views.Hello, name='hello'),
]

views.py

def Hello(request):
    return render(request, "deploy/hello.html", {})

hello.html

Hello World!

Solution

  • Being the dumb developer that I am, I didn't restart apache service, so my settings didn't take effect.

    For CentOS 7 my command was:

    sudo systemctl restart httpd
    

    That solved my problem. Thanks for your time @BurhanKhalid.