centos 6.4 – django deploy with apache and mod_wsgi

Luke asked:

I’m trying to deploy on a VM with centos 6.4 a basic django project with apache and mod_wsgi. This is the project tree:

myproj/
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
└── myproj
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py
    ├── settings.pyc
    ├── urls.py
    └── wsgi.py

this is the wsgi.py file (it’s the default generated by django-admin.py startproject):

"""
WSGI config for myproj project.

This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
this application via the ``WSGI_APPLICATION`` setting.

Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of another
framework.

"""
import os

# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "myproj.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)

and this is the virtualhost configuration (/etc/httpd/conf/httpd.conf):

#WSGIPythonPath /home/www/myproj/myproj
<VirtualHost *:82>
     ServerAdmin webmaster@example.com
     WSGIScriptAlias /django /home/www/myproj/mypproj/wsgi.py
     WSGIDaemonProcess myproj user=apache threads=3
     <Directory />
        Options FollowSymLinks
        AllowOverride None
     </Directory>
     DocumentRoot /tmp
     ServerName www.example.com
     ServerAlias www.example.com
     ErrorLog /var/log/httpd/error_log
     CustomLog /var/log/httpd/access_log combined
</VirtualHost>

while i can access to index apache page (192.168.0.15:80 on my local network), if i try to point my broser on 192.168.0.15:82 i get “Destination unreachable”. Any idea of what is missing or what is wrong in the configuration?
on access or error log there’s no trace of activity…


this is the modified virtualhost configuration:

<VirtualHost *:82>
     ServerAdmin webmaster@example.com
     WSGIScriptAlias /django /home/www/myproj/myproj/wsgi.py
     WSGIDaemonProcess myproj user=apache threads=3 python-path=/home/www/myproj/myproj/:/usr/lib/python2.6/site-packages
     WSGIProcessGroup myproj
     <Directory /home/www/myproj/myproj>
        <Files wsgi.py>
            Order allow,deny
            Allow from all
        </Files>
     </Directory>
     #DocumentRoot /tmp
     #ServerName www.example.com
     #ServerAlias www.example.com
     #Alias /media/ /home/www/myproj/
     ErrorLog /var/log/httpd/error_log
     CustomLog /var/log/httpd/access_log combined
</VirtualHost>

…nothing has changed. On:

wget 192.168.0.15:82

I get “Connection refused”. The same configuration on a Debian machine works (in that case is mapped on port 80). Any help?

My answer:


If you want to access port 82 directly, you’ll need to open the appropriate port in the server’s firewall. You can do this with the system-config-firewall-tui command line tool.


View the full question and answer on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.